1、filter在web容器中的作用主要有以下這些:
①對用戶拋過來的請求進行字符編碼上的轉換,及爲對用戶的響應對象填充公用的頭信息;
②驗證用戶的身份是否已經是登錄狀態和訪問權限的控制;
③其它一些想在用戶訪問之前做的操作
2、使用實例,爲請求內容指定編碼
①編寫自己的filter類EncodingFilter
package com.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;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletRequest;
public class EncodingFilter implements Filter{
protected FilterConfig filterConfig = null;
protected String encoding = "";
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
((HttpServletRequest) request).setCharacterEncoding(encoding);
((HttpServletResponse) response).setHeader("Cache-Control","no-cache");
((HttpServletResponse) response).setHeader("Pragma","no-cache");
((HttpServletResponse) response).setDateHeader ("Expires", -1);
((HttpServletResponse) response).setCharacterEncoding(encoding);
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
}
}
EncodingFilter類主要實現了Filter接口,實現了destroy, doFilter, init等filter接口中的方法,init方法在web容器加載filter時執行一次,destory在web容器關閉時被調用釋放佔用的資源,對於每個請求,都會調用一次doFilter過濾方法
②裝配到容器當中去
<filter>
<filter-name>encoding</filter-name>
<filter-class>com.demo.filter.EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>*</url-pattern>
</filter-mapping>
這樣在每次請求過來的時候就可以將請求的內容轉換爲utf-8的編碼了,並且設置響應中內容爲不緩存