本项目中是使用spring中的org.springframework.web.filter.CharacterEncodingFilter来进行编码过滤,在web.xml中的配置如下:
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>false</param-value>
</init-param>
</filter>
需要注意的是,过滤的配置需要注册在strust2过滤器之前,否则所有页面不会经过此过滤器。但是这种方法只能解决post方式传参的编码问题,而不能解决get方式传参。原因在于post的参数在请求数据包的消息体中而get的参数在数据包的请求行中。过滤器中 request.setCharacterEncoding(charset); 的转码方式只对消息体中的参数有效,因此当在url中传中文参数时后台得到的就是乱码了。如下图所示,在jsp页面中的链接中传中文参数
后台打印出的结果就成了乱码,且从全是?的乱码格式可以猜测出是iso-8859-1编码转中文编码时出的问题,因为iso-8859-1编码中文时是统一编码成为?一样的格式。
解决方案:在tomcat中的server.xml中的<Connector>中加入URIEncoding="UTF-8"就可以解决。格式如下
需要注意的是,如果直接修改tomcat目录下的server.xml的话,直接通过eclipse运行的项目依然是会乱码的,因为eclipse读取的是他所建立的那个servers目录下的配置,具体位置如下。