环境:TOMCAT5+
解决TOMCAT乱码方式很多。目前我认为最好用的还是添加filter
"XMLHttpRequest".equalsIgnoreCase(request.getHeader("x-requested-with")) 为ajax方式,使用UTF-8编码;其他统一为GBK(根据项目情况,可作为filter初始化参数)
方法为request.setCharacterEncoding (就是实现javax.servlet.Filter,并且实现方法doFilter即可,web.xml配置不是本文目的)。
使用post方式一直没有问题。直到…………我使用GET传递参数又一次出现了乱码。
经过网上搜索以及本人亲自开发测试、系统开发测试通过。
Connector解决办法:修改conf/server.xml , 在端口如 <Connector port="7308" 标签内增加 URIEncoding="GBK" (根据项目情况,我的是GBK)。
原因总结:Tomcat中提供的request是被其封装后的request, filter中调用request.setCharacterEncoding即是tomcat实现的代码。从TOMCAT5 以后,对post中,request.setCharacterEncoding有效,参数进行转码; 对于GET,request.setCharacterEncoding方法,tomcat只是提前使用conf/server.xml URIEncoding(上文已提到)进行处理(这个如果没有这个filter,之后tomcat也是会有默认的filter去使用conf/server.xml URIEncoding设置get中的参数的,这个只是把tomcat处理时机提前了)。
server.xml中URIEncoding只对get有效,生效时机为:有程序手动执行request.setCharacterEncoding方法
用例:get、post传递参数全部为中文
测试1,server.xml不配置,无filter, get中的参数、post中的参数全部是乱码
测试2,server.xml配置,无filter,get无乱码,post全部乱码。(conf/server.xml URIEncoding有配置,tomcat默认的filter会进行转码的。 servlet中获取get参数就不是乱码。conf/server.xml URIEncoding对post参数不起作用,post参数全部乱码)
测试3,server.xm不l配置,有filter,get乱码,post无乱码。 (filter虽然调用request.setCharacterEncoding,对get中参数只是提前使用conf/server.xml URIEncoding作为编码,因为未配置,所以get是乱码)
测试4,server.xm不l配置,有filter,get无乱码,post无乱码。