主要内容
- Filter :过滤器
- Listener :监听器
Filter :过滤器
-
概念
- web中的过滤器 :访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。
- 过滤器的作用 :一般用于通用的操作;如登陆验证,统一编码处理,敏感字符过滤…
-
快速入门
- 创建一个类,实现接口Filter;是javax.servlet下的Filter
- 复写方法
- 在方法中需要放行
- 配置拦截路径
- web.xml配置
- 注解配置 @WebFilter("/*")
-
过滤器细节
- web.xml配置
<filter>
<filter-name>demo1</filter-name>
<filter-class>com.web.FilterDemo1</filter-class>
</filter>
<filter-mapping>
<filter-name>demo1</filter-name>
<!-- 拦截路径 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
- 过滤器执行流程
- 放行之前
- 是对request对象的请求消息进行增强
- 放行之后
- 是对response对象的响应消息进行增强
- 响应回来后是在放行后开始执行
3. 过滤器的生命周期
- init :服务器启动后,会创建Filter对象;此时执行此方法;只执行一次,一般用于加载资源
- doFilter :每一次请求被拦截时,会执行该方法;可以执行多次
- destroy :服务器关闭时,会销毁Filter对象。若服务器是正常关闭,则会执行此方法,只执行一次;一般用于释放资源
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配置
* 设置标签即可
5. 过滤器链(配置多个过滤器)
* 执行顺序 若有两个过滤器,过滤器1和过滤器2
* 则执行顺序为
* 过滤器1 – 过滤器2 – 资源 – 过滤器2 – 过滤器1
* 过滤器的先后顺序问题
1. 注解配置
按照类名的字符串比较规则进行比较,值小的先执行
如: Afilter 和 Bfilter,则Afilter先执行
2. web.xml配置
按照定义的顺序执行,谁定义在前面,谁先执行
基于Filter的两个小案例
Listener :监听器
-
概念 :web的三大组件之一
- 事件监听机制
- 事件 :一件事情
- 事件源 :事件发生的地方
- 监听器 :一个对象
- 注册监听 :将事件,事件源,监听器绑定在一起;但事件源上发生事件时,运行监听器代码
- 事件监听机制
-
ServletContextListener :监听ServletContext对象的创建与销毁
- 方法
- void contextDestroyed(ServletContextEvent sce) :ServletContext对象被销毁前会调用此方法
- void contextInitialized(ServletContextEvent sce) :ServletContext对象被创建后会调用此方法
- 步骤
- 定义一个类,实现ServletContextListener接口
- 复写方法
- 配置
-
web.xml配置
<!-- 配置监听器 -->
<listener>
<listener-class>com.web.listener.ContextLoaderListener</listener-class>
</listener>
<!-- 指定初始化参数 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param>
-
注解配置
@WebListener
-
- 方法