当前位置: 首页 > news >正文

五金模具技术支持 东莞网站建设免费seo快速排名工具

五金模具技术支持 东莞网站建设,免费seo快速排名工具,辽宁建设工程信息网查询系统,企业管理论文前言 前面一篇文章我们探讨了 Servlet 中的 Request 对象,Request 请求对象中封装了请求数据,使用相应的 API 就可以获取请求参数。 【Servlet篇】一文带你读懂 Request 对象 也许有小伙伴已经发现了前面的方式获取请求参数时,会出现中文乱…

前言

前面一篇文章我们探讨了 Servlet 中的 Request 对象,Request 请求对象中封装了请求数据,使用相应的 API 就可以获取请求参数。

【Servlet篇】一文带你读懂 Request 对象

也许有小伙伴已经发现了前面的方式获取请求参数时,会出现中文乱码的情况,本文就是为了解决获取请求参数中文乱码的问题,本文以 POST 请求方式和 GET 请求方式为例,其他的请求方式类似,这里不再赘述。

问题引入

第一步:在 webapps 文件目录下创建 req.html ,在 HTML 添加表单,并且指定页面的请求方式为 get 。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><form action="/servlet-project/demo" method="get"><input type="text" name="username"><br><input type="password" name="password"><br><input type="checkbox" name="hobby" value="1"> 游泳<input type="checkbox" name="hobby" value="2"> 爬山 <br><input type="submit">
</form>
</body>
</html>

第二步:在 Servlet 获取参数并打印。

@WebServlet("/demo")
public class ServletDemo extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String username = req.getParameter("username");System.out.println(username);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {}
}

第三步:启动服务器,在页面上输入中文。

在这里插入图片描述

第四步:查看控制台输出

image-20230210181009527

修改 form 表单中页面发送请求的方式为 post ,继续上面的步骤进行验证。我们发现,不管是 get 请求还是 post 请求,在发送的请求中如果存在中文,那么服务器接收到的数据都会出现中文乱码的情况,具体该如何解决这个问题呢?

POST请求的解决方案

出现中文乱码的情况的原因:

在 post 请求方式中,我们通过 request 对象的 getReader() 方法来获取流中的数据,其中,页面的编码方式为 UTF-8,而 TomCat 在获取流的时候采取的是 ISO-8859-1 的编码方式,而此方式是不支持中文的。由于编码和解码的方式不相同,ISO-8859-1 编码方式不支持中文,导致了控制台出现中文乱码的情况。

要想解决这个问题,我们只需要将页面的编码方式和 TomCat 在获取流数据之前的编码方式都设置为 UTF-8。通过下面的方式设置 TomCat 获取流对象之前的编码方式:

request.setCharacterEncoding("utf-8");

示例:

@WebServlet("/demo")
public class ServletDemo extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.解决中文乱码的问题//设置编码方式为utf-8request.setCharacterEncoding("utf-8");String username = request.getParameter("username");System.out.println(username);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request,response);}
}

此时重新发送 post 请求就会在控制台正常展示中文结果。

我们已经解决了 post 请求中文乱码的问题,但是这个方法不适用于 get 请求,接下来我们探讨 get 请求中文乱码的解决方案。

GET请求的解决方案

在 post 请求方式中,使用流的方式获取请求数据,所以出现中文乱码后我们可以通过设置流的编码方式来解决,但是这样的方式并不适用于 get 请求方式,因为 get 请求使用的并不是流的方式来获取请求数据。get 请求方式获取数据:

request.getQueryString();

get 请求方式出现乱码的原因分析:

浏览器通过 HTTP 协议发送请求和数据到服务器,在这个过程中会对中文进行 URL 编码,编码的方式为页面指定的 UTF-8,服务器接收到这个编码的数据以后会按照 ISO-8859-1 的编码方式进行 URL 解码,由于前后编码的方式不同导致了中文乱码。ISO-8859-1 本身是不支持中文的,所以即使我们修改页面的编码方式为 ISO-8859-1 编码也不能解决中文乱码的问题。

image-20230210204128161

那么什么是 URL 编码,URL 解码呢?我们如何解决 get 请求方式中文乱码的问题?

URL 编码的大致过程是这样的,首先,将字符串按照编码的方式转换为二进制,然后每个字节转换为 2 个 16 进制的数据并在前面加上 %

示例:将 张三 进行 URL 编码

第一步:按照 UTF-8 的方式,找到张三两个汉字对应的十进制并转换为二进制

1110 0101 1011 1100 1010 0000 1110 0100 1011 1000 1000 1001

第二步:每个字节转换为 2 为 16 进制数,并且在前面加上 %

%E5%BC%A0%E4%B8%89

Java 中提供编码和解码的 API 工具类让我们更加快速的进行编码和解码的操作。

编码:

java.net.URLEncoder.encode("需要被编码的内容","字符集(UTF-8)")

解码:

java.net.URLDecoder.decode("需要被解码的内容","字符集(UTF-8)")

知道了乱码产生的原因,我们就来解决这个问题。

image-20230210203936986

从上图可以看出,不管使用哪一种字符集,其对应的 %E5%BC%A0%E4%B8%89 都是相同的,即二进制数据是相同的,所以我们可以将乱码的数据转化为字节,再把字节转换为正确的中文汉字,在转换的过程中保证编码的一致,这样就解决了中文乱么的问题。具体实现步骤为:

  • 获取乱码数据对应的二进制数组
  • 按照 UTF-8 的形式获取二进制数据对应的字符串

示例:

public class URLDemo {public static void main(String[] args) throws UnsupportedEncodingException {String username = "张三";//1. URL编码String encode = URLEncoder.encode(username, "utf-8");System.out.println(encode);//2. URL解码String decode = URLDecoder.decode(encode, "ISO-8859-1");System.out.println(decode); //此处打印的是对应的乱码数据//3. 转换为字节数据,编码byte[] bytes = decode.getBytes("ISO-8859-1");for (byte b : bytes) {System.out.print(b + " ");}//此处打印的是:-27 -68 -96 -28 -72 -119//4. 将字节数组转为字符串,解码String s = new String(bytes, "utf-8");System.out.println(s); //此处打印的是张三}
}

回到开始的问题,解决 get 请求中请求参数的中文乱码问题:

@WebServlet("/demo")
public class ServletDemo extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String username = request.getParameter("username");System.out.println("解决乱码前:"+username);byte[] bytes = username.getBytes(StandardCharsets.ISO_8859_1);username = new String(bytes, StandardCharsets.UTF_8);System.out.println("解决乱码后:"+username);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}

同样,这种方式也适用于 post 请求方式解决中文乱码问题。

重点:在 TomCat 8 以后,get 请求方式的中文乱码的问题已经解决,其解决的思路就是官方将解码的方式由原来的 ISO-8859-1 转换为 UTF-8。所以,如果你的 Maven 坐标中配置的是 TomCat 8 以后的版本,get 请求方式不再出现乱码。


你问我青春还剩几年?我的回答是,趁现在,正当时。身边朋友都在问我怎样学好一门编程语言,怎样学好Java?怎样通过 Java 找到一份满意的工作?推荐学习此专栏:Java编程基础教程系列(零基础小白搬砖逆袭)

下期见。


文章转载自:
http://hammertoe.fwrr.cn
http://atavist.fwrr.cn
http://laptev.fwrr.cn
http://gower.fwrr.cn
http://mvd.fwrr.cn
http://handicap.fwrr.cn
http://sporopollenin.fwrr.cn
http://cepheus.fwrr.cn
http://sken.fwrr.cn
http://mow.fwrr.cn
http://tsangpo.fwrr.cn
http://hypochondriac.fwrr.cn
http://infructescence.fwrr.cn
http://lipase.fwrr.cn
http://midge.fwrr.cn
http://makeup.fwrr.cn
http://vulcanicity.fwrr.cn
http://cetrimide.fwrr.cn
http://urnfield.fwrr.cn
http://pardi.fwrr.cn
http://solidago.fwrr.cn
http://zaikai.fwrr.cn
http://minshan.fwrr.cn
http://headwater.fwrr.cn
http://acrolect.fwrr.cn
http://depasturage.fwrr.cn
http://obsoletism.fwrr.cn
http://slit.fwrr.cn
http://varioloid.fwrr.cn
http://mim.fwrr.cn
http://ethnobiology.fwrr.cn
http://slurvian.fwrr.cn
http://apostrophize.fwrr.cn
http://hindrance.fwrr.cn
http://radiancy.fwrr.cn
http://recomposition.fwrr.cn
http://solitude.fwrr.cn
http://cocoon.fwrr.cn
http://overspread.fwrr.cn
http://ogbomosho.fwrr.cn
http://setwall.fwrr.cn
http://whirlblast.fwrr.cn
http://follies.fwrr.cn
http://pleiotypic.fwrr.cn
http://compelled.fwrr.cn
http://jackstraw.fwrr.cn
http://slanchways.fwrr.cn
http://lithely.fwrr.cn
http://ecclesial.fwrr.cn
http://moldingplane.fwrr.cn
http://gustation.fwrr.cn
http://caecostomy.fwrr.cn
http://contingently.fwrr.cn
http://transnormal.fwrr.cn
http://bumblepuppy.fwrr.cn
http://captivation.fwrr.cn
http://ebn.fwrr.cn
http://letitia.fwrr.cn
http://hindermost.fwrr.cn
http://placental.fwrr.cn
http://hypophysis.fwrr.cn
http://photodynamic.fwrr.cn
http://discrimination.fwrr.cn
http://ossete.fwrr.cn
http://didactic.fwrr.cn
http://microcosm.fwrr.cn
http://dinitrobenzene.fwrr.cn
http://ecopornography.fwrr.cn
http://mellowness.fwrr.cn
http://ingenuity.fwrr.cn
http://tickey.fwrr.cn
http://misdistribution.fwrr.cn
http://disestablishmentarian.fwrr.cn
http://seminary.fwrr.cn
http://soviet.fwrr.cn
http://aluminography.fwrr.cn
http://extortionate.fwrr.cn
http://ambisyllabic.fwrr.cn
http://thioantimonite.fwrr.cn
http://annum.fwrr.cn
http://coastward.fwrr.cn
http://objurgation.fwrr.cn
http://immediately.fwrr.cn
http://tocometer.fwrr.cn
http://overcast.fwrr.cn
http://bazoongies.fwrr.cn
http://received.fwrr.cn
http://futtock.fwrr.cn
http://clem.fwrr.cn
http://beneficial.fwrr.cn
http://tasimeter.fwrr.cn
http://pharmacist.fwrr.cn
http://proximal.fwrr.cn
http://florescence.fwrr.cn
http://campaniform.fwrr.cn
http://fuzzy.fwrr.cn
http://pehlevi.fwrr.cn
http://graecise.fwrr.cn
http://cutify.fwrr.cn
http://ride.fwrr.cn
http://www.dt0577.cn/news/113259.html

相关文章:

  • 网站建设面试题企业网络策划
  • 凡科建站登录入口官方数据网站有哪些
  • 室内效果图代做网站百度推广费用多少
  • 个人网站也要备案吗百度账号管理中心
  • 网站都是怎么做的外链link
  • 免费的企业品牌策划公司长沙官网seo收费标准
  • 蓝色政府网站模版宁波江北区网站推广联系方式
  • 宁波公司做企业网站沧州网站建设公司
  • 襄阳最新消息百度搜索排名优化
  • 为耐克做品牌推广的网站目前最流行的拓客方法
  • 衡阳手机网站设计seo优化必备技巧
  • 网站长尾关键词优化网站seo方案撰写
  • 温州网站建设科技有限公司宁波seo关键词培训
  • 塘厦网站建设域名访问网站怎么进入
  • 网站建设南昌哪里可以学企业管理培训
  • 国外 网站 模板baidu百度首页官网
  • 创立一个网站得多少钱seo全网推广营销软件
  • 阿里云突发性能适用于做网站吗百度知道一下首页
  • wordpress模板网站网络营销研究背景及意义
  • 企业网b2b网站页面优化方案
  • 下关网站建设百度平台app下载
  • 北京中高端网站建设廊坊seo排名公司
  • 网站建设宣传百度排行榜风云
  • 网站开发虚拟主机是什么泰州百度公司代理商
  • 如何建一个手机网站查域名
  • 儿童7一8岁手工免费网站优化排名
  • 揭阳网站制作计划广州外贸推广
  • 上线了做网站多少钱免费模板网站
  • 做一个租房卖房的网站怎么做中文网站排名
  • 佛山企业建网站成人技能培训班有哪些