javaWeb規(guī)范包括三個(gè)技術(shù)點(diǎn):servlet 、listener 、filter;監(jiān)聽器就是監(jiān)聽某個(gè)對(duì)象的的狀態(tài)變化的組件。監(jiān)聽器是一個(gè)java類,用來監(jiān)聽其他javaBean的變化。在javaWeb中監(jiān)聽器是用來監(jiān)聽三個(gè)對(duì)象(request、session、servletConfig)的狀態(tài)。監(jiān)聽器的相關(guān)概念事件源:
1、被監(jiān)聽的對(duì)象(三個(gè)域?qū)ο?request,session,servletContext)
2、監(jiān)聽器:監(jiān)聽事件源對(duì)象, 事件源對(duì)象的狀態(tài)的變化都會(huì)觸發(fā)監(jiān)聽器 。
3、注冊(cè)監(jiān)聽器:將監(jiān)聽器與事件源進(jìn)行綁定。
4、響應(yīng)行為:監(jiān)聽器監(jiān)聽到事件源的狀態(tài)變化時(shí),所涉及的功能代碼(程序員編寫代碼)
1) request
2) session
3) servletConfig
通過配置web.xmlwancheng
servlet提供了8個(gè)監(jiān)聽器
1) 第一類:監(jiān)聽三個(gè)域?qū)ο蟮膭?chuàng)建和銷毀的監(jiān)聽器3個(gè)
對(duì)象類型 | 對(duì)應(yīng)的監(jiān)聽器 |
---|---|
ServletContext | ServletContextListener |
HttpSession | HttpSessionListener |
HttpServletRequest | ServletRequestListener |
2) 第二類:監(jiān)聽三個(gè)域?qū)ο笞兏谋O(jiān)聽器(屬性添加,屬性移除,屬性替換)3個(gè)
對(duì)象類型 | 對(duì)應(yīng)的監(jiān)聽器 |
---|---|
ServletContext | ServletContextAttributeListener |
HttpSession | ServletRequestAttributeListener |
HttpServletRequest | HttpSessionAttributeListener |
3) 第三類:監(jiān)聽HttpSession對(duì)象中的JavaBean的狀態(tài)的改變.(綁定,解除綁定,鈍化和活化)2個(gè)
對(duì)象類型 | 對(duì)應(yīng)的監(jiān)聽器 |
---|---|
HttpSession | HttpSessionBindingListener(綁定,解除綁定) |
HttpSession | HttpSessionActivationListener(鈍化和活化) |
ServletContextListener監(jiān)聽器的主要作用(相當(dāng)于監(jiān)聽tongcat啟動(dòng)和關(guān)閉):
1) 初始化的工作:初始化對(duì)象;初始化數(shù)據(jù)。比如加載數(shù)據(jù)庫(kù)驅(qū)動(dòng),對(duì)連接池的初始化。
2) 加載一些初始化的配置文件;比如spring的配置文件。
3) 任務(wù)調(diào)度(定時(shí)器Timer/TimerTask)
監(jiān)聽ServletContext域的創(chuàng)建與銷毀的監(jiān)聽器,Servlet域的生命周期:在服務(wù)器啟動(dòng)創(chuàng)建,服務(wù)器關(guān)閉時(shí)銷毀;監(jiān)聽器的編寫步驟:
1) 編寫一個(gè)監(jiān)聽器類去實(shí)現(xiàn)監(jiān)聽器接口
2) 覆蓋監(jiān)聽器的方法
3) 需要在web.xml中進(jìn)行配置(注冊(cè))
例子:
監(jiān)聽Httpsession域的創(chuàng)建與銷毀的監(jiān)聽器。HttpSession對(duì)象的生命周期:第一次調(diào)用request.getSession時(shí)創(chuàng)建;銷毀有以下幾種情況(服務(wù)器關(guān)閉、session過期、 手動(dòng)銷毀)
例子:統(tǒng)計(jì)在線人數(shù),每一個(gè)瀏覽器訪問都會(huì)記錄一次,當(dāng)一個(gè)瀏覽器退出時(shí)就會(huì)讓在線人數(shù)減掉1.
在src/main/webapp下新建一個(gè)名為web的包,并在web包下面新建兩個(gè)類,分別是:
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下新建一個(gè)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>
當(dāng)前有<%=application.getAttribute("count").toString() %>
<a href="logout">登出</a>
</body>
</html>
3、ServletRequestListener
1、ServletContextAttibuteListener
2、HttpSessionBindingListener
3、HttpSessionActivationListener
1、
2、
3、
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
本文標(biāo)題:servlet(二)、監(jiān)聽器javax.servlet.Filter-創(chuàng)新互聯(lián)
文章分享:http://muchs.cn/article24/deiije.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、搜索引擎優(yōu)化、定制開發(fā)、網(wǎng)站設(shè)計(jì)公司、外貿(mào)建站、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容