共计 1317 个字符,预计需要花费 4 分钟才能阅读完成。
1、什么是过滤器
过滤器 JavaWeb 三大组件之一,它与 Servlet 很相似!不它过滤器是用来拦截请求的,而不是处理请求的。
当用户请求某个 Servlet 时,会先执行部署在这个请求上的 Filter,如果 Filter“放行”,那么会继承执行用户请求的 Servlet;如果 Filter 不“放行”,那么就不会执行用户请求的 Servlet。
其实可以这样理解,当用户请求某个 Servlet 时,Tomcat 会去执行注册在这个请求上的 Filter,然后是否“放行”由 Filter 来决定。可以理解为,Filter 来决定是否调用 Servlet!当执行完成 Servlet 的代码后,还会执行 Filter 后面的代码。
2、过滤器入门
其实过滤器与 Servlet 很相似,我们回忆一下如何写的第一个 Servlet 应用!写一个类,实现 Servlet 接口!没错,写过滤器就是写一个类,实现 Filter 接口。
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:
<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 页面,那么我们需要放行!
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...");
}
有很多同学总是错误的认为,一个请求在给客户端输出之后就算是结束了,这是不对的!其实很多事情都需要在给客户端响应之后才能完成!
正文完
星哥玩云-微信公众号