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>