Filter 知识点

  作用:可以动态的过滤请求 request 或者回复 response。

  1. 在客户端(Web端)发送请求到服务器之前,过滤处理请求 request;
  2. 在服务端回复请求到客户端(Web端)之前,过滤处理回复 response。

  用法:可以将一个或者多个 Filter 加到一个或者多个网络资源上。

创建 Filter 文件

  1. 创建一个类,实现 Filter 接口;
  2. 重写 接口中的方法 —— 重点是 doFilter 方法;
  3. 配置 web.xml / @WebFilter注解

  一个 Filter 加到多个网络资源上的 web.xml 配置代码:

<filter>
	<filter-name>Filter1</filter-name>
	<filter-class>D20210128.TestFilter</filter-class>
</filter>
<filter-mapping>
	<filter-name>Filter1</filter-name>
	<url-pattern>/TestServlet</url-pattern>
</filter-mapping>
<filter-mapping>
	<filter-name>Filter1</filter-name>
	<url-pattern>/D20210223/test.jsp</url-pattern>
</filter-mapping>

init 方法

  init 方法什么时候被调用:服务器启动时就会被调用。

doFilter 方法

  doFilter 方法的参数:

  1. ServletRequest request 和 ServletResponse response。注意这个和 Servlet 中参数很像,但不是一个东西,Servlet 中的参数分别是 HttpServletRequest 类型和 HttpSerlvetResponse 类型。
  2. FilterChain chain:Filter 链。如果是将多个 Filter 加到一个网络资源上的话,会加到同一个资源上的 Filter 构成一个链,所以链上的每一个项都是一个 Filter
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    
    
}

  FilterChain 参数有一个很重要的 方法:doFilter(request, response);,表示放行当前过滤器——请求的路径可以进行资源访问,这个方法将 Filter 的 doFilter 方法的代码分为上下两个部分
在这里插入图片描述

注意,FilterChain 中的 doFilter 方法和 Filter 中的 doFilter 方法是两个完全不一样的东西,只是名字恰巧相同而已,没有任何关系。

猜你喜欢

转载自blog.csdn.net/qq_40395874/article/details/114008790