1、什么是过滤器
过滤器JavaWeb三大组件之一,它与Servlet很相似!不它过滤器是用来拦截请求的,而不是处理请求的。
当用户请求某个Servlet时,会先执行部署在这个请求上的Filter,如果Filter“放行”,那么会继承执行用户请求的Servlet;如果Filter不“放行”,那么就不会执行用户请求的Servlet。
其实可以这样理解,当用户请求某个Servlet时,Tomcat会去执行注册在这个请求上的Filter,然后是否“放行”由Filter来决定。可以理解为,Filter来决定是否调用Servlet!当执行完成Servlet的代码后,还会执行Filter后面的代码。
2、过滤器入门
其实过滤器与Servlet很相似,我们回忆一下如何写的第一个Servlet应用!写一个类,实现Servlet接口!没错,写过滤器就是写一个类,实现Filter接口。
代码语言:javascript复制public class HelloFilter implements Filter {
public void init (FilterConfig filterConfig)
throws ServletException {}
public void doFilter (ServletRequest request, ServletResponse response,FilterChain chain)
throws IOException, ServletException {
System.out.println("Hello Filter");
}
public void destroy () {}
}
第二步也与Servlet一样,在web.xml文件中部署Filter:
代码语言:javascript复制 <filter>
<filter-name>helloFilter</filter-name>
<filter-class>com.tyschool.filter.HelloFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>helloFilter</filter-name>
<url-pattern>/index.jsp </url-pattern>
</filter-mapping>
应该没有问题吧,都可以看懂吧!
当用户访问index.jsp页面时,会执行HelloFilter的doFilter()方法!在我们的示例中,index.jsp页面是不会被执行的,如果想执行index.jsp页面,那么我们需要放行!
代码语言:javascript复制 public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {
System.out.println("filter start...");
chain.doFilter(request, response);
System.out.println("filter end...");
}
有很多同学总是错误的认为,一个请求在给客户端输出之后就算是结束了,这是不对的!其实很多事情都需要在给客户端响应之后才能完成!