Servlet监听器用于监听一些重要事件的发生,监听器对象可以在事情发生前、发生后可以做一些必要的处理。下面将介绍几种常用的监听器,以及它们都适合运用于那些环境。
分类及介绍:
1. ServletContextListener:用于监听WEB 应用启动和销毁的事件,监听器类需要实现javax.servlet.ServletContextListener 接口。
public class QuartzListener implements ServletContextListener {
private Logger logger = LoggerFactory.getLogger(QuartzListener.class);
public void contextInitialized(ServletContextEvent sce) {
}
/**
*在服务器停止运行的时候停止所有的定时任务
*/
@SuppressWarnings("unchecked")
public void contextDestroyed(ServletContextEvent arg0) {
try {
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
List<JobExecutionContext> jobList = scheduler.getCurrentlyExecutingJobs();
for (JobExecutionContext jobContext : jobList) {
Job job = jobContext.getJobInstance();
if (job instanceof InterruptableJob) {
((InterruptableJob) job).interrupt();
}
}
scheduler.shutdown();
} catch (SchedulerException e) {
logger.error("shut down scheduler happened error", e);
}
}
}
2. ServletContextAttributeListener:用于监听WEB应用属性改变的事件,包括:增加属性、删除属性、修改属性,监听器类需要实现javax.servlet.ServletContextAttributeListener接口。
3. HttpSessionListener:用于监听Session对象的创建和销毁,监听器类需要实现javax.servlet.http.HttpSessionListener接口或者javax.servlet.http.HttpSessionActivationListener接口,或者两个都实现。
/**
*
* 会话监听器
* <p />
*
*/
public class SessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent arg0) {
}
@Override
public void sessionDestroyed(HttpSessionEvent event) {
HttpSession session = event.getSession();
User user = (BrsSession) session.getAttribute("currUser");
if (user != null) {
//TODO something
}
}
}
4. HttpSessionActivationListener:用于监听Session对象的钝化/活化事件,监听器类需要实现javax.servlet.http.HttpSessionListener接口或者javax.servlet.http.HttpSessionActivationListener接口,或者两个都实现。
5. HttpSessionAttributeListener:用于监听Session对象属性的改变事件,监听器类需要实现javax.servlet.http.HttpSessionAttributeListener接口。
部署:
监听器的部署在web.xml文件中配置,在配置文件中,它的位置应该在过滤器的后面Servlet的前面
web.xml配置文件:
<!-- Quartz监听器 -->
<listener>
<listener-class>
com.flyer.lisenter.QuartzListener
</listener-class>
</listener>