listener  filter

Javaweb 的三大组件(接口):Servlet listener filter

一:listener 监听器(理解)

  1. 主要是监听web 中的域对象 :ServletContext ServletRequest HttpSession
  2. 监听的内容:
    1. 域对象的创建和销毁
    1. ServletContextListener :服务器启动的时候会为每个项目创建一个,服务器停止或者是项目移除的时候会销毁
主要方法:
public void contextInitialized(ServletContextEvent servletContextEvent) {}// 创建
 public void contextDestroyed(ServletContextEvent servletContextEvent) {}//销毁

作用:
在项目初始化的时候想做的操作都可以放到它的方法中。主要用于加载配置文件

  1. ServletRequestListener
  2. HttpSessionListener

2.对象属性的变化
1. ServletContextAttributeListener
2. ServletRequestAttributeLister
3. HttpSessionAttributeLister
3.监听session 中javabean 的状态

监听域中属性的添加替换和删除

  1. HttpSessionActivationListener(监听钝化和活化)
    1. 钝化:javabean 从session 中序列化到磁盘上。内存中的内容要想写到磁盘上都必须要序列化
    2. 活化:javabean 从磁盘上加载到了session
  2. HttpSessionBindingListener(绑定和解绑)
    javabean 添加到session 中,绑定。从javabean 中移除,解绑

这两个接口需要javabean 实现,javabean 感知到自己的状态

注意listener 都是接口(就是规范)

  1. 使用方法
    1. 编写一个类实现对应的接口
    2. 重写方法
    3. 编写配置文件(监听session 中javabean 的状态不需要编写配置文件 )使用标签 < listener>< /listener>

二:filter(★★★)

过滤器:过滤请求和响应

  1. 作用:自动登陆。统一编码,过滤关键字,压缩响应信息,,,

编写一个filter 的步骤:
1.编写一个类。实现filter 这个接口,重写方法
2. 编写配置文件。注册filter ,绑定路径
配置文件的 标签为< filter> 格式和servlet 的配置一样
3. 测试

  1. filter中的方法:
    1. init(FilterConfig config):参数是配置文件对象,完成初始化
    2. doFilter(ServletRequest request,ServletResponse response,FileterChain chain):处理相关的业务逻辑
    3. destroy():销毁
    入门示例:
    配置文件web.xml:
    在这里插入图片描述
    在浏览器中访问/a_Filter 访问到的是filter 中。Servlet没有接收到请求。当Filter中有:
    在这里插入图片描述
    在Servlet中才能接收到请求。这也解释了filter 到底是怎样实现过滤的,相当于请求都到了filter这里这又符合要求的请求才会被放行到Servlet 中
  2. 具体执行:
    在这里插入图片描述
    在这里插入图片描述

4.filter的生命周期
filter 是单实例多线程,在服务器启动的时候创建filter 调用初始化方法init 实现初始化。请求来的时候创建一个线程,根据路径调用dofilter 执行业务逻辑。当filter 被移除或者是服务器正常关闭的时候,调用destroy 方法执行销毁
(servlet 默认是在第一次访问的时候创建)

5.详解FilterChain
在doFilter (处理业务逻辑)这个方法中 ,有一个参数FilterChain filterChain
FilterChain:过滤链。通过FilterChain 的doFilter 方法,可以将请求放行到下一个过滤器(下一个filter)直到最后一个,然后才能访问相应的Servlet |jsp [有过滤链的前提:多个filter 的访问链接是一样的]

在此有一个问题,当有多个filter 链接相同时,filter按照怎样的顺序执行
url-pattern 配置(3种)
1.完全配置 /开始
2. 目录匹配 / 开始* 结束
3. *. 开始 以字符号结束 例如: *.jsp *.do
在Servlet的配置中,一个url 只能对应一个Servlet
★★★对于过滤器:一个资源被多个过滤器匹配(过滤链)。多个过滤器的执行顺序按照web.xml 中的filter-mapping 的循序执行

★★★★☆★ filter的pattern 的设置:表示要过滤那些请求。放行之后,继续访问过滤链(根据filter 在配置文件中的先后),请求是一直都带有目的的,就是请求的url 。 你在页面上要访问的最终是哪个地址

案例练习:自动登陆
需求:点开网页时自动登陆

filter 总结★
1.filterconfig :filter 的配置对象
可以获取全局管理者 (getServletContext()),获取当前filter 的名称,获取当前filter 的初始化参数
2.filter-mapping 的子标签(理解)
1)与filter-pattern 有相似的功能的—servlet-name :表示的是要过滤的servlet 的servlet-name 的值
一般在配置filter 时,不在同一个filter 中重复过滤同一个访问
2)diaspatcher :匹配那种请求
request:从浏览器发送过来的请求(默认)
forward:转发过来的请求
【如果显示的写出匹配的是那种请求默认的就失效。dispatcher可以写任意次】

error:因为服务器错误而发送过来的请求(了解)
在web,xml 配置文件中:
< error-page>下
< error-code > 错误码(404)< >
< location>当出现这个错误时页面要跳转的页面地址< >
include:包含过来的请求(了解)

猜你喜欢

转载自blog.csdn.net/Stitch__/article/details/86652121
今日推荐