監聽器是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>