通過Filter解決字符編碼問題

字符編碼是最常用的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"/>



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章