ServletContextListener
监听者类能监听ServletContext
一生中的两个关键事件,初始化(创建)和撤销。这个类实现了javax.servlet.ServletContextListener
。
ServletContextListener类,它能做到:
- 上下文初始化(应用正在得到部署)时得到通知。
- 从ServletContext得到上下文初始化参数。
- 使用初始化参数查找名建立一个数据库连接。
- 把数据库连接存储为一个属性,使得Web应用的各个部分都能访问。
- 上下文撤销(应用取消部署或结束)时得到通知。
- 关闭数据库连接
一、 ServletContextListener
MyServletContextListener.java
这个类实现了ServletContextListener,它得到上下文初始化参数,创建Dog,并把Dog设置为上下文属性。
二、 属性类
Dog.java
Dog类只是一个普通的Java类。它的任务是作为一个属性值,由ServletContextListener实例化,并设置在ServletContext中,以便servlet获取。
三、 Servlet
ListenerTester.java
这个类扩展了HttpServlet。它的任务是验证监听者的工作,为此,这个Servlet会从上下文得到Dog属性,然后调用Dog的getBreed(),并把结果打印到响应(以便我们在浏览器上看到)。
编写监听者类
public class MyServletContextListener implements ServletContextListener {
// 上下文撤销(应用取消部署或结束)时得到通知
@Override
public void contextDestroyed(ServletContextEvent event) {
}
// 上下文初始化(应用正在得到部署)时得到通知
// 监听者的任务是得到有关上下文初始化参数,然后使用这个String来构造一个Dog对象
// 监听者再把这个Dog对象存放在一个ServletContext属性中,以便servlet获取
@Override
public void contextInitialized(ServletContextEvent event) {
ServletContext sc = event.getServletContext();
String dogBreed = sc.getInitParameter("breed");
Dog d = new Dog(dogBreed);
sc.setAttribute("dog", d);
}
}
编写属性类(Dog)
public class Dog {
private String breed;
public Dog(String breed){
this.breed = breed;
}
public String getBreed(){
return breed;
}
}
编写servlet类
public class ListenerTester extends HttpServlet{
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("test context attributes set by listener<br>");
out.println("<br>");
Dog dog = (Dog) getServletContext().getAttribute("dog");
out.println("Dog's breed is:" + dog.getBreed());
}
}
编写部署描述文件(DD)
<servlet>
<servlet-name>ListenerTester</servlet-name>
<servlet-class>com.example.ListenerTester</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ListenerTester</servlet-name>
<url-pattern>/ListenTest.do</url-pattern>
</servlet-mapping>
<context-param>
<param-name>breed</param-name>
<param-value>Great Dane</param-value>
</context-param>
<listener>
<listener-class>com.example.MyServletContextListener</listener-class>
</listener>