Filter过滤器

本文详细介绍了Servlet过滤器的概念、编写方法和配置方式。过滤器允许在请求和响应之间进行拦截,常用于数据处理、会话管理等。通过注解或web.xml配置文件可以实现过滤器,过滤器的执行遵循特定顺序,并且可以形成过滤器链。了解过滤器的生命周期方法,如init、doFilter和destroy,有助于更好地管理和使用过滤器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

提示:这里可以添加本文要记录的大概内容:


一、过滤器

1.1 什么是过滤器

  • 过滤器是Servlet2.3规范中定义的一种小型的、可插入的Web组件。用来拦截Servlet容器的请求和响应过程,以便查看、提取或以某种方式操作正在客户机和服务器之间交换的数据。
  • 过滤器通常是封装了一些功能的Web组件,这些功能很重要,但对于处理客户端请求或发送响应来说不是决定性的。
  • 典型的应用包括记录请求和响应的数据、管理会话属性等

1.2 如何编写过滤器

1.2.1 过滤器的快速入门

  • 生活中的过滤器:比喻成土匪。
    在这里插入图片描述

  • 编写一个Java类,实现Filter接口。

  • 在doFilter方法中实现拦截处理逻辑。

  • 将过滤器添加到Web程序中。

  • 把过滤器和Web应用一起打包部署。

1.2.2 通过注解实现过滤器

@WebFilter("/*")//拦截所有请求
public class OneFilter implements Filter {

	@Override
	public void destroy() {
		// TODO Auto-generated method stub

	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain filterChain) throws IOException, ServletException {
		  //放行
		    filterChain.doFilter(request, response);
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub

	}

}

1.2.3 通过配置web.xml文件实现过滤器

1.2.3.1 过滤器细节:
  1. web.xml配置.
  2. 过滤器执行流程.
  3. 过滤器生命周期方法.
  4. 过滤器配置详解.
  5. 过滤器链(配置多个过滤器)
1.2.3.1.1 xml配置

web.xml配置文件:

  <filter>
    <display-name>SecondFilter</display-name>
    <filter-name>SecondFilter</filter-name>
    <filter-class>com.qst.filter.SecondFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>utf-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>SecondFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <!--拦截路径 -->
  </filter-mapping>
public class OneFilter implements Filter {

	@Override
	public void destroy() {
		// TODO Auto-generated method stub

	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain filterChain) throws IOException, ServletException {
		  //放行
		    filterChain.doFilter(request, response);
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub

	}
1.2.3.1.2 过滤器执行流程:

1.执行过滤器。
2.执行放行后的资源。
3.回来执行过滤器放行代码下边的代码。

1.2.3.1.3 过滤器生命周期方法
  1. init:在服务器后动后,会创建Filter对象,然后调用init方法。只执行一次。用于加载资源。
  2. doFilter:每一次请求被拦截资源时,会执行。执行多次。
  3. destroy:在服务器关闭后,Filter对象被销毁。如果服务器是正常关闭,则会执行destroy方法。只执行一次。用于释放资源。
1.2.3.1.4 过滤器配置详解
  1. 拦截路径配置:

    • 具体资源路径:/index.jsp只有访问index.jsp资源时,过滤器才会被执行。
    • 拦截目录:/user/* 访问/user下的所有资源时,过滤器都会被执行。
    • 后缀名拦截:*.jsp访问所有后缀名为jsp资源时,过滤器都会被执行。
    • 拦截所有资源∶/*访问所有资源时,过滤器都会被执行。
  2. 拦截方式配置:
    资源被访问的方式

    • 注解配置:设置dispatcherTypes属性

      1. REQUEST:默认值。浏览器直接请求资源。
      2. FORWARD:转发访问资源。
      3. INCLUDE:包含访问资源。
      4. ERROR:错误跳转资源。
      5. ASYNC:异步访问资源。
    • web.xml配置
      设置< dispatcher > < /dispatcher>标签即可。

1.2.3.1.5 过滤器链(多个过滤器)
  • 执行顺序∶如果有两个过滤器:过滤器1和过滤器2
    1.过滤器1
    2.过滤器2
    3.资源执行
    4.过滤器2
    5.过滤器1
    过滤器先后顺序问题:
    1、注解配置∶按照类名的字符串比较规则比较,值小的先执行。
    如:AFilter和BFilter,AFilter就先执行了。
    2、 web.xml配置: < filter-mapping> 谁定义在上边,谁先执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值