什么是过滤器
Filter 的基本功能是对 Servlet 容器调用 Servlet 的过程进行拦截,从而在 Servlet 进行响应处理的前后实现一些特殊的功能。
Filter 程序是一个实现了 Filter 接口的 Java 类,与 Servlet 程序相似,它由 Servlet 容器进行调用和执行
Filter 程序需要在 web.xml 文件中进行注册和设置它所能拦截的资源
<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几乎完全一致,但是过滤器
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存在链式操作的,不同的过滤器可以拥有相同的映射路径,表示拦截同一个请求,先后顺序,如果是注解方式的方式是类名决定的,例如: AFilter,BFilter,AFilter会先进行拦截,再如Filter1_xxx,Filter2_xxx,Filter1_xxx会先拦截
如果是配置的方式,先配置<filter-mapping></filter-mapping>
的过滤器先拦截
典型应用
统一编码字符集