中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

servlet(二)、監聽器 javax.servlet.Filter

發布時間:2020-03-23 08:27:48 來源:網絡 閱讀:829 作者:Qiu_CJ 欄目:開發技術

servlet(二)、監聽器 javax.servlet.Filter

一、什么是監聽器

????javaWeb規范包括三個技術點:servlet 、listener 、filter;監聽器就是監聽某個對象的的狀態變化的組件。監聽器是一個java類,用來監聽其他javaBean的變化。在javaWeb中監聽器是用來監聽三個對象(request、session、servletConfig)的狀態。監聽器的相關概念事件源:
1、被監聽的對象(三個域對象 request,session,servletContext)
2、監聽器:監聽事件源對象, 事件源對象的狀態的變化都會觸發監聽器 。
3、注冊監聽器:將監聽器與事件源進行綁定。
4、響應行為:監聽器監聽到事件源的狀態變化時,所涉及的功能代碼(程序員編寫代碼)

二、javaWeb的監聽器

1、監聽的域對象

1) request
2) session
3) servletConfig

2、事件源和監聽器綁定的過程

通過配置web.xmlwancheng

3、servlet提供的監聽器

????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(鈍化和活化)

三、監聽實例——三大域對象的創建與銷毀的監聽器

1、ServletContextListener

ServletContextListener監聽器的主要作用(相當于監聽tongcat啟動和關閉):

1) 初始化的工作:初始化對象;初始化數據。比如加載數據庫驅動,對連接池的初始化。
2) 加載一些初始化的配置文件;比如spring的配置文件。
3) 任務調度(定時器Timer/TimerTask)

監聽ServletContext域的創建與銷毀的監聽器,Servlet域的生命周期:在服務器啟動創建,服務器關閉時銷毀;監聽器的編寫步驟:

1) 編寫一個監聽器類去實現監聽器接口
2) 覆蓋監聽器的方法
3) 需要在web.xml中進行配置(注冊)

例子:

2、HttpSessionListener

監聽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、

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

顺平县| 天祝| 铁力市| 定远县| 龙南县| 湘潭县| 江川县| 西林县| 桑植县| 修武县| 延津县| 沙田区| 乐陵市| 军事| 大悟县| 喀喇沁旗| 瓮安县| 东辽县| 汝城县| 观塘区| 吉林市| 新巴尔虎左旗| 孝感市| 日喀则市| 故城县| 东乌珠穆沁旗| 武汉市| 湛江市| 长沙县| 崇阳县| 西平县| 即墨市| 鸡西市| 鹿泉市| 措美县| 鲁山县| 阿拉善右旗| 祁连县| 耒阳市| 西宁市| 莱州市|