程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 監聽器Listener,listener

監聽器Listener,listener

編輯:JAVA綜合教程

監聽器Listener,listener


一、監聽器

監聽器是web應用程序事件模型的一部分,當web應用中的某些狀態發生改變時,會產生相應的事件,監聽器可以接收這些事件,並可以在事件發生時做相應的處理。

二、監聽器常用的接口

2.1、javax.servlet.ServletContextListener

實現該接口可以在servlet上下文對象初始化或者銷毀時得到通知

2.2、javax.servlet.ServletContextAttributeListener

實現該接口,可以 在servlet上下文的屬性列表發生變化時得到通知

2.3、javax.servlet.http.HttpSessionListener

實現該接口可以在創建session後或者失效前得到通知

2.4、javax.servlet.http.HttpSessionActivationListener

實現該接口的對象,如果綁定到session中,當serssion被鈍化或者激活時,servlet容器將通知該對象。

2.5、javax.servlet.http.HttpSessionAttributeListener

實現該接口,可以 在servlet上下文的屬性列表發生變化時得到通知

2.6、javax.servlethttp.HttpSessionBindListener

實現該接口,可以使一個對象在綁定serssion或者從serssion中刪除時得到通知。

2.7、javax.servlet.servletRequest

實現該接口,可以在請求對象初始化時或者被銷毀時得到通知。

2.8、javax.servlet.ServletRequestAttributeListener

實現該接口,可以在請求對象中的屬性發生變化是得到通知。

三、監聽器的應用

3.1、HttpSessionBindingListener接口

 定義實現HttpSessionBindingListener接口,當有session創建是在線人數+1,當session銷毀時在線人數-1.

package demo.web.listener;

import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;

public class UserListener implements HttpSessionBindingListener {

	public void valueBound(HttpSessionBindingEvent arg0) {
		Constants.ONLINE_USER_COUNT ++;

	}

	public void valueUnbound(HttpSessionBindingEvent arg0) {
		Constants.ONLINE_USER_COUNT --;

	}

}

在web.xml中的簡單配置

<listener>
  	<listener-class>demo.web.listener.UserListener</listener-class>
  </listener>

3.2、利用servletContextListener接口

在系統服務啟動時,加載DataSource對象,獲取數據庫連接。

public class DataSourceListener implements ServletContextListener{
  public void ContextInitialized(ServletContextEnvent e){
    ServletContext sc = e.getServletContext();
       Context cxt = new InitialContext();// 初始化上下文
       // 獲取與邏輯名相關的數據源對象
       DataSource ds  =(DtaSource)cxt.lookup("java:comp/env/jdbc/news");  
        // 將dataSource保存到servletContext上下文中
       sc.serAttribute("DS",ds);
    }
}    

  servlet相關代碼:

package demo.web.servlet;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyServlet3 extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
	   DataSource ds = (DataSource)getServletContext().getAttribute("DS");
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		super.doPost(req, resp);
	}

	@Override
	protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
			throws ServletException, IOException {
		super.service(arg0, arg1);
	}
}

  web.xml中的配置:

<servlet>
  	<servlet-name>myServlet</servlet-name>
  	<servlet-class>demo.web.servlet.MyServlet3</servlet-class>
  	<init-param>
  		<param-name>charSerContent</param-name>
  		<param-value>utf-8</param-value>
  	</init-param>
  </servlet>
  <servlet-mapping>
  	<servlet-name>myServlet</servlet-name>
  	<url-pattern>/demo/myServlet</url-pattern>
  </servlet-mapping>
<listener>
  	<listener-class>demo.web.listener.UserListener</listener-class>
</listener>

  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved