什么是過(guò)濾器
Filter 的基本功能是對(duì) Servlet 容器調(diào)用 Servlet 的過(guò)程進(jìn)行攔截,從而在 Servlet 進(jìn)行響應(yīng)處理的前后實(shí)現(xiàn)一些特殊的功能类少。
Filter 程序是一個(gè)實(shí)現(xiàn)了 Filter 接口的 Java 類十拣,與 Servlet 程序相似封拧,它由 Servlet 容器進(jìn)行調(diào)用和執(zhí)行
Filter 程序需要在 web.xml 文件中進(jìn)行注冊(cè)和設(shè)置它所能攔截的資源
<filter>
<filter-name>hello</filter-name>
<filter-class>com.neuedu.filter.HelloFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>hello</filter-name>
<url-pattern>/filter</url-pattern>
</filter-mapping>
注解方式:與servlet幾乎完全一致,但是過(guò)濾器
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.annotation.WebFilter;
@WebFilter("/*")
public class Filter1_Encoding implements Filter {
public Filter1_Encoding() {
// TODO Auto-generated constructor stub
}
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
// 放行
chain.doFilter(request, response);
}
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
}
注意:Filter存在鏈?zhǔn)讲僮鞯呢参剩煌倪^(guò)濾器可以擁有相同的映射路徑泽西,表示攔截同一個(gè)請(qǐng)求,先后順序缰趋,如果是注解方式的方式是類名決定的捧杉,例如: AFilter,BFilter秘血,AFilter會(huì)先進(jìn)行攔截味抖,再如Filter1_xxx,Filter2_xxx,Filter1_xxx會(huì)先攔截
如果是配置的方式,先配置<filter-mapping></filter-mapping>
的過(guò)濾器先攔截
典型應(yīng)用
統(tǒng)一編碼字符集