如何在整个webapp中调用某个实例对象?

来源:互联网 发布:便宜又好用的鼠标知乎 编辑:程序博客网 时间:2024/06/07 02:24

思路:首先我们创建一个普通的类(class),然后利用监听器接口(listener)来初始化类并且添加到属性(setAttribute)中,最后在servlet中调用。


DOG 类:

package com.example;public class Dog {private String breed;public Dog(String breed) {this.breed = breed;}public String getBreed() {return breed;}}

创建一个监听类(只要实现 ServletContextListener 接口即可,注意在contextInitialized中将类初始化!!!不要在contextDestroyed中!!!)

package com.example;import javax.servlet.ServletContext;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;public class MyServletContextListener implements ServletContextListener {@Overridepublic void contextDestroyed(ServletContextEvent event) {}@Overridepublic void contextInitialized(ServletContextEvent event) {// TODO Auto-generated method stubServletContext sc = event.getServletContext();String dogBreed = sc.getInitParameter("breed");Dog d = new Dog(dogBreed);sc.setAttribute("dog", d);}}

servlet调用类:

package com.example;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ListenerTester extends HttpServlet {public 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());}}

xml的配置文件需要配置listener

<?xml version="1.0" encoding="UTF-8"?><web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">  <display-name></display-name>  <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>  <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list>    <context-param><param-name>breed</param-name><param-value>Great Dane</param-value>  </context-param>  <listener><listener-class>  com.example.MyServletContextListener</listener-class>  </listener>  </web-app>