javaweb_listener

servlet监听器有一共有8种,3种类型,分别针对3个作用域。


1.创建,销毁型

ServletRequestListener有以下两个方法
void requestDestroyed(ServletRequestEvent sre)  
void requestInitialized(ServletRequestEvent sre) 


HttpSessionListener有以下两个方法
void sessionCreated(HttpSessionEvent se) 
void sessionDestroyed(HttpSessionEvent se)  


ServletContextListener
void contextDestroyed(ServletContextEvent sce) 
void contextInitialized(ServletContextEvent sce)  

2.增删改型

ServletContextAttributeListener


HttpSessionAttributeListener


ServletRequestAttributeListener


对于以上两种需要注册型,在web.xml中加入如下配置

  <listener>
  	<listener-class>
  		com.asarja.base.listener.RequestHandleListener
  	</listener-class>
  </listener>

3.不用注册型(以下两种监听器需要 实现类 实例化 )

HttpSessionBindingListener:实现该接口的类,能检测自己何时被Httpsession绑定,和解绑

HttpSessionActivationListener:实现该接口的类(要求些javabean必须是实现了Serializable接口的),能监测自己何时随着HttpSession一起激活和钝化。(该监听器用法还在试验中)


demo:

下面一个demo展示以上7种监听器如何被调用的。

RequestListenerDemo.java

public class RequestListenerDemo implements ServletRequestListener{

    public void requestDestroyed(ServletRequestEvent event) {
        System.out.println(((HttpServletRequest)event.getServletRequest()).getRequestURL()+" destroyed");
    }

    public void requestInitialized(ServletRequestEvent event) {
        System.out.println(((HttpServletRequest)event.getServletRequest()).getRequestURL()+" initialized");
    }

}

RequestAttributeListenerDemo.java

public class RequestAttributeListenerDemo implements ServletRequestAttributeListener{

    public void attributeAdded(ServletRequestAttributeEvent event) {
        System.out.println("request "+event.getName()+ " add");
    }

    public void attributeRemoved(ServletRequestAttributeEvent event) {
        System.out.println("request "+event.getName()+" remove");
    }

    public void attributeReplaced(ServletRequestAttributeEvent event) {
        System.out.println("request "+event.getName()+" replace");
    }

}

ServletContextListenerDemo.java

public class ServletContextListenerDemo implements ServletContextListener{

    public void contextDestroyed(ServletContextEvent event) {
       
        System.out.println(event.getServletContext().getServerInfo()+" destroyed");
    }

    public void contextInitialized(ServletContextEvent event) {
        event.getServletContext().setAttribute("name", "context");
        System.out.println(event.getServletContext().getServerInfo()+" initialized");
    }

}

ServletContextAttributeListenerDemo.java

public class ServletContextAttributeListenerDemo implements ServletContextAttributeListener{

    public void attributeAdded(ServletContextAttributeEvent event) {
        System.out.println("servletContext "+event.getName() +" add");
    }

    public void attributeRemoved(ServletContextAttributeEvent event) {
        System.out.println("servletContext "+event.getName() +" remove");
    }

    public void attributeReplaced(ServletContextAttributeEvent event) {
        System.out.println("servletContext "+event.getName() +" replace");
    }

}

SessionListenerDemo.java

public class SessionListenerDemo implements HttpSessionListener{

    public void sessionCreated(HttpSessionEvent event) {
        System.out.println(event.getSession().getId()+" created");
    }

    public void sessionDestroyed(HttpSessionEvent event) {
        System.out.println(event.getSession().getId()+" destoryed");
    }

}

SessionAttributeListenerDemo.java

public class SessionAttributeListenerDemo implements HttpSessionAttributeListener{

    public void attributeAdded(HttpSessionBindingEvent event) {
        System.out.println("session "+event.getName()+" add");
    }

    public void attributeRemoved(HttpSessionBindingEvent event) {
        System.out.println("session "+event.getName()+" remove");
        
    }

    public void attributeReplaced(HttpSessionBindingEvent event) {
        System.out.println("session "+event.getName()+" replace");
        
    }

}

SessionBindingListenerDemo.java

public class SessionBindingListenerDemo implements HttpSessionBindingListener{

    public void valueBound(HttpSessionBindingEvent event) {
        System.out.println("session " + event.getName() + " bound");
    }

    public void valueUnbound(HttpSessionBindingEvent event) {
        System.out.println("session " + event.getName() + " unbound");
    }

}

CreateSession.java

public class CreateSession extends HttpServlet {

    private static final long serialVersionUID = 1L;

    public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //HttpSessionBindingListener
        SessionBindingListenerDemo sessionBindingListenerDemo = new SessionBindingListenerDemo();
        //HttpSessionActivationListener
        SessionActivationListenerDemo sessionActivationListenerDemo = new SessionActivationListenerDemo();
        
        request.getSession().setAttribute("sessionBindingListenerDemo", sessionBindingListenerDemo);
        request.getSession().removeAttribute("sessionBindingListenerDemo");
        
        request.getSession().setAttribute("sessionActivationListenerDemo", sessionActivationListenerDemo);
        request.getSession().removeAttribute("sessionActivationListenerDemo");
        
        request.getSession().setAttribute("name", "zs");
        request.setAttribute("name", "request");
        request.getRequestDispatcher("session.jsp").forward(request, response);
    }

}

web.xml

  <listener>
  	<listener-class>
  		com.asarja.listener.ServletContextAttributeListenerDemo
  	</listener-class>
  </listener>
  
  <listener>
  	<listener-class>
  		com.asarja.listener.SessionAttributeListenerDemo
  	</listener-class>
  </listener>
  
  <listener>
  	<listener-class>
  		com.asarja.listener.RequestAttributeListenerDemo
  	</listener-class>
  </listener>
  
  <listener>
  	<listener-class>
  		com.asarja.listener.RequestListenerDemo
  	</listener-class>
  </listener>
  
  <listener>
  	<listener-class>
  		com.asarja.listener.SessionListenerDemo
  	</listener-class>
  </listener>
  
  <listener>
  	<listener-class>
  		com.asarja.listener.ServletContextListenerDemo
  	</listener-class>
  </listener>
  
  <servlet>
    <servlet-name>CreateSession</servlet-name>
    <servlet-class>com.asarja.listener.controller.CreateSession</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>CreateSession</servlet-name>
    <url-pattern>/createSession.do</url-pattern>
  </servlet-mapping>

jsp

	<%
		session.getServletContext().setAttribute("name", "ls");
		session.getServletContext().removeAttribute("name");
		session.setAttribute("name", "li");
		session.removeAttribute("name");
		session.invalidate();
		request.setAttribute("name", "request");
		request.setAttribute("name", "request");
		request.removeAttribute("name");
	 %>

以上测试了7种listener如何工作


request域监听器:可以用于监听客户端每一次请求的详细信息

session域监听器:可以用于记录在线人数(不是太准确)

servletContext域监听器:可以用于初始化一些数据等等,以供全局使用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值