您好,登錄后才能下訂單哦!
????javaWeb規范包括三個技術點:servlet 、listener 、filter;監聽器就是監聽某個對象的的狀態變化的組件。監聽器是一個java類,用來監聽其他javaBean的變化。在javaWeb中監聽器是用來監聽三個對象(request、session、servletConfig)的狀態。監聽器的相關概念事件源:
1、被監聽的對象(三個域對象 request,session,servletContext)
2、監聽器:監聽事件源對象, 事件源對象的狀態的變化都會觸發監聽器 。
3、注冊監聽器:將監聽器與事件源進行綁定。
4、響應行為:監聽器監聽到事件源的狀態變化時,所涉及的功能代碼(程序員編寫代碼)
1) request
2) session
3) servletConfig
通過配置web.xmlwancheng
????servlet提供了8個監聽器
1) 第一類:監聽三個域對象的創建和銷毀的監聽器3個
對象類型 | 對應的監聽器 |
---|---|
ServletContext | ServletContextListener |
HttpSession | HttpSessionListener |
HttpServletRequest | ServletRequestListener |
2) 第二類:監聽三個域對象變更的監聽器(屬性添加,屬性移除,屬性替換)3個
對象類型 | 對應的監聽器 |
---|---|
ServletContext | ServletContextAttributeListener |
HttpSession | ServletRequestAttributeListener |
HttpServletRequest | HttpSessionAttributeListener |
3) 第三類:監聽HttpSession對象中的JavaBean的狀態的改變.(綁定,解除綁定,鈍化和活化)2個
對象類型 | 對應的監聽器 |
---|---|
HttpSession | HttpSessionBindingListener(綁定,解除綁定) |
HttpSession | HttpSessionActivationListener(鈍化和活化) |
ServletContextListener監聽器的主要作用(相當于監聽tongcat啟動和關閉):
1) 初始化的工作:初始化對象;初始化數據。比如加載數據庫驅動,對連接池的初始化。
2) 加載一些初始化的配置文件;比如spring的配置文件。
3) 任務調度(定時器Timer/TimerTask)
監聽ServletContext域的創建與銷毀的監聽器,Servlet域的生命周期:在服務器啟動創建,服務器關閉時銷毀;監聽器的編寫步驟:
1) 編寫一個監聽器類去實現監聽器接口
2) 覆蓋監聽器的方法
3) 需要在web.xml中進行配置(注冊)
例子:
監聽Httpsession域的創建與銷毀的監聽器。HttpSession對象的生命周期:第一次調用request.getSession時創建;銷毀有以下幾種情況(服務器關閉、session過期、 手動銷毀)
例子:統計在線人數,每一個瀏覽器訪問都會記錄一次,當一個瀏覽器退出時就會讓在線人數減掉1.
在src/main/webapp下新建一個名為web的包,并在web包下面新建兩個類,分別是:
CountLoginListen.java
package web;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class CountListener implements HttpSessionListener {
private int count = 0;
public void sessionCreated(HttpSessionEvent se) {
count++;
HttpSession session = se.getSession();
ServletContext sct = session.getServletContext();
sct.setAttribute("count", count);
}
public void sessionDestroyed(HttpSessionEvent se) {
count--;
HttpSession session = se.getSession();
ServletContext sct = session.getServletContext();
sct.setAttribute("count", count);
}
}
LoginOutServlet.java
package web;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class LogoutServlet extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType("text/html;charset=utf8");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
session.invalidate();
out.close();
}
}
2) 配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<listener>
<listener-class>web.CountListener</listener-class>
</listener>
<servlet>
<servlet-name>h</servlet-name>
<servlet-class>web.LogoutServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>h</servlet-name>
<url-pattern>/logout</url-pattern>
</servlet-mapping>
</web-app>
3) 在webapp下新建一個jsp文件,名為:index.jsp
<%@ page language="java" contentType="text/html; charset=utf8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
當前有<%=application.getAttribute("count").toString() %>
<a href="logout">登出</a>
</body>
</html>
3、ServletRequestListener
1、ServletContextAttibuteListener
2、HttpSessionBindingListener
3、HttpSessionActivationListener
1、
2、
3、
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。