Filter&&Listener

本文介绍了JavaWeb中的核心组件——Filter和Listener,详细讲解了Filter的概念、工作原理及配置,包括拦截请求、响应的修改以及生命周期。同时,讨论了Listener的事件监听机制,特别是ServletContextListener的使用。最后,阐述了三大组件(Listener、Filter、Servlet)的启动顺序。通过实例代码展示了如何实现和配置这些组件。

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

JavaWeb三大组件—Filter&&Listener

Filter概念

一般用于完成通用是操作。如登录验证,编码统一处理,敏感字符过滤

  • 拦截修改请求:在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest。根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据。

  • 拦截修改响应:在HttpServletResponse到达客户端之前,拦截HttpServletResponse。根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据。

原理

通常Filter完整的工作流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。

Filter的底层原理是基于函数回调的(责任链模式)

Filter快速入门

	1.步骤:
		1.定义一个类,实现接口Filter
		2.复写
		3.配置拦截路径
			两种配置方法
			1.web.xml 配置
				<filter>
			        <filter-name>demo2</filter-name>
			        <filter-class>cn.itcast.web.filter.FilterDemo2</filter-class>
			    </filter>
			    <filter-mapping>
			        <filter-name>demo2</filter-name>
			        <url-pattern>/*</url-pattern>
			    </filter-mapping>
			2.注解
				@WebFilter("/*") 里面是拦截规则


import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

@WebFilter("/*")
public class FilterDemo1 implements Filter {
/**初始化方法,只会在web应用程序启动时调用一次
和我们编写的Servlet程序一样,Filter的创建和销毁由WEB服务器负责。
web 应用程序启动时,web 服务器将创建Filter 的实例对象,并调用其init方法,读取web.xml配置,完成对象的初始化功能,从而为后续的用户请求作好拦截的准备工作(filter对象只会创建一次,init方法也只会执行一次)。开发人员通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象。
Filter对象创建之后会驻留在内存,一直服务。*/
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
       //完成实际的过滤操作。当客户请求访问与过滤器关联的URL的时候,Servlet过滤器将先执行doFilter方法。FilterChain参数用于访问后续过滤器。
        System.out.println("filter");
        // 放行,如果不放行,那么被访问的资源将无法看见
        filterChain.doFilter(servletRequest, servletResponse);
    }

    @Override
    public void destroy() {

    }
}

Filter执行流程

请求首先到达过滤器doFilter方法,然后对request请求增强 ,然后判断是否放行,如果放行调用filterChain方法等Servlet执行完毕后,对response增强。

Filter过滤器生命周期

1.init:在服务器启动后,会创建Filter对象,然后调用init方法。只执行一次。用于加载资源
2.doFilter:每一次请求被拦截资源时,会执行。执行多次
3.destroy:在服务器关闭后,Filter对象会被销毁。如果服务器是正常关闭,则会执行destory方法。只执行一次。用于释放资源

Filter拦截配置

Filter拦截路径问题

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

Filter拦截方式配置

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

Filter过滤器链

执行顺序:如果有两个过滤器:过滤器1,过滤器2

1.过滤器1
2.过滤器2
3.资源执行
4.过滤器2 
5.过滤器1


注解配置:按照类名的字符串比较规则比较,值小的先执行
web.xml配置:谁定义在上边谁先执行

Listener:监听器

* 事件监听机制
	* 事件	:一件事情
	* 事件源	:事件发生的地方
	* 监听器	:一个对象
	* 注册监听	:将事件,事件源,监听器绑定在一起。当事件源上发生某个事件后,执行监听器代码

ServletContextListener

监听ServletContext对象的创建和销毁
包含两个方法
contextDestroyed(ServletContextEvent sce) : ServletContext对象被销毁之前会调用该方法
contextInitialized(ServletContextEvent sce) : ServletContext对象创建后会调用该方法

1.定义一个类,实现ServletContextListener接口
2.复写方法
3.配置
	1.web.xml
   	2.注解 @WebListener


三大组件的启动顺序

listener>filter>Servlet

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值