12、Servlet监听器

Listener是Servlet的监听器,它可以监听客户端的请求、服务端的操作等。通过监听器,可以自动激发一些操作,比如监听在线用户的数量。
当增加一个HttpSession时,就激发sessionCreated(HttpSessionEvent se)方法,这样就可以给在线人数加1.

1、Servlet常用的监听接口:

    -ServletContextAttributeListener监听对ServletContext属性的操作,比如增加、删除、修改属性:attributeAdded(),attributeRemoved()、attributeReplaced()
    -ServletContextListener监听ServletContext,当创建ServletContext时,激发contextInitialized(ServletContextEvent sce)方法;当销毁ServletContext时,激发contextDestroyed(ServletContextEvent sce)方法

2、一个监听器实例:监听ServletContext的创建与销毁

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

public class MyServletContextListener implements ServletContextListener
{
	public void contextDestroyed(ServletContextEvent sce)
	{
		System.out.println("destroyed" + sce.getServletContext());
	}
	public void contextInitialized(ServletContextEvent sce)
	{
		System.out.println("initialized  " + sce.getServletContext());
	}
}


监听器同Servlet和Filter一样,也需要在Web.xml中进行部署,上面的监听器部署如下:

<listener>
  	<listener-class>com.cdtax.listener.MyServletContextListener</listener-class>
  </listener>

 

一个监听器:对ServletContext的属性进行监听:

import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;

public class MyServletContextAttributeListener implements
		ServletContextAttributeListener
{

	public void attributeAdded(ServletContextAttributeEvent scab)
	{
		System.out.println("attribute added");
		System.out.println(scab.getName() + ":" + scab.getValue());
	}

	public void attributeRemoved(ServletContextAttributeEvent scab)
	{
		System.out.println("attribute removed");
		System.out.println(scab.getName() + ":" + scab.getValue());
	}

	public void attributeReplaced(ServletContextAttributeEvent scab)
	{
		System.out.println("attribute replace");
		System.out.println(scab.getName() + ":" + scab.getValue());
	}

}


web.xml中部署:

 <listener>
  	<listener-class>com.cdtax.listener.MyServletContextAttributeListener</listener-class>
  </listener>


使用jsp页面改变ServletContext属性进行试验:

<body>
    <% application.setAttribute("testaa","aaaaaa"); %>
    <% application.setAttribute("testaa","bbbbbb"); %>
    <% application.setAttribute("testaa","cccccc"); %>
    <% application.setAttribute("testaa","dddddd"); %>
  </body>


 

<body>
   <% application.removeAttribute("testaa"); %>
  </body>

 

3、HttpSessionListener监听HttpSession的操作。当创建一个Session时,激发sessionCreated(HttpSessionEvent se)方法;当销毁一个Session时,激发sessionDestroyed(HttpSessionEvent se)方法。

      HttpSessionAttributeListener监听HttpSession中的属性的操作。当在Session增加一个属性时,激发attributeAdded(HttpSessionBindingEvent se)方法;当在Session删除一个属性时,激发attributeRemoved(HttpSessionBindingEvent se)方法;当在Session属性被重新设置时,激发attributeReplaced(HttpSessionBindingEvent se)方法。
 监听session创建:

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class MySessionListener implements HttpSessionListener
{

	public void sessionCreated(HttpSessionEvent se)
	{
		System.out.println("session created");
		System.out.println(se.getSession());
	}

	public void sessionDestroyed(HttpSessionEvent se)
	{
		System.out.println("session destroyed");
		System.out.println(se.getSession());
	}

}


<listener>
  	<listener-class>com.cdtax.listener.MySessionListener</listener-class>
  </listener>


监听session属性:

import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;

public class MySessionAttributeListener implements HttpSessionAttributeListener
{

	public void attributeAdded(HttpSessionBindingEvent se)
	{
		System.out.println("attribute added");
		System.out.println(se.getName() + ":" + se.getValue());
	}

	public void attributeRemoved(HttpSessionBindingEvent se)
	{
		System.out.println("attribute removed");
		System.out.println(se.getName() + ":" + se.getValue());
	}

	public void attributeReplaced(HttpSessionBindingEvent se)
	{
		System.out.println("attribute replaced");
		System.out.println(se.getName() + ":" + se.getValue());
	}

}


web.xml中部署:

 <listener>
  	<listener-class>com.cdtax.listener.MySessionAttributeListener</listener-class>
  </listener>


测试jsp

<body>
    <% session.setAttribute("aa","bb");
    	session.setAttribute("aa","cc");
    	session.setAttribute("aa","dd");
    	session.removeAttribute("aa");
    %>
  </body>



 

你可能感兴趣的:(12、Servlet监听器)