J2EE学习笔记:HttpServletRequest与HttpServletResponse的乱码问题

本文详细阐述了处理HttpServletRequest和HttpServletResponse中GET与POST请求的中文乱码问题,包括原因分析及解决方案,如设置字符编码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.HttpServletRequest的乱码问题

1.HttpServletRequest的请求分为GET与POST请求,GET与POST请求的附带的参数的位置不相同,所以两者的处理的方法并不相同。

①GET请求

GET请求的参数会附带在请求的url地址之后,Tomcat服务器接收之后默认使用ISO-8859-1编码进行解析,所以我们得到的中文参数会乱码。

举例:

 

当我们点击encoding.html中的GET的a标签,客户端会向服务器发送一个get请求,我们可以通过浏览器的开发者工具查看到。

我们再去看我们的后台,可以看到如下乱码:

所以我们可以通过代码将tomcat用ISO-8859-1编码得到的字符串乱码转为UTF-8编码,所以在servlet中加入两行代码即可。

 

再次点击encoding.html中的超链接,可以看到正确的结果。

②POST请求

POST请求会将附带的参数添加到http的请求体中,若不"告诉"tomcat用什么编码进行解析,默认仍然使用ISO-8859-1编码,所以我们得到的参数值仍然会乱码。

 

 

在encoding.html中两个表单域填写李四和456,点击提交按钮,我们可以查看后台得到的乱码。

处理POST请求的乱码,我们可以通过request对象的setCharacterEncoding方法"告诉"tomcat去拿请求体的参数用UTF-8编码进行解析。

我们再次在encoding.html中两个表单域填写李四和456,点击提交按钮,可以看到正确编码的参数值了。

这里会有个疑问,就是为什么get请求处理乱码不能像post一样"告诉"tomcat用UTF-8编码进行解析?因为request对象并没有提供这样方法"告诉"tomcat用UTF-8编码去解析url地址中的参数。(不过我们可以在tomcat目录下的conf目录中的server.xml配置文件中的http连接器Connector的属性中添加URLEncoding="UTF-8",这样tomcat默认就是UTF-8编码进行解析url中参数,但这种方法不常用,因为移植性不好。)

 

二.HttpServletResponse的乱码问题

HttpServletResponse的乱码问题很简单,只需在通过response对象获取输出流(Writer,OutputStream)之前,通过response对象的setContentType方法,比如response.setContentType("text/html;charset=UTF-8");这样通过response对象输出到客户端的中文就不会乱码了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值