凡是开发过web应用的程序员,肯定都或多或少的遇到过乱码的困惑,笔者也不例外,现根据网上的资料和个人的经验总结如下:
在tomcat4中,get 与 post 的编码是一样的,所以只要在过滤器中通过 request.setCharacterEncoding 设定一次就可以解决 get 与 post 的问题。
而在tomcat5 中,get 与 post 的处理是分开进行的,所以在此我们重点讨论。
表单提交的方式不外乎Get 和 Post 两种,我们分别讨论:
Post:表单中POST方式提交的数据,只要在接收数据的JSP中正确request.setCharacterEncoding参数,即将对客户端请求进行重新编码的编码设置成浏览器编码,就可以保证得到的参数编码正确。有些人可能会问,那如何得到浏览器编码呢?上面我们提过了,在默认请情况下,浏览器编码就是你在响应该请求的JSP页面response.setCharacterEncoding设置的值。所以对于POST表单提交的数据,在获得数据的JSP页面中request.setCharacterEncoding要和生成提交该表单的JSP页面的 response.setCharacterEncoding设置成相同的值。
一句话:统一使用编码过滤器即可解决所有的post请求的乱码问题!
Get:Tomcat5.0中,默认使用ISO-8859-1对URL提交的数据和表单中GET方式提交的数据进行重新编码。
解决get提交的乱码的方法如下:
A:对得到的数据重新进行编码转换,String para = new String( request.getParameter("para").getBytes("iso8859-1"), "页面编码");
但是个人不推荐这个方法,一个设置太烦琐,二是不利于移植到其他服务器平台,如weblogic。
B:在Tomcat的配置文件server.xml的Connector标签中设置useBodyEncodingForURI或者
URIEncoding属性,其中useBodyEncodingForURI参数表示是否用request.setCharacterEncoding
参数对URL提交的数据和表单中GET方式提交的数据进行重新编码,在默认情况下,该参数为false(Tomcat4.0中该参数默认为true);URIEncoding参数指定对所有GET方式请求(包括URL提交的数据和表单中GET方式提交的数据)进行统一的重新编码(解码)。
综上所述:要彻底解决tomcat5.0以上的Post和Get 提交的乱码,只需要两个步骤即可:
一:配置统一编码过滤器,解决Post请求的乱码。
二:修改tomcat的server.xml配置文件,解决Get请求的乱码。
经过这样的步骤,乱码绝对会离你而去。
Weblogic服务器:
Post请求:在web.xml中配置统一编码过滤器即可!
Get请求:在大多数服务器上,不会出现乱码,有的服务器上需要在web.xml添加如下设置:
<context-param> <param-name>weblogic.httpd.inputCharset./*</param-name> <param-value>编码类别</param-value> </context-param> |