2022-09-03 javaweb之过滤器与监听器

一、过滤器 Filter

1.什么是过滤器

Filter 过滤器它是 JavaWeb 的三大组件之一。三大组件分别是Servlet 程序、Listener 监听器、Filter过滤器。

Filter 过滤器它是 JavaEE 的规范,也就是一个接口。 Filter

过滤器它的作用是拦截请求和过滤响应。拦截请求常见的应用场景有权限检查、日记操作、事务管理等等。

2.使用

  1. 定义一个类,实现接口Filter
  2. 复写方法
public class HelloFilter implements Filter {
	public HelloFilter() {
		System.out.println("HelloFilter构造器");
	}
 
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		System.out.println(filterConfig.getInitParameter("userName"));
		System.out.println("初始化HelloFilter结束");
	}
 
	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		System.out.println("前置代码");		
		//放行(他将调用下一个Filter的doFilter())
		chain.doFilter(request, response);
		System.out.println("后置代码");		
	}
 
	@Override
	public void destroy() {
		System.out.println("销毁HelloFilter");
	}
}
  1. 配置拦截路径
    1. web.xml
    2. 注解
    <filter>
        <filter-name>usernamefilter</filter-name>
        <filter-class>com.jsoft.afternoon.filter.Filter01_UsernameFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>usernamefilter</filter-name>
        <url-pattern>/login2.do</url-pattern>
    </filter-mapping>

3.关于细节

1. 过滤器执行流程

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

3. 过滤器生命周期方法

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

4. 过滤器配置详解

	* 拦截路径配置:
		1. 具体资源路径: /index.jsp   只有访问index.jsp资源时,过滤器才会被执行
		2. 拦截目录: /user/*	访问/user下的所有资源时,过滤器都会被执行
		3. 后缀名拦截: *.jsp		访问所有后缀名为jsp资源时,过滤器都会被执行
		4. 拦截所有资源:/*		访问所有资源时,过滤器都会被执行
	* 拦截方式配置:资源被访问的方式
		* 注解配置:
			* 设置dispatcherTypes属性
				1. REQUEST:默认值。浏览器直接请求资源
				2. FORWARD:转发访问资源
				3. INCLUDE:包含访问资源
				4. ERROR:错误跳转资源
				5. ASYNC:异步访问资源
		* web.xml配置
			* 设置<dispatcher></dispatcher>标签即可

5. 过滤器链(配置多个过滤器)

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

二、监听器 Listener

1.什么是监听器

监听器也叫Listener,是Servlet的监听器,它可以监听客户端的请求、服务端的操作等。通过监听器,可以自动激发一些操作,比如监听在线的用户的数量。

2.Listener接口分类

  1. ServletContext监听器
    ServletContextListener监听ServletContext对象
    ServletContextAttributeListener监听对ServletContext属性的操作,比如增加、删除、修改
  2. HttpSession监听器
    HttpSessionListener监听Session对象
    HttpSessionAttributeListener监听Session中的属性操作
    HttpSessionActivationListener监听HTTP会话的active和passivate情况,passivate是指非活动的session被写入持久设备(比如硬盘),active相反。
  3. ServletRequest监听器
    ServletRequestListener监听Request对象
    ServletRequestAttributeListener监听Requset中的属性操作

3.钝化与活化监听器

  • session的序列化和反序列化:一般来说,服务器启动后就不在关闭了,但是如果迫不得已需要重启,而用户会话还在进行相应的操作,就需要将信息保存起来放在磁盘中。比如某个客户端正在进行访问服务器,但是服务器此时正常关闭了,那么tomcat就会将该客户端的session存储到磁盘中,当服务器重新启动时,可以通过反序列化还原出之前的session,里面可能包含用户的登录信息(session中的数据也要可序列化)等。(这些都是服务器自己完成的)
  • 钝化与活化:当网站有大量用户访问时,服务器可能产生非常多的session,这会导致服务器的性能降低。当某个客户端超过一定的时间(可配置)没有与服务器交互,那么服务器就可以将session数据钝化(存储到磁盘中),等该用户需要重新使用的时候再活化(加载到内存)。这也是服务器帮做的。被钝化的数据也要能够被序列化。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值