最近在看《servlet与jsp核心编程这本书》,涉及到字符集处理这一章节,由于本人对这块也是很迷糊,所以经过反复设计验证,彻底解决了从客户端请求到服务端响应输出乱码的问题,在此做下小结。
我们知道客户端发送一次请求,先要经过servlet容器(后文都称作tomcat)的过滤器进行过滤,然后经过servlet进行处理,处理后的结果可以直接采用HttpServletResponse的getWriter()方法输出到客户端,也可以直接携带参数跳转到jsp页面,整个过程中有两个地方会导致乱码问题的出现:
1.浏览器向tomcat发送请求
大多数时候我们都会采用GET请求的方式访问服务器(例如:http://localhost:8080/strutsSpringMybatis/responseAction?name=“小明”),那么请求在到达tomcat服务器后,如果你没有设置过编码,那么该请求会采用tomcat默认的编码方式(也就是“ISO8859-1”),进行编码,那么此时你用HttpServletRequest的getParameter()方法打印输出到日志中,必然会产生乱码,此时就要对tomcat的默认字符集进行设置了,有两种方式:
① 直接在tomcat的安装包根目录/conf/server.xml中设置
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>
② 利用String设置编码(但该种方式亲测输出到控制台仍旧乱码,不明原因)
String name=request.getParameter("name");
String myname=new String(name.getBytes(),"UTF-8");
大多数开发中肯定采用第一种方式,因为不需要在每个请求的线程中对字符编码进行设置。
2.服务端响应
数据输出到服务端时如果不进行设置,它也会采用默认得编码集(“ISO8859”)进行编码,因此需要做如下设置:
HttpServletResponse res=ServletActionContext.getResponse();
res.setCharacterEncoding("UTF-8");
此时不论是输出到jsp还是直接输出到控制台,均不会出现乱码。
3.总结
这是对于在servlet开发时出现乱码时的几种快速的解决办法,但是并不是很正规,使用起来也很麻烦,其实在实际项目中大多数都是使用的servlet的过滤器进行字符集的设置,然后对请求和响应进行过滤,此种方法下次再做介绍吧!