监听器:
不管是js还是swing,一个事件的监听包括3个部分,事件、事件源、监听器。
在web中的监听器中,一共有6个监听器,监听器用于去监听web的域对象,包括ServletContext、HttpServletRequest
、HttpSession这三个域对象。
监听器也是需要在服务器中运行,所以也需要在web.xml中配置去交给服务器管理
ServletContext:
ServletContextListener
作用:监听ServletContext对象的创建和销毁,在web应用加载或者服务器启动时创建,在web应用卸载或服务器停止时销毁
ServletContextAttributeListener
作用:对ServletContext对象里面的属性进行增删改功能
ServletRequest:
ServletRequestListener
作用:监听request对象的创建和销毁,在用户发出请求时创建,在请求完毕后销毁
ServletRequestAttributeListener
作用:对request对象里面的属性进行增删改功能
HttpSession:
HttpSessionListener
作用:监听session对象创建和销毁,在每个用户第一次调用request.getSession()方法时创建,销毁的方式有多种:默认等30分钟、设置等待的时间
setMaxInactiveInteval(xxx)、在全局配置上配置等待时间<session-config><session-timeout></session-config>、还有就是手动销毁invalidate()
HttpSessionAttributeListener
不管是js还是swing,一个事件的监听包括3个部分,事件、事件源、监听器。
在web中的监听器中,一共有6个监听器,监听器用于去监听web的域对象,包括ServletContext、HttpServletRequest
、HttpSession这三个域对象。
监听器也是需要在服务器中运行,所以也需要在web.xml中配置去交给服务器管理
ServletContext:
ServletContextListener
作用:监听ServletContext对象的创建和销毁,在web应用加载或者服务器启动时创建,在web应用卸载或服务器停止时销毁
ServletContextAttributeListener
作用:对ServletContext对象里面的属性进行增删改功能
ServletRequest:
ServletRequestListener
作用:监听request对象的创建和销毁,在用户发出请求时创建,在请求完毕后销毁
ServletRequestAttributeListener
作用:对request对象里面的属性进行增删改功能
HttpSession:
HttpSessionListener
作用:监听session对象创建和销毁,在每个用户第一次调用request.getSession()方法时创建,销毁的方式有多种:默认等30分钟、设置等待的时间
setMaxInactiveInteval(xxx)、在全局配置上配置等待时间<session-config><session-timeout></session-config>、还有就是手动销毁invalidate()
HttpSessionAttributeListener
作用:对session对象里面的属性增删改操作
下面的几个实例来了解监听器
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
* 监听器的作用用于在域对象中的设置,包括对象的销毁和创建,还有域对象属性的增删改,
* 三个域对象所以对应三个域对象的监听器,这里不包含pageContext域对象
* ServletContext:servletContextListener 和 servletContextAttributeListener
* ServletRequest:servletRequestListener 和 servletRequestAttributeListener
* HttpSession:HttpSessionListener 和 HttpSessionAttributeListener
* @author Mao
*
*/
public class Listenerdemo1 implements ServletContextListener {
/**
* ServletContextListener监听器适用于在web应用或者服务器启动时开始监听
*/
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("销毁");
}
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("初始化");
}
}
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
/**
* 对ServletContext里面的属性进行操作
* 通过三个方法,对context的属性实现增删改
* @author Mao
*
*/
public class Listenerdemo3 implements ServletContextAttributeListener {
//增加属性
public void attributeAdded(ServletContextAttributeEvent ser) {
// TODO Auto-generated method stub
String name = ser.getName();
Object value = ser.getValue();
System.out.println(name + value);
}
//删除属性
public void attributeRemoved(ServletContextAttributeEvent ser) {
// TODO Auto-generated method stub
String name = ser.getName();
Object value = ser.getValue();
System.out.println(name + value);
}
//修改属性
public void attributeReplaced(ServletContextAttributeEvent ser) {
// TODO Auto-generated method stub
String name = ser.getName();
Object obj = ser.getValue(); //修改前的属性
Object value = ser.getServletContext().getAttribute(name);//修改后的属性
System.out.println(name + value);
}
}
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.http.HttpServletRequest;
/**
* ServletRequestListener监听器能够监听的是request域对象,当request发送请求时进行监听
* @author Mao
*
*/
public class Listenerdemo1 implements ServletRequestListener {
public void requestDestroyed(ServletRequestEvent re) {
// TODO Auto-generated method stub
System.out.println("请求销毁");
}
public void requestInitialized(ServletRequestEvent re) {
// 通过吧request转换成httpServletReqeust对象能够获得请求时的用户ip
HttpServletRequest request = (HttpServletRequest) re.getServletRequest();
String ip = request.getRemoteHost();
request.setAttribute("ip", ip);
System.out.println("请求创建");
}
}
import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener;
/**
* ServletRequestAttributeListener这个监听器能够对request域对象里面的属性进行增删改的功能
* @author Mao
*
*/
public class Listenerdemo2 implements ServletRequestAttributeListener {
//添加属性到request中
public void attributeAdded(ServletRequestAttributeEvent re) {
String name = re.getName();
Object value = re.getValue();
System.out.println(name + value);
}
//request中删除属性
public void attributeRemoved(ServletRequestAttributeEvent re) {
String name = re.getName();
Object value = re.getValue();
System.out.println(name + value);
}
//request修改属性
public void attributeReplaced(ServletRequestAttributeEvent re) {
String name = re.getName();
Object val = re.getValue(); //得到的是修改前的属性
Object value = re.getServletRequest().getAttribute(name); //得到的是修改后的属性
System.out.println(name + value);
}
}
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class Listenerdemo1 implements HttpSessionListener {
//在session中创建时,也就是调用request.getsession()方法时
public void sessionCreated(HttpSessionEvent re) {
System.out.println("session创建");
}
//删除session的时候,即等session的时间过去之后,或直接手动删除session的时候,即session.invalidate()
public void sessionDestroyed(HttpSessionEvent re) {
System.out.println("session销毁");
}
}
import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener;
/**
* ServletRequestAttributeListener这个监听器能够对request域对象里面的属性进行增删改的功能
* @author Mao
*
*/
public class Listenerdemo2 implements ServletRequestAttributeListener {
//添加属性到request中
public void attributeAdded(ServletRequestAttributeEvent re) {
String name = re.getName();
Object value = re.getValue();
System.out.println(name + value);
}
//request中删除属性
public void attributeRemoved(ServletRequestAttributeEvent re) {
String name = re.getName();
Object value = re.getValue();
System.out.println(name + value);
}
//request修改属性
public void attributeReplaced(ServletRequestAttributeEvent re) {
String name = re.getName();
Object val = re.getValue(); //得到的是修改前的属性
Object value = re.getServletRequest().getAttribute(name); //得到的是修改后的属性
System.out.println(name + value);
}
}