javaweb三大组件-filter过滤器
一、什么是filter过滤器
servlet api中提供了一个filter接口,开发web应用时,如果编写的java实现了这个接口,则把这个java类称之为过滤器filter,filter可以在访问某个资源之前,对访问的请求进行拦截与响应。
二、filter的工作原理
当我们配置好servlet后,并配置对哪个web资源进行拦截,web服务器在每回调用web资源的service方法前,都会调用一下filter的doFilter方法,在HttpServletRequest到达 Servlet 之前,拦截客户的HttpServletRequest 。根据需要检查HttpServletRequest,也可以修改HttpServletRequest 头和数据。
在HttpServletResponse到达客户端之前,拦截HttpServletResponse 。根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据。
三、Filter的配置方式
3.1通过xml配置
先在xml里配置,然后配置实体类
SuiBian
com.filter.SuiBianFilter
<!-- filter映射 -->
<filter-mapping>
<!-- 对应的filter名,和上边的filter名保持一致保持映射关系 -->
<filter-name>SuiBian</filter-name>
<!-- 要进行拦截过滤的目录 /*代表拦截全部。或者输入具体需要拦截的目录名-->
<url-pattern>/*</url-pattern>
<filter-mapping>
3.2通过注解配置
@WebFilter的配置
在以后的高版本的web项目中,不需要再对xml进行配置了,只需要写一个普通的java类实现Filter接口,对该类进行@WebFilter说明就可以。下面说一下如何对@WebFilter配置。
@WebFilter的常用属性
在这里插入图片描述
示例:
package com.Filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter(filterName = “MyFilter”,urlPatterns = {"/FilterServlet"})
public class MyFilter implements javax.servlet.Filter {
public void init(FilterConfig config) throws ServletException {
System.out.println(“过滤器的初始化init…”);
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
System.out.println(“过滤器之前…”);
chain.doFilter(req, resp);
System.out.println(“过滤器之后…”);
}
public void destroy() {
System.out.println(“过滤器的销毁destroy…”);
}
}
在这里插入图片描述
在urlPatterns 后,需要过滤访问的代码。
1、可以在filter中根据条件决定是否调用chain.doFilter(request, response)方法, 即是否让目标资源执行
2、在让目标资源执行之前,可以对request\response作预处理,再让目标资源执行
3、在目标资源执行之后,可以捕获目标资源的执行结果,从而实现一些特殊的功能
doFilter()方法是对进行拦截, chain.doFilter(req, resp);之前的代码是请求之前执行的代码,之后的代码是响应的时候执行的代码;init()方法在服务器打开的时候执行,并且只执行一次;destroy()在服务器关闭的时候执行,并且只执行一次。