目录
一、Servlet
二、Filter()
概念
作用
常见用途
原理
Filter的生命周期
配置拦截路径
web.xml配置
注解配置
例子
三、Listener
概念
JavaWeb监听器(Listener)的使用方法
一、Servlet
地址:Tomcat(IDEA)&Servlet_低头只管敲的博客-CSDN博客
二、Filter()
概念
Filter(过滤器)用于拦截用户请求,在服务器作出响应前,可以在拦截后修改request和response
可以实现一次编码,多处应用。Filter不像Servlet,它不能产生一个请求或者响应,它只是修改对某一资源的请求,或者修改从某一的响应。
作用
- 拦截修改请求:在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest。根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据。
- 拦截修改响应:在HttpServletResponse到达客户端之前,拦截HttpServletResponse。根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据。
常见用途
1.处理全站中文乱码问题
2.实现自动登录
3.过滤敏感词汇
4.压缩网页
5.选择性让浏览器缓存
这几种功能的实现采用同样的原理,那就是使用包装模式或动态代理增强request或response对象的功能。
原理
通常Filter完整的工作流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。
Filter的生命周期
构造器:创建Filter实例时调用,Filter实例服务器一旦启动就会被创建
init():实例创建后马上被调用,用来对Filter做一些初始化的操作
doFilter():Filter的主要方法,用来完成过滤器主要功能的方法,每次访问目标资源时都会调用。
destroy():服务器停止时调用,用来释放资源。
Filter过滤器就是一个实现了javax.servlet.Filter接口的类,在javax.servlet.Filter接口中定义了三个方法。
配置拦截路径
web.xml配置
demo1
cn.itcast.web.filter.FilterDemo1
demo1
/*
注解配置
demo1 cn.itcast.web.filter.FilterDemo1 demo1 /*
注解配置
@WebFilter("/*")//访问所有资源之前,都会执行该过滤器
※拦截路径配置
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配置 设置标签即可
如果有多个过滤器,如何执行?
*※过滤器先后顺序问题:
1. 注解配置:按照类名的字符串比较规则比较,值小的先执行 * 如: AFilter 和 BFilter,AFilter就先执行了。 2. web.xml配置:谁定义在上边,谁先执行
例子
参考:JavaWeb中filter的详解及应用案例 - 夏日树叶 - 博客园 (cnblogs.com)
三、Listener 概念
*作用:监听某个事件的发生,状态的改变
* 事件监听机制
* 事件 :一件事情
* 事件源 :事件发生的地方
* 监听器 :一个对象
* 注册监听:将事件、事件源、监听器绑定在一起。 当事件源上发生某个事件后,执行监听器代码
* ServletContextListener:监听ServletContext对象的创建和销毁 * 方法: * void contextDestroyed(ServletContextEvent sce) :ServletContext对象被销毁之前会调用该方法 * void contextInitialized(ServletContextEvent sce) :ServletContext对象创建后会调用该方法 * 步骤: 1. 定义一个类,实现ServletContextListener接口 2. 复写方法 3. 配置 1. web.xml* 指定初始化参数 cn.itcast.web.listener.ContextLoaderListener 注解: @WebListener
JavaWeb监听器(Listener)的使用方法
参考:
JavaWeb监听器(Listener)的使用方法 - 动力节点 (bjpowernode.com)



