在上一章节提到了Get()请求方式在Servlet处理中出现乱码的问题,使用的解决方案是字符串的强制编码方式。Post()请求可以通过HttpServletRequest对象的request.setCharacterEncoding("字符集,GBK或者UTF-8");来解决。
那么,为什么在Servlet中对两种请求方式的乱码处理需要区别对待呢?这就是本次要跟大家来讲解的内容。是不是除了强制转码的方式,Get()就不能使用和Post()一样的处理方式来解决了么?答案当然是否定的。
我们先来看一下原来两种请求的解决方案。
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String uname = request.getParameter("name");
System.out.println(uname);//乱码
if(uname!=null){
//将uname的值通过原来的编码方式(ISO-8859-1)转换成可显示中文的编码(GB2312)
uname=new String(uname.getBytes("ISO-8859-1"),"GB2312");
}else{
uname="游客";
}
System.out.println(uname);//输出中文“琳达”
// 省略
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//请求的页面设置了GBK方式进行编码,那么通过request来设置获取的对应编码
//如果请求式为Get()则此代码无效
request.setCharacterEncoding("GBK");
String uname = request.getParameter("name");
System.out.println(uname);//正常的文字
// 省略
}
为什么在Servlet中对两种请求方式的乱码处理需要区别对待呢?
Post()请求下URL encode的方式取决于Jsp和Html页面的字符集设置,这是开发人员可以指定的,但是Get()请求下的URL encode对上面的做法却不予理会。
看servlet的官方API说明有对request.setCharacterEncoding("字符集,GBK或者UTF-8");方法的解释:Overrides the name of the character encoding used in the body of this request. This method must be called prior to reading request parameters or reading input using getReader().那么Get()请求在Servlet中使用request.getParameter("name");即使对setCharacterEncoding("字符集")进行了设置,还是会出现乱码。可以看出对于Get()方法他是无能为力的。
网上有这样的处理方法,介绍给大家。
<Connector port="8080" protocol="HTTP/1.1" maxThreads="150" connectionTimeout="20000" redirectPort="8443" URIEncoding="GBK"/>
这样Tomcat的解码方式就从默认的“ISO-8859-1”变成现在的“GBK”,让Tomcat使用指定的方式进行URL decode(解码)。
Get()、Post()请求下都适用的处理方法:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//请求的页面设置了GBK方式进行编码,那么通过request来设置获取的对应编码
//如果请求方式为Get()这样也有效了!
request.setCharacterEncoding("GBK");
String uname = request.getParameter("name");
System.out.println(uname);//正常的文字
// 省略
}
本章的讲解,主要对Get()方式乱码的解决方案提出了补充的方法——对Tomcat的URL encode进行指定。原来使用强制转码来还原数据就是因为Tomcat的默认解码方式ISO-8859-1。问题出在哪里,我们就在哪里进行解决。
期待大家的关注,也希望得到宝贵的建议。
分享到:
相关推荐
Jsp和Servlet中文乱码问题
servlet与jsp中文乱码处理,详细介绍多种乱码处理方法,包括使用过滤器的方法
jspservlet取参数乱码问题分析jspservlet取参数乱码问题分析jspservlet取参数乱码问题分析jspservlet取参数乱码问题分析jspservlet取参数乱码问题分析
jsp传参 servlet接收中文乱码问题的解决方法.docx
彻底解决Servlet及jsp解决中文乱码问题
Servlet + Tomcat 中文乱码的解决方法,浏览器把Unicode字符转换为GBK字符,这样页面的内容和浏览器的显示模式都设成了GBK,就不会乱码了
讲述javaweb开发中的jsp乱码问题 get、post的区别 http协议的图解
解决jsp+servlet开发中的中文乱码问题
F:\文档\PDF格式学习资料\主题:Java Web开发(JSP、Servlet)乱码终极解决方案.txtF:\文档\PDF格式学习资料\主题:Java Web开发(JSP、Servlet)乱码终极解决方案.txtF:\文档\PDF格式学习资料\主题:Java Web开发...
下面小编就为大家带来一篇jsp传参 servlet接收中文乱码问题的解决方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
NULL 博文链接:https://tongqiuyan.iteye.com/blog/1120389
jsp+servlet+mysql乱码解决的 累积各路方法 最终终成正果
彻底解决servlet中文乱码问题,对于gbk、utf-8、iso-8859-1之间的选择,做了详细的讲解!
乱码总结,其中包括java,servlet,jsp,struts2,等,属个人总结,仅提供参考
本文档详细地介绍了如何解决MySql数据库中的中文乱码问题,此问题的解决将极大地帮助基于MySql的PHP编程、JSP编程、Servlet编程及C#或.Net编程!测试过的开发平台包括 Netbeans和Eclipse。测试过的服务器包括Apache、...
最简单的写法 只要JSP页面的 编码格式和 web.xml 编码格式一样就行
JSP Servlet 汉字编码问题 乱码解决方法
jsp和servlet操作mysql中文乱码问题的解决办法.docx
JSP_利用Filter解决Servlet输出中文乱码的问题.docx
学生信息管理系统第二代,解决乱码问题,同学们再也不需要关系字符集乱码问题了!!有任何问题请联系我! 项目不是很大,但做期末考试绰绰有余,而且适合初学者,里面用到的技术都是内容,没有超纲,而且简单通俗...