通过Filter解决字符编码问题

来源:互联网 发布:mac下如何隐藏文件夹 编辑:程序博客网 时间:2024/06/05 01:08

字符编码是最常用的Filter之一了,常用来解决Tomcat等服务器里request、response乱码问题。字符编码Filter是在request提交到Servlet之前对request进行制定编码方式的编码。通过CharacterEncodingFilter.java解决,web.xml进行相应的配置即可。
CharacterEncodingFilter.java代码如下:

package demo.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;public class CharacterEncodingFilter implements Filter{private String characterEncoding;//编码方式,配置在web.xml中private boolean enabled;//是否开启用该Filter,配置在web.xml中public void init(FilterConfig config)throws ServletException{//初始化时加载参数characterEncoding = config.getInitParameter("characterEncoding");//编码方式enabled = "true".equalsIgnoreCase(config.getInitParameter("enabled").trim());//启用}public void destroy() {characterEncoding = null;//销毁时清空资源}public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {if(enabled || characterEncoding != null){//如果启用该Filterrequest.setCharacterEncoding(characterEncoding);//设置request编码response.setCharacterEncoding(characterEncoding);//设置response编码}}}

web.xml的配如下:
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list>    <!-- Filter的编码应用 -->  <filter>  <filter-name>characterEncodingFilter</filter-name>  <filter-class>demo.filter.CharacterEncodingFilter</filter-class>  <init-param>  <param-name>characterEncoding</param-name>  <param-value>UTF-8</param-value>  </init-param>  <init-param>  <param-name>enabled</param-name>  <param-value>true</param-value>  </init-param>  </filter>  <filter-mapping>  <filter-name>characterEncodingFilter</filter-name>  <url-pattern>/*</url-pattern>  </filter-mapping>    </web-app>
PS:页面编码方式与Filter编码方式必须一致。另外,如果表单时GET方式提交的,还需修改Tomcat下的/conf/server.xml配置文件,制定URIEncoding;否则,依然会乱码。修改如下:
<Connector port="8080" protocol="HTTP/1.1"                connectionTimeout="20000"                redirectPort="8443" URIEncoding="UTF-8"/>