监听器、过滤器、拦截器的启动顺序
来源:互联网 发布:调用外部js文件 编辑:程序博客网 时间:2024/05/17 07:33
这里主要是总结一下监听器、过滤器、拦截器的使用注意点和使用方法,还有就是三者之间的启动顺序。
第一:监听器:Listener
是servlet规范中定义的一种特殊类。
用于监听servletContext、HttpSession和servletRequest等域对象的创建和销毁事件。
监听域对象的属性发生修改的事件。
用于在事件发生前、发生后做一些必要的处理。
用途:
1、统计在线人数和在线用户
2、系统启动时加载初始化信息
3、统计网站访问量
4、记录用户访问路径
4、跟Spring结合
实现:
1、创建一个实现监听器接口的类
2、配置web.xml进行注册(servlet2.5版本需要配置,servlet3.0版本可以用注解@WebListener)
说明:
1、一个Web.xml中可以配置多个监听器,监听器的启动顺序安装,配置顺序启动。
2、servlet3.0中使用注解配置时,不能控制监听器的启动顺序。
分类:
按照监听对象划分:
1、用于监听应用程序环境对象(servletContext)的事件监听器
2、用于监听用户回话对象(HttpSession)的事件监听器
3、用于监听请求消息对象(ServletRequest)的事件监听器
按照监听事件划分:
1、监听域对象自身的创建和销毁的事件监听器
创建类并且实现以下接口
servletContextListener
方法:contextInitialized()
contextDestroyed()
HttpSessionListener
方法:sessionCreated()
sessionDestroyed()
ServletRequestListener
方法:requestInitialized()
requestDestroyed()
每个接口中都有两个方法方法
2、监听域对象中的属性的增加和删除的事件监听器
创建类并且实现以下接口
ServletContextAttributeListener
方法:attributeAdded()
attributeRemoved()
attributeReplaced()
HttpSessionAttributeListener
方法:attributeAdded()
attributeRemoved()
attributeReplaced()
ServletRequestAttributeListener
方法:attributeAdded()
attributeRemoved()
attributeReplaced()
3、监听绑定到HttpSession域中的某个对象的状态的事件监听器
实现两个接口
HttpSessionBindingListener()
HttpSessionActivationListener()
列如:
package com.shichun.common.listener;import java.io.Serializable;import javax.servlet.http.HttpSessionActivationListener;import javax.servlet.http.HttpSessionBindingEvent;import javax.servlet.http.HttpSessionBindingListener;import javax.servlet.http.HttpSessionEvent;/** * 绑定和解除绑定的监听事件 * 钝化和活化监听事件 * 不需要在web.xml 中配置 一般都是实体类实现接口即可
* @author zsc * */public class User implements HttpSessionBindingListener,HttpSessionActivationListener,Serializable {private static final long serialVersionUID = 1624003797969315721L;private String username;private String password;/** * 绑定时触发执行即:执行session.setAttribute(arg0, arg1)时触发; */@Overridepublic void valueBound(HttpSessionBindingEvent arg0) { }/** * 解除绑定时触发执行 即:执行session.removeAttribute(arg0)时触发; */@Overridepublic void valueUnbound(HttpSessionBindingEvent arg0) {}/** * 活化时触发执行 */@Overridepublic void sessionDidActivate(HttpSessionEvent arg0) { }/** * 钝化时触发执行 */@Overridepublic void sessionWillPassivate(HttpSessionEvent arg0) { }public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}
扩展:
Session对象创建时间:
打开浏览器访问时,服务器端创建session对象
Session对象销毁时间:
1、关闭服务器
2、关闭浏览器一段时候后,session会自动销毁
3、用户退出,调用删除session方法
4、不关闭浏览器,session超时
在servlet3.0下监听器的用法
使用注解@WebListener
该注解用于将类声明为监听器,被@WebListener标注的类必须实现以下至少一个接口:
ServletContextListener
ServletContextAttributeListener
HttpSessionListener
HttpSessionAttributeListener
ServletRequestListener
ServletRequestAttributeListener
第二、过滤器:Filter
第三、拦截器:Interceptor
拦截器一般配置在springMVC配置文件中。
拦截用户发送到服务器的请求,统一对某些功能的增强。
使用场景:一般解决一些共性问题(乱码问题,权限验证问题)
实现:
编写类实现接口org.springframework.web.servlet.HandlerInterceptor;
在springMVC.xml中进行注册配置
package com.shichun.common.interceptor;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;/** * 编写拦截器 只需要实现接口 HandlerInterceptor * * @date 2017-09-20 * @author zsc * */public class FirstInterceptor implements HandlerInterceptor {/** * 调用handler之后执行 */@Overridepublic void afterCompletion(HttpServletRequest arg0,HttpServletResponse arg1, Object arg2, Exception arg3)throws Exception {}/** * 调用handler过程中执行 */@Overridepublic void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,Object arg2, ModelAndView arg3)throws Exception {}/** * 在调用handler之前调用 * true 不拦截;false 拦截 */@Overridepublic boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1,Object arg2) throws Exception {arg0.setCharacterEncoding("utf-8");//如果用户没有登录则禁止访问,跳转到登录页面if(arg0.getSession().getAttribute("user")==null){arg0.getRequestDispatcher("login.jsp").forward(arg0, arg1);return false;}return true;}}
一个应用中配置多个拦截器:
执行顺序
拦截器与过滤器的区别:
过滤器Filter依赖于Servlet容器,基于回调函数,过滤范围大。
拦截器Interceptor依赖于框架容器,基于反射机制,只过滤请求。
第四、启动顺序:
监听器 > 过滤器 > 拦截器
我是这样记忆的:接到上级命令,要求对电话进去监听,过滤出恐怖分子,然后,拦截他们的恐怖袭击行动。
配置位置:
监听器、过滤器一般配置在web.xml中,拦截器一般配置在springmvc.xml配置文件中
- 监听器、过滤器、拦截器的启动顺序
- java拦截器,过滤器,监听器的区别和执行顺序
- java拦截器,过滤器,监听器的区别和执行顺序
- 拦截器和过滤器监听器的区别执行顺序
- 过滤器,拦截器,监听器
- 拦截器、过滤器、监听器
- 过滤器,监听器,拦截器
- 过滤器,监听器,拦截器
- 过滤器,拦截器,监听器
- 过滤器 拦截器 监听器
- 过滤器、监听器、拦截器
- 过滤器,拦截器,监听器
- 拦截器 过滤器 监听器
- 拦截器 过滤器 监听器
- 过滤器、监听器、拦截器
- 过滤器、拦截器、监听器
- 过滤器、监听器、拦截器
- 过滤器&监听器&拦截器
- 百年高校的“可持续发展梦”——同济大学数据化管理案例
- svn同步到web目录
- 同样的sql语句在数据库中能查出结果,但是在java项目中,查不出来
- QT实现一个 “扯淡Universe” 单机问答系统,构建一个允许用户分享知识的平台
- 【面试】HTTP中get和post请求的区别
- 监听器、过滤器、拦截器的启动顺序
- rfid破解 BLE Hacking
- Mybatis 实体类和表字段不一致解决方案
- StringUtils.hasText(字符串)的作用
- MySQL之权限管理(mysql.user表详解)
- Python input 格式化输出
- 绿盟面试题
- JDK和JRE的区别
- 【Solidity】注意事项