概述:Servlet规范中定义的一种特殊的类,作用是监听容器当中产生的一些事件并进行相应的处理
容器产生的事件主要是以下两大类:
1.生命周期相关的事件,指的是当容器创建或者销毁Request、Session、ServletContext等对象时产生的事件
2.绑定事件,指的是当调用Request、Session、ServletContext对象的setAttribute、removeAttribute时产生的事件
a)如何写监听器:
1)写一个Java类实现特定的监听器接口类(依据要监听的事件类型)
2)在接口声明的方法中,实现监听的逻辑
3)配置web.xml
b)ServletContext接口:
Web服务器在启动时,会位每一个已经部署好的应用程序创建唯一的一个ServletContext实例,该实例会一直存在,除非服务器关闭或者应用被删除
获取ServletContext实例的方法:
1)GenericServlet .getServletContext()
2)HttpSession.getServletContext()
3)ServletConfig.getServletContext()
全局初始化参数:web.xml -- 可被所有的Servlet共享
<context-param>
<param-name>version</param-name>
<param-value>20141106</param-value>
</context-param>
获取参数:String ServletContext.getInitParameter(String name)
监听器的配置:在<context-param>之后,<servlet>之前。<filter>在<listener>之后,<servlet>之前
<listener>
<listener-class>com.Listener</listener-class>
</listener>
实例代码:
package com;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
/**
* @author Eleven
* 对Session的监控,当有用户访问到达,容器创建Session来处理请求,这时便促发该监听
*/
public class Listener1 implements HttpSessionListener{
private int count = 0;
/* (non-Javadoc)
* 记录用户登录数量
* @see javax.servlet.http.HttpSessionListener#sessionCreated(javax.servlet.http.HttpSessionEvent)
* @Descrip: (描述)
* @Author : Eleven
* @Date : 2014-11-6
*/
public void sessionCreated(HttpSessionEvent se) {
count++;
HttpSession session = se.getSession();//获取会话
ServletContext sctx = session.getServletContext();//获取容器装载对象
sctx.setAttribute("count", count);//共享至容器
}
public void sessionDestroyed(HttpSessionEvent se) {
count--;
HttpSession session = se.getSession();//获取会话
ServletContext sctx = session.getServletContext();//获取容器装载对象
sctx.setAttribute("count", count);//共享至容器
}
}
/**
* @author Eleven
* 对Session的属性进行监听
*/
class Listener implements HttpSessionAttributeListener{
@Override
public void attributeAdded(HttpSessionBindingEvent arg0) {
}
@Override
public void attributeRemoved(HttpSessionBindingEvent arg0) {
}
@Override
public void attributeReplaced(HttpSessionBindingEvent arg0) {
}
}
/**
* @author Eleven
* 对Context的属性进行监听
*/
class LIstener2 implements ServletContextAttributeListener{
@Override
public void attributeAdded(ServletContextAttributeEvent arg0) {
}
@Override
public void attributeRemoved(ServletContextAttributeEvent arg0) {
}
@Override
public void attributeReplaced(ServletContextAttributeEvent arg0) {
}
}
/**
* @author Eleven
* 监听Context对象
*/
class Listener3 implements ServletContextListener{
@Override
public void contextDestroyed(ServletContextEvent arg0) {
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
}
}
学习笔记,望读者赐金言同进