字符編碼是最常用的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){ //如果啓用該Filter
request.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"/>