天天看點

JavaWeb監聽器以及案例對象監聽器:request、Session、Application對象屬性監聽器案例:

對象監聽器:request、Session、Application

監聽内容:建立、銷毀、屬性改變事件

>實作ServletContextListener,HttpSessionListener,ServletRequestListener接口

public class ContextSessionRequestListener implements ServletContextListener,HttpSessionListener,ServletRequestListener {

	@Override
	public void requestDestroyed(ServletRequestEvent arg0) {
		// TODO Auto-generated method stub
		System.out.println("監聽ServletRequestEvent,銷毀request對象");
	}

	@Override
	public void requestInitialized(ServletRequestEvent arg0) {
		// TODO Auto-generated method stub
		System.out.println("監聽ServletRequestEvent,建立request對象");
		
	}

	@Override
	public void sessionCreated(HttpSessionEvent arg0) {	
		System.out.println("監聽HttpSessionEvent,建立session對象");
	}

	@Override
	public void sessionDestroyed(HttpSessionEvent arg0) {
		System.out.println("監聽HttpSessionEvent,銷毀session對象");
	}

	@Override
	public void contextDestroyed(ServletContextEvent arg0) {
		// TODO Auto-generated method stub
		System.out.println("監聽ServletContextEvent,銷毀context對象");
	}

	@Override
	public void contextInitialized(ServletContextEvent arg0) {
		// TODO Auto-generated method stub
		System.out.println("監聽ServletContextEvent,建立context對象");
	}

}
           

>配置web.xml

<!-- 配置對象監聽器 -->
  <listener>
  	<listener-class>org.threetierarc.listener.ContextSessionRequestListener</listener-class>
  </listener>
           

<listener-class>為路徑全名。

對象屬性監聽器

>實作ServletContextAttributeListener,HttpSessionAttributeListener,ServletRequestAttributeListener接口

public class AttributeListener implements ServletContextAttributeListener,HttpSessionAttributeListener,ServletRequestAttributeListener {

	@Override
	public void attributeAdded(ServletRequestAttributeEvent arg0) {
		// TODO Auto-generated method stub
		String attrName=arg0.getName();//目前正在操作的屬性名
		Object attrValue=arg0.getServletRequest().getAttribute(attrName);
		System.out.println("ServletRequest[增加]屬性名"+attrName+",屬性值"+attrValue);
	}

	@Override
	public void attributeRemoved(ServletRequestAttributeEvent arg0) {
		System.out.println("ServletRequest[删除]屬性名"+arg0.getName());
		
	}

	@Override
	public void attributeReplaced(ServletRequestAttributeEvent arg0) {
//		例如:
//		arg0.getServletRequest().setAttribute("name", "zs");
//		arg0.getServletRequest().setAttribute("name", "ls");
		String attrName=arg0.getName();
		Object attrValue=arg0.getServletRequest().getAttribute(attrName);
		System.out.println("ServletRequest[替換]屬性名"+attrName+",屬性值"+attrValue);
	}

	@Override
	public void attributeAdded(HttpSessionBindingEvent arg0) {
		String attrName=arg0.getName();//目前正在操作的屬性名
		Object attrValue=arg0.getSession().getAttribute(attrName);
		System.out.println("ServletSession[增加]屬性名"+attrName+",屬性值"+attrValue);
		
	}

	@Override
	public void attributeRemoved(HttpSessionBindingEvent arg0) {
		System.out.println("ServletSession[删除]屬性名"+arg0.getName());
		
	}

	@Override
	public void attributeReplaced(HttpSessionBindingEvent arg0) {
		String attrName=arg0.getName();
		Object attrValue=arg0.getSession().getAttribute(attrName);
		System.out.println("ServletSession[替換]屬性名"+attrName+",屬性值"+attrValue);
		
	}

	@Override
	public void attributeAdded(ServletContextAttributeEvent arg0) {
		String attrName=arg0.getName();//目前正在操作的屬性名
		Object attrValue=arg0.getServletContext().getAttribute(attrName);
		System.out.println("ServletContext[增加]屬性名"+attrName+",屬性值"+attrValue);
		
	}

	@Override
	public void attributeRemoved(ServletContextAttributeEvent arg0) {
		System.out.println("ServletContext[删除]屬性名"+arg0.getName());
		
	}

	@Override
	public void attributeReplaced(ServletContextAttributeEvent arg0) {
		String attrName=arg0.getName();
		Object attrValue=arg0.getServletContext().getAttribute(attrName);
		System.out.println("ServletContext[替換]屬性名"+attrName+",屬性值"+attrValue);
		
	}

}
           

>配置web.xml

<!-- 配置對象屬性監聽器 -->
  <listener>
  	<listener-class>org.threetierarc.listener.AttributeListener</listener-class>
  </listener>
           

jsp測試代碼:

application.setAttribute("name", "zs");//增加屬性
	application.setAttribute("name", "ls");//替換
	application.removeAttribute("name");//删除
	
	session.setAttribute("user","user1");//增加屬性
	session.setAttribute("user", "user2");//替換
	session.removeAttribute("user");//删除
	session.invalidate();
	
	request.setAttribute("sss","s1");//增加屬性
	request.setAttribute("sss", "s2");//替換
	request.removeAttribute("sss");//删除
           

案例:

1)統計目前線上人數(session)

2)統計網頁遊覽次數(application)

注:自行配置web.xml

思路:兩個案例結合使用,在建立session時,線上人數首先拿application的資料+1,當退出或登出時(session失效時),application則-1。

package org.userAction.listener;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class userOnlineCount implements HttpSessionListener,ServletContextListener{

	@Override
	public void contextDestroyed(ServletContextEvent arg0) {
		
	}

	@Override
	public void contextInitialized(ServletContextEvent arg0) {
		//擷取application
		ServletContext sc=arg0.getServletContext();
		sc.setAttribute("count", 1);
		
	}

	//session被建立時人數自增
	@Override
	public void sessionCreated(HttpSessionEvent arg0) {
		ServletContext sc=arg0.getSession().getServletContext();
		int count=(int) sc.getAttribute("count");
		//存儲
		sc.setAttribute("count", ++count);
		
	}

	@Override
	public void sessionDestroyed(HttpSessionEvent arg0) {
		ServletContext sc=arg0.getSession().getServletContext();
		int count=(int) sc.getAttribute("count");
		//存儲
		sc.setAttribute("count", --count);
		
	}

}
           

繼續閱讀