-
在特定事件发生时自动调用特定的监听器接口实现类的方法
-
使用时需要在 web.xml中进行配置
示例
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <listener> <listener-class>listener.CounterListener</listener-class> </listener> </web-app>
-
在Servlet2.5中,共有8个监听器接口。
其中
有4个接口关注 session
2个接口关注 ServletContext
2个接口关注 HTTPServletRequest
-
HttpSessionListener 监听器接口
(1) 在会话对象被Servlet和JSP创建时,会自动调用 sessionCreated()方法;
(即便是没有显示的创建 session并添加属性,每次打开一个浏览器也会自动有一个session,详见 "./关闭浏览器后Session就销毁了吗.md")示例
HttpSession session = request.getSession(); session.setAttribute("username", "Chen Bo");
(2) 在会话对象被销毁时,会自动调用 sessionDestroyed()方法
示例
session.invalidate();
-
HttpSessionAttributeListener 监听器接口
(1) 在会话对象增加新的属性时,自动调用 attributeAdded() 方法;
示例
session.setAttribute("username", "Chen Bo");
(2) 在会话对象的已有属性的值发生改变时,自动调用 attributeReplaced() 方法;
示例
session.setAttribute("username", "Chen Bo"); session.setAttribute("username", "Zhang Bo");
(3) 在会话对象删除属性时,自动调用 attributeRemoved() 方法
示例
session.removeAttribute("username");
-
HTTPSessionBindingListener 监听器接口
(1) 如果一个类实现了 HTTPSessionBindingListener 接口,且这个类的一个对象加入到 session 中的时候,自动调用 valueBound() 方法;
示例
HTTPSessionBindingListenerImplementer hTTPSessionBindingListenerImplementer = new HTTPSessionBindingListenerImplementer(); session.setAttribute("HTTPSessionBindingListener", hTTPSessionBindingListenerImplementer);
(2) 如果一个类实现了 HTTPSessionBindingListener 接口,且这个类的一个对象从 session 中移除的时候,自动调用 valueUnbound() 方法;
示例
session.removeAttribute("HTTPSessionBindingListener");
-
HTTPSessionActivationListener 监听器接口
(1) 会话对象钝化(暂时将会话对象通过序列化的方式存储到磁盘上)时,自动调用 sessionWillPassivate() 方法;
(2) 会话对象活化(钝化的逆过程)时,自动调用 sessionDidActivate() 方法
-
ServletContextListener 监听器接口
(1) 每个在Web容器中运行的Web应用都有一个javax.servlet.ServletContext对象,这个对象在JSP文件中为application对象;在Servlet中,该对象可以通过this.getServletContext()获取
(2) 在Web容器加载Web应用时(例如启动服务器)会自动调用 contextInitialized()方法;
(3) 在Web容器销毁Web应用时(例如关闭服务器)会自动调用 contextDestroyed()方法
-
ServletContextAttributeListener 监听器接口
(1) 当Servlet中的ServletContext对象或JSP中的application对象增加新的属性时,自动调用 attributeAdded()方法;
示例1
ServletContext servletContext = this.getServletContext(); servletContext.setAttribute("username", "Bochen");
示例2
<% application.setAttribute("username", "Bochen"); %>
(2) 当Servlet中的ServletContext对象或JSP中的application对象的已有属性的值发生改变时,自动调用 attributeReplaced()方法;
示例1
ServletContext servletContext = this.getServletContext(); servletContext.setAttribute("username", "Bochen"); servletContext.setAttribute("username", "Shuochen");
示例2
<% application.setAttribute("username", "Bochen"); application.setAttribute("username", "Shuochen"); %>
(3) 当Servlet中的ServletContext对象或JSP中的application对象删除已有属性时,自动调用 attributeRemoved()方法;
示例1
ServletContext servletContext = this.getServletContext(); servletContext.setAttribute("username", "Bochen"); servletContext.removeAttribute("username");
示例2
<% application.setAttribute("username", "Bochen"); application.removeAttribute("username"); %>
-
ServletRequestListener 监听器接口
(1) 在Servlet的HTTPServletRequest对象或JSP中request对象被创建时,会自动调用 requestInitialized()方法;
(2) 在Servlet的HTTPServletRequest对象或JSP中request对象被销毁时,会自动调用 requestDestroyed()方法;
-
ServletRequestAttributeListener 监听器接口
(1) 当Servlet中的request对象或JSP中的request对象增加新的属性时,自动调用 attributeAdded()方法;
示例1
request.setAttribute("username", "Bochen");
示例2
<%
request.setAttribute("username", "Bochen");
%>
(2) 当Servlet中的request对象或JSP中的request对象的已有属性的值发生改变时,自动调用 attributeReplaced()方法;
示例1
request.setAttribute("username", "Bochen");
request.setAttribute("username", "Shuochen");
示例2
<%
request.setAttribute("username", "Bochen");
request.setAttribute("username", "Shuochen");
%>
(3) 当Servlet中的request对象或JSP中的request对象删除已有属性时,自动调用 attributeRemoved()方法;
示例1
request.setAttribute("username", "Bochen");
request.removeAttribute("username");
示例2
<%
request.setAttribute("username", "Bochen");
request.removeAttribute("username");
%>
网友评论