过滤器概述

2022-09-14 21:06:38 浏览数 (1)

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..."); 
	}

有很多同学总是错误的认为,一个请求在给客户端输出之后就算是结束了,这是不对的!其实很多事情都需要在给客户端响应之后才能完成!

0 人点赞