ServletContextListener

我们知道可以通过在web.xml中设定

 <context-param>标签,

比如

 <context-param>
        <param-name>breed</param-name>
        <param-value>test</param-value>

    </context-param>

应用在容器中启动之后,整个应用任何一个servlet都可以通过getContextConfig获取breed的值。

但是如果我们需要在项目启动的时候获取一个对象呢,而不仅仅是一个字符串呢?

我们可以通过写一个类实现ServletContextListener接口实现这一点。


package javax.servlet;

import java.util.EventListener;

public abstract interface ServletContextListener extends EventListener
{
  public abstract void contextInitialized(ServletContextEvent paramServletContextEvent);

  public abstract void contextDestroyed(ServletContextEvent paramServletContextEvent);
}
在web.xml中配置


 <listener>
        <listener-class>
            servlet.ServletContextListenerTest
        </listener-class>
  </listener>

ServletContextListenerTest实现一个ServletContextListener的接口


package servlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class ServletContextListenerTest implements ServletContextListener {

	@Override
	public void contextDestroyed(ServletContextEvent event) {
		
	}

	@Override
	public void contextInitialized(ServletContextEvent event) {
		System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
		ServletContext sc = event.getServletContext();
		String dogBreed  = sc.getInitParameter("breed");
		System.out.println("aaaaaaaaaaaaaa"+dogBreed);
		Dog dog = new Dog(dogBreed);
		event.getServletContext().setAttribute("dog", dog);
	}

}
上面的代码主要是实现了在应用启动的时候,将一个dog对象塞进ServletContext的attribute属性中,


这样应用的所有servlet就可以通过getAttribute共享这个dog对象了。

Dog类

package servlet;

public class Dog {
	public String breed;
	
	public String getBreed() {
		return breed;
	}
	public void setBreed(String breed) {
		this.breed = breed;
	}
	public Dog(String breed) {
		this.breed=breed;
	}
	public void getDogBreed() {
		System.out.println("the breed of the dog is"+breed);
	}
}



写一个情景类

package servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(urlPatterns={"/servletContextListenerTestClient"})
public class ServletContextListenerTestClient extends HttpServlet{

	
	private static final long serialVersionUID = -5169172101637034615L;
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		Dog dog = (Dog)this.getServletContext().getAttribute("dog");
		dog.getDogBreed();
	}


}



你可能感兴趣的:(ServletContextListener)