Servlet监听器
来源:互联网 发布:好玩的c语言小程序 编辑:程序博客网 时间:2024/06/15 13:51
Servlet中定义了8个监听器接口,可以用于监听ServletContext、HttpSession和ServletRequest对象的生命周期事件,以及这些对象的属性改变事件。
注意:实现ServletContextListener、ServletContextAttributeListener、HttpSessionListener接口的类需要在web.xml中配置。
HttpSessionAttributeListener接口:用于监听Session中何时添加、删除或替换了某种类型的属性。
HttpSessionBindingListener接口:由属性自身来实现,以便属性知道它自己何时被添加到一个session中。
一、ServletContextListener接口
在Servlet上下文对象初始化时或者将要被销毁时得到通知,可以实现该接口。
public void contextInitialized(ServletContextEvent sce):该方法将在所有的过滤器和Servlet**初始化之前被调用**。
public void contextDestroyed(ServletContextEvent sce):该方法将在所有的Servlet和过滤器销毁之后被调用。
1、自定义监控类,实现ServletContextListener接口
(只要应用程序启动,就会被监控)
//实现ServletContextListener接口的监控类public class MyServletContextListener implements ServletContextListener { //会在servlet上下文对象初始化之前被调用 public void contextInitialized(ServletContextEvent sce){ //获得一个上下文对象 ServletContext servletContext=sce.getServletContext(); String name=(String) servletContext.getInitParameter("name"); System.out.println(name); System.out.println("初始化之前被调用"); } public void contextDestroyed(ServletContextEvent sce){ System.out.println("销毁之后被调用"); }}
2、具体servlet实现类(用于处理请求)
public class ListenerTest extends HttpServlet { public void init(ServletConfig config)throws ServletException{ System.out.println("servlet初始化"); } @Override public void destroy() { System.out.println("servlet销毁"); } public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException{ } public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException{ doGet(request,response); }}
3、web.xml中的配置
<context-param> <param-name>name</param-name> <param-value>test listener</param-value> </context-param><servlet> <servlet-name>ListenerTest</servlet-name> <servlet-class>org.wdz.listener.ListenerTest</servlet-class> </servlet> <servlet-mapping> <servlet-name>ListenerTest</servlet-name> <url-pattern>/test.jsp</url-pattern> </servlet-mapping> <!--一定要配置监控类--> <listener> <listener-class>org.wdz.listener.MyServletContextListener</listener-class> </listener>
4、结果:
//启动Tomcattest listener初始化之前被调用//访问:http://localhost:8080/servletTest/test.jsp//执行init()初始化方法servlet初始化//关闭Tomcat之后servlet销毁销毁之后被调用
二、HttpSessionBindingListener接口
如果一个对象实现了HttpSessionBindingListener接口,当这个对象被绑定到Session中或从Session中被删除时,Servlet容器会通知这个对象,而这个对象在接收到通知后,可以做一些初始化或清除状态的操作。
public void valueBound(HttpSessionBindingEvent event);
当对象正被绑定到Session中,Servlet容器调用这个方法来通知该对象。
public void valueUnbound(HttpSessionBindingEvent event)
当从Session中删除对象时,Servlet容器调用这个方法来通知该对象。
1、实现HttpSessionBindingListener接口的User对象
public class User implements HttpSessionBindingListener { private String name; private int age; public User(String name,int age){ this.name=name; this.age=age; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public void valueBound(HttpSessionBindingEvent event){ System.out.println("user对象绑定到session中"); //获取该session HttpSession session=event.getSession(); //要绑定到session中属性的名字 String name=event.getName(); System.out.println("name="+name); //要绑定到session中的属性值 User user=(User)event.getValue(); System.out.println("username="+user.getName()+" age="+user.getAge()); } public void valueUnbound(HttpSessionBindingEvent event){ System.out.println("user对象从session中删除"); }}
2、绑定user对象
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException{ HttpSession session=request.getSession(); User user=new User("test",89); //绑定User对象 System.out.println("绑定User对象"); session.setAttribute("user",user); //删除User对象 System.out.println("删除User对象"); session.removeAttribute("user"); }
3、结果
绑定User对象user对象绑定到session中name=userusername=test age=89删除User对象user对象从session中删除
三、HttpSessionListener接口
在Session对象创建后或者在Session无效前得到通知:(需要在web.xml中配置)
public class MySessionListener implements HttpSessionListener
四、ServletRequestAttributeListener接口
在Servlet请求对象中的属性发生改变时得到通知:
public class MyRequestAttributeListener implements ServletRequestAttributeListener
- Servlet监听器
- servlet监听器
- Servlet监听器
- Servlet监听器
- servlet 监听器
- servlet监听器
- Servlet监听器
- servlet监听器
- Servlet监听器
- Servlet监听器
- Servlet监听器
- Servlet监听器
- Servlet监听器
- Servlet监听器
- servlet监听器
- servlet监听器
- servlet监听器
- servlet监听器
- 翻转矩阵flipud和fliplr函数
- python中的sort方法使用详解
- 异步复位和同步释放电路的详细解释
- 关于DAO层的sessionFactory注入和是否继承HibernateDAOSupport
- 复位最佳方式:异步复位,同步释放
- Servlet监听器
- QT如何通过manifest更改图标和获取UAC管理员权限
- 行人重识别综述(Person Re-identification: Past, Present and Future)
- 探讨UnsupportedOperationException的原因及解决方案
- Ubuntu下安装Qt的时arm版本的编译配置问题:The tslib functionality test failed!
- 安装Elasticsearch-servicewrapper插件
- 百度地图api新手尝试,个性化定制,查询定位
- 归并排序
- 深度学习py-faster-rcnn/Qt5.8工作环境搭建教程