JavaWeb监听器
(本文为小编的读书笔记)
一、监听器的分类
(一)ServletContextListener(相当于监听内置对象Application)和ServletContextAttributeListener(相当于监听内置对象Application属性的添加、删除、和修改)
(二)HttpSessionListener(相当于监听内置对象Session)和HttpSessionAttributeListener(相当于监听内置对象Session属性的添加、删除、和修改)
(三)ServletRequestListener(相当于监听Request)和ServletAttributeRequestListener(相当于监听内置对象Request属性的添加、删除、和修改)
(四)绑定到HttpSession域中的对象状态监听器
二、监听器的执行顺序
(1)监听器——>过滤器——>Servlet
(2)多个监听器按照Web.xml文件配置顺序执行
三、分类中(1)(2)(3)监听器的创建
(一)在Servlet2.5版本下
1.创建一个类,实现对应的借口,例如:
public class FirstListener implements ServletContextListener{
<span style="color:#000000;background-color: rgb(255, 153, 0);">//实现处理监听Applicaiton的销毁方法</span>
@Override
public void contextDestroyed(ServletContextEvent arg0) { <pre class="java" name="code"> <span style="background-color: rgb(255, 153, 0);">//可以获取Web容器加载时候的初始化参数,在Web.xml文件中配置</span>
String initparam= arg0.getServletContext().getInitParameter("initparam");
System.out.println("contextDestroyed...."+initparam);
}
<span style="background-color: rgb(255, 153, 0);">//实现处理Appication的初始化方法</span>
@Override
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("contextInitialized");
}
}
public class MyServletContextAttributeListener implements ServletContextAttributeListener {
//实现处理属性添加的方法
@Override
public void attributeAdded(ServletContextAttributeEvent arg0) {
System.out.println("ContextattributeAdded:"+arg0.getName());
}
//实现处理属性移除的方法
@Override
public void attributeRemoved(ServletContextAttributeEvent arg0) {
System.out.println("ContextattributeRemoved:"+arg0.getName());
}
//实现处理属性替换的方法
@Override
public void attributeReplaced(ServletContextAttributeEvent arg0) {
System.out.println("ContextattributeRemoved:"+arg0.getName());
}
}
在Index.jsp中实现测试。
<%
request.setAttribute("requestName","requestValue"); //添加Request属性
request.getSession().setAttribute("sessionName","sessionValue"); //添加Session属性
request.getSession().getServletContext().setAttribute("contextName","contextValue"); //添加Applicaiton属性
%>
<%
request.removeAttribute("requestName"); //移除Request属性
request.getSession().removeAttribute("sessionName"); //移除Session属性
request.getSession().getServletContext().removeAttribute("contextName");/移除Application属性
%>
2.在Web.xml配置相应的监听器(只需要指定类名)
<listener>
<listener-class>具体的包名.类名</listener-class>
</listener>
<listener-class>具体的包名.类名</listener-class>
</listener>
(二)在Servlet3.0版本下
加WebListener注解
@WebListener("注释") //不需要指定类名。
四、分类中(4:绑定到HttpSession域中的对象状态监听器)监听器的创建
(一)对象与监听器绑定与解除绑定(不需要Web.xml文件配置)
1.创建
public class User implements HttpSessionBindingListener {
private String Username;
private String Password;
@Override
public void valueBound(HttpSessionBindingEvent arg0) {
// 对象的绑定
}
@Override
public void valueUnbound(HttpSessionBindingEvent arg0) {
// 对象的解除绑定
}
public String getUsername() {
return Username;
}
public void setUsername(String username) {
Username = username;
}
public String getPassword() {
return Password;
}
public void setPassword(String password) {
Password = password;
}
}
2.测试
<%
request.getSession().setAttribute("user",new User()); //对象的绑定
request.getSession().removeAttribute("user"); //对象的解绑
%>
(二)对象的钝化和活化
1.创建(实现两个接口)
public class User implements HttpSessionActivationListener ,Serializable{
private String Username;
private String Password;
public String getUsername() {
return Username;
}
public void setUsername(String username) {
Username = username;
}
public String getPassword() {
return Password;
}
public void setPassword(String password) {
Password = password;
}
@Override
public void sessionDidActivate(HttpSessionEvent arg0) {
// 活化
}
@Override
public void sessionWillPassivate(HttpSessionEvent arg0) {
// 钝化
}
}
2.测试
(1)当浏览器关闭的时候,对象会被钝化到服务器(Tomcat-work-Catalina-localhost-“项目文件”-SESSION.ser)中;
(2)当浏览器开启时候,又会活化到本地项目中,可以通过Request.getSession().getAttribute("uesr");获得。(SESSION.ser文件会不见)