編寫一個實例,使它能夠對ServletContext以及屬性進行監聽。由以上介紹可知,該類需要實現ServletContextAttributeListener和ServletContextListener接口類。
- MyServletContextListener.Java
- package com;
- import java.io.FileOutputStream;
- import java.io.PrintWriter;
- import javax.servlet.ServletContext;
- import javax.servlet.ServletContextAttributeEvent;
- import javax.servlet.ServletContextAttributeListener;
- import javax.servlet.ServletContextEvent;
- import javax.servlet.ServletContextListener;
- public class MyServletContextListener
- implements ServletContextListener,ServletContextAttributeListener
- {
- private ServletContext context = null;
- //定義一個ServletContext對象變量,賦爲null
- public void contextInitialized(ServletContextEvent s)
- {
-
//TODO 該方法實現了ServletContextListener接口定義的方法,
對ServletContext進行初始化 - this.context = s.getServletContext();
- //初始化一個ServletContext對象
- print("ServletContext初始化......");
- //打印出該方法的操作信息
- }
- public void contextDestroyed(ServletContextEvent s)
- {
-
//TODO 該方法實現了ServletContextListener接口類定義方法,
用於釋放ServletContext對象 - this.context = null;
- print("ServletContext被釋放......");
- }
- public void attributeAdded(ServletContextAttributeEvent sa)
- {
- //TODO 當上下文添加屬性時,將調用該方法。這裏只是將添加的屬性信息打印出來
-
print("增加ServletContext對象的一個屬性:
attributeAdded('"+sa. getName()+"',' "+sa.getValue()+"')"); - }
- public void attributeRemoved(ServletContextAttributeEvent sa)
- {
- //TODO 當把ServletContext中的某個屬性刪除時,調用該方法
-
print("刪除ServletContext對象的某一個屬性:
attributeRemoved('"+sa.getName() +"','")"); - }
- public void attributeReplaced(ServletContextAttributeEvent sa)
- {
- //TODO 當上下文進行屬性值更新時,將調用該方法
-
print("更改ServletContext對象的某一個屬性:
attributeReplaced('"+sa.getName()+"', '"+sa.getValue()+"')"); - }
- private void print(String message)
- {
- //調用該方法在txt文件中打印出message字符串信息
- PrintWriter out = null;
- Try
- {
- out = new PrintWriter(new FileOutputStream("D:\\output.txt",true));
-
out.println(new java.util.Date().toLocaleString()+"
ContextListener: "+message); - out.close();
- }
- catch(Exception e)
- {
- e.printStackTrace();
- }
- }
- }
程序說明:該監聽器類實現了ServletContextAttributeListener和ServletContextListener兩個接口類中的5個方法:
contextInitialized(ServletContextEvent s)方法用來初始化ServletContext對象。
contextDestroyed(ServletContextEvent s)方法在上下文中刪除某個屬性時調用。
attributeAdded(ServletContextAttributeEvent sa)方法在上下文中添加一個新的屬性時調用。
attributeReplaced(ServletContextAttributeEvent sa)方法在更新屬性時調用。
attributeRemoved(ServletContextAttributeEvent sa)方法在上下文中刪除某個屬性時會被調用。
在使用這個監聽器之前還需要在Web模塊中的web.xml配置文件中進行聲明,代碼如下:
-
class>servlet.MyServlet
ContextListenerclass>
接下來將編寫JSP程序來操作ServletContext的屬性,看看監聽器程序作出什麼反應,該JSP的一段代碼如下: