Java代码 web上下文监听器ServletContextListener 例子 . web上下文监听器ServletContextListener 例子 .web上下文监听器ServletContextListener 例子 .
  1. package com.listeners;   
  2. import javax.servlet.ServletContextListener;   
  3.   
  4. import javax.servlet.ServletContextEvent;   
  5. import javax.servlet.*;   
  6. public class MyContextListener implements ServletContextListener {   
  7. private ServletContext context = null;   
  8.   
  9.  public void contextDestroyed(ServletContextEvent event){   
  10.   //Output a simple message to the server's console   
  11.   System.out.println("The Simple Web App. Has Been Removed");   
  12.   this.context = null;   
  13. }   
  14.  // 这个方法在Web应用服务做好接受请求的时候被调用。   
  15. public void contextInitialized(ServletContextEvent event){   
  16.   this.context = event.getServletContext();   
  17.   //Output a simple message to the server's console   
  18.   System.out.println("The Simple Web App. Is Ready");   
  19. }   
  20. }  
  1. package com.listeners;  
  2. import javax.servlet.ServletContextListener;  
  3.   
  4. import javax.servlet.ServletContextEvent;  
  5. import javax.servlet.*;  
  6. public class MyContextListener implements ServletContextListener {  
  7. private ServletContext context = null;  
  8.   
  9.  public void contextDestroyed(ServletContextEvent event){  
  10.   //Output a simple message to the server's console   
  11.   System.out.println("The Simple Web App. Has Been Removed");  
  12.   this.context = null;  
  13. }  
  14.  // 这个方法在Web应用服务做好接受请求的时候被调用。   
  15. public void contextInitialized(ServletContextEvent event){  
  16.   this.context = event.getServletContext();  
  17.   //Output a simple message to the server's console   
  18.   System.out.println("The Simple Web App. Is Ready");  
  19. }  
  20. }  
package com.listeners;
import javax.servlet.ServletContextListener;

import javax.servlet.ServletContextEvent;
import javax.servlet.*;
public class MyContextListener implements ServletContextListener {
private ServletContext context = null;

 public void contextDestroyed(ServletContextEvent event){
  //Output a simple message to the server's console
  System.out.println("The Simple Web App. Has Been Removed");
  this.context = null;
}
 // 这个方法在Web应用服务做好接受请求的时候被调用。
public void contextInitialized(ServletContextEvent event){
  this.context = event.getServletContext();
  //Output a simple message to the server's console
  System.out.println("The Simple Web App. Is Ready");
}
}

在WEB.XML中
Xml代码 web上下文监听器ServletContextListener 例子 . web上下文监听器ServletContextListener 例子 .web上下文监听器ServletContextListener 例子 .
  1. <web-app>  
  2. <listener>  
  3.   <listener-class>  
  4.    com.listeners.MyContextListener   
  5.   </listener-class>  
  6. </listener>  
  7. <servlet/>  
  8. <servlet-mapping/>  
  9. </web-app>  
  1. <web-app>  
  2. <listener>  
  3.   <listener-class>  
  4.    com.listeners.MyContextListener  
  5.   </listener-class>  
  6. </listener>  
  7. <servlet/>  
  8. <servlet-mapping/>  
  9. </web-app>  
<web-app>
<listener>
  <listener-class>
   com.listeners.MyContextListener
  </listener-class>
</listener>
<servlet/>
<servlet-mapping/>
</web-app>


ServletContextListener接口有两方需要实现的方法:
contextInitialized()和contextDestroyed();
Listener,译为监听者.顾名思义,它会监听Servlet容器,当应用开始的时候它会调用contextInitialized()方法;
当应用关闭的时候,它同样会调用contextDestroyed()方法.
我们可以利用这个特性初始化一些信息,当然我们也可以利用Servlet类init()方法,并在配置文件中让它启动应用的时候
就执行,并且在关闭的时候执行destroy()方法.但是继承此接口应该更符合容器的应用.
举个简单的例子:在一些论坛,社区及聊天室当中,删除在线的超时用户就可以利用这个接口来实现.
可以利用JAVA的TimerTask及Timer类来实现每隔一定的时间进行自动检测.
实例代码如下:

UserOnlineTimerTask.java
Java代码 web上下文监听器ServletContextListener 例子 . web上下文监听器ServletContextListener 例子 .web上下文监听器ServletContextListener 例子 .
  1. package com.bcxy.servlet;   
  2. import java.util.TimerTask;   
  3. import org.apache.commons.logging.Log;   
  4. import org.apache.commons.logging.LogFactory;   
  5. public class UserOnlineTimerTask extends TimerTask {   
  6. Log log = LogFactory.getLog(UserOnlineTimerTask.class);   
  7. public void run() {   
  8. // 删除超时在线用户   
  9. log.info("删除在线的超时用户....");   
  10. }   
  11. }  
  1. package com.bcxy.servlet;  
  2. import java.util.TimerTask;  
  3. import org.apache.commons.logging.Log;  
  4. import org.apache.commons.logging.LogFactory;  
  5. public class UserOnlineTimerTask extends TimerTask {  
  6. Log log = LogFactory.getLog(UserOnlineTimerTask.class);  
  7. public void run() {  
  8. // 删除超时在线用户   
  9. log.info("删除在线的超时用户....");  
  10. }  
  11. }  
package com.bcxy.servlet;
import java.util.TimerTask;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class UserOnlineTimerTask extends TimerTask {
Log log = LogFactory.getLog(UserOnlineTimerTask.class);
public void run() {
// 删除超时在线用户
log.info("删除在线的超时用户....");
}
}


SysListener.java
Java代码 web上下文监听器ServletContextListener 例子 . web上下文监听器ServletContextListener 例子 .web上下文监听器ServletContextListener 例子 .
  1. package com.bcxy.servlet;   
  2. import java.io.IOException;   
  3. import java.util.Timer;   
  4. import javax.servlet.ServletContextEvent;   
  5. import javax.servlet.ServletContextListener;   
  6. import javax.servlet.ServletException;   
  7. import javax.servlet.ServletRequest;   
  8. import javax.servlet.ServletResponse;   
  9. import javax.servlet.http.HttpServlet;   
  10. import org.apache.commons.logging.Log;   
  11. import org.apache.commons.logging.LogFactory;   
  12. public class SysListener   
  13. extends HttpServlet   
  14. implements ServletContextListener {   
  15. Log log = LogFactory.getLog(SysListener.class);   
  16. Timer timer = new Timer();   
  17. public void service(ServletRequest request, ServletResponse response)   
  18. throws ServletException, IOException {   
  19. //   
  20.   
  21. }   
  22. public void contextInitialized(ServletContextEvent sce) {   
  23. log.info("initial context....");   
  24. timer.schedule(new UserOnlineTimerTask(), 010000);   
  25.   
  26. }   
  27. public void contextDestroyed(ServletContextEvent sce) {   
  28. log.info("destory context....");   
  29. timer.cancel();   
  30. }   
  31.   
  32. }  
  1. package com.bcxy.servlet;  
  2. import java.io.IOException;  
  3. import java.util.Timer;  
  4. import javax.servlet.ServletContextEvent;  
  5. import javax.servlet.ServletContextListener;  
  6. import javax.servlet.ServletException;  
  7. import javax.servlet.ServletRequest;  
  8. import javax.servlet.ServletResponse;  
  9. import javax.servlet.http.HttpServlet;  
  10. import org.apache.commons.logging.Log;  
  11. import org.apache.commons.logging.LogFactory;  
  12. public class SysListener  
  13. extends HttpServlet  
  14. implements ServletContextListener {  
  15. Log log = LogFactory.getLog(SysListener.class);  
  16. Timer timer = new Timer();  
  17. public void service(ServletRequest request, ServletResponse response)  
  18. throws ServletException, IOException {  
  19. //   
  20.   
  21. }  
  22. public void contextInitialized(ServletContextEvent sce) {  
  23. log.info("initial context....");  
  24. timer.schedule(new UserOnlineTimerTask(), 010000);  
  25.   
  26. }  
  27. public void contextDestroyed(ServletContextEvent sce) {  
  28. log.info("destory context....");  
  29. timer.cancel();  
  30. }  
  31.   
  32. }  
package com.bcxy.servlet;
import java.io.IOException;
import java.util.Timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class SysListener
extends HttpServlet
implements ServletContextListener {
Log log = LogFactory.getLog(SysListener.class);
Timer timer = new Timer();
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
//

}
public void contextInitialized(ServletContextEvent sce) {
log.info("initial context....");
timer.schedule(new UserOnlineTimerTask(), 0, 10000);

}
public void contextDestroyed(ServletContextEvent sce) {
log.info("destory context....");
timer.cancel();
}

}

如果你没有使用log4j的话,你可以把log.info()改为System.out.println()会得到同样的结果.

相关文章: