/**
*
* @author : bless<[email protected]>
* Create Time : 2011-5-10下午10:38:19
* Description : 字符集格式過濾器
*
*/
public class EncodingFilter implements Filter {
//默認編碼格式UTF-8
private static final String DEFAULT_ENCODE = "UTF-8";
private String encodeName; // 編碼格式
public void destroy() {
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
try {
if (encodeName == null || "".equals(encodeName.trim())) {
request.setCharacterEncoding(DEFAULT_ENCODE);
response.setCharacterEncoding(DEFAULT_ENCODE);
} else {
request.setCharacterEncoding(encodeName);
}
} catch (UnsupportedEncodingException e) {
throw new UnsupportedEncodingException("編碼格式過濾錯誤,請確認web.xml填入了正確的編碼格式");
}
chain.doFilter(request, response);
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
//獲取web.xml配置的<param-name>encodeName</param-name>的值
this.setEncodeName(fConfig.getInitParameter("encodeName"));
}
public String getEncodeName() {
return encodeName;
}
public void setEncodeName(String encodeName) {
this.encodeName = encodeName;
}
}
然後在web.xml中定義filter即可,標籤init-param可以做一個參數配置,在filter中通過init方法參數FilterConfig.getInitParameter獲得:
<filter>
<filter-name>encoding</filter-name>
<filter-class>com.mt.filter.EncodingFilter</filter-class>
<init-param>
<param-name>encodeName</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>