最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

servlet監(jiān)聽器的學(xué)習(xí)使用(三)

 更新時(shí)間:2017年09月30日 17:15:32   作者:柳暗花明睡一覺  
這篇文章主要為大家詳細(xì)介紹了servlet監(jiān)聽器學(xué)習(xí)使用的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文為大家分享了servlet監(jiān)聽器的具體學(xué)習(xí)內(nèi)容,供大家參考,具體內(nèi)容如下

1.什么是servlet監(jiān)聽器?

  servlet監(jiān)聽器也叫web監(jiān)聽器。是servlet中一種特殊類。能夠幫助開發(fā)者監(jiān)聽web應(yīng)用中的特定事件。比如ServletContext,ServletSession,ServletRequest的創(chuàng)建和銷毀,變量的創(chuàng)建和銷毀等。

2 監(jiān)聽器常用的用途

  通常使用Web監(jiān)聽器做以下的內(nèi)容:

  統(tǒng)計(jì)在線人數(shù),利用HttpSessionLisener

  加載初始化信息:利用ServletContextListener

  統(tǒng)計(jì)網(wǎng)站訪問量

  實(shí)現(xiàn)訪問監(jiān)控

3.監(jiān)聽器的分類

  根據(jù)servlet對(duì)象可以將監(jiān)聽器劃分為三種:ServletContext,ServletSession,ServletRequest。

4監(jiān)聽器的應(yīng)用

4.1 ServletContex :對(duì)應(yīng)監(jiān)控application內(nèi)置對(duì)象的創(chuàng)建和銷毀。

  當(dāng)web容器開啟時(shí),執(zhí)行contextInitialized方法;當(dāng)容器關(guān)閉或重啟時(shí),執(zhí)行contextDestroyed方法。

實(shí)現(xiàn)方式:直接實(shí)現(xiàn)ServletContextListener接口

package com.learn;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import java.io.*;

/**
 * Created by Administrator on 2017/09/23.
 */
public class MyServletContextListener implements ServletContextListener {
 @Override
 public void contextInitialized(ServletContextEvent sce) {

  System.out.println("Webapp initital.......");
  ServletContext servletContext = sce.getServletContext();
  InputStreamReader inputStreamReader = new InputStreamReader(servletContext.getResourceAsStream("/count/count.txt"));
  BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
  try {
   int icount = Integer.parseInt(bufferedReader.readLine());
   icount++;
   servletContext.setAttribute("count",icount);
   System.out.println("Webapp initital success");
  } catch (IOException e) {
   e.printStackTrace();
  }

 }

 @Override
 public void contextDestroyed(ServletContextEvent sce) {

  System.out.println("webApp destroyed ........");
  ServletContext servletContext = sce.getServletContext();

  Integer count = (Integer) servletContext.getAttribute("count");
  if(count != null){
   count ++;
   String filePath = servletContext.getRealPath("/count");
   filePath = filePath+"/count.txt";
   try {
    PrintWriter printWriter = new PrintWriter(filePath);
    printWriter.write(count);
    printWriter.close();
    System.out.println("webApp desdroyed success ");
   } catch (FileNotFoundException e) {
    e.printStackTrace();
   }
  }
 }
}

4.2HttpSession監(jiān)控:對(duì)應(yīng)監(jiān)控session內(nèi)置對(duì)象的創(chuàng)建和銷毀。

當(dāng)打開一個(gè)新的頁面時(shí),開啟一個(gè)session會(huì)話,執(zhí)行sessionCreated方法;當(dāng)頁面關(guān)閉session過期時(shí),或者容器關(guān)閉銷毀時(shí),執(zhí)行sessionDestroyed方法。

實(shí)現(xiàn)方式:直接實(shí)現(xiàn)HttpSessionListener接口:

package com.learn;

import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

/**
 * Created by Administrator on 2017/09/23.
 */
public class MySessionListener implements HttpSessionListener{
 @Override
 public void sessionCreated(HttpSessionEvent se) {

  HttpSession session = se.getSession();
  System.out.println("新建session,sessionId:"+session.getId());

 }

 @Override
 public void sessionDestroyed(HttpSessionEvent se) {
  HttpSession session = se.getSession();
  System.out.println("銷毀session,sessionId:"+session.getId());
 }
}

4.3ServletRequest監(jiān)控:對(duì)應(yīng)監(jiān)控request內(nèi)置對(duì)象的創(chuàng)建和銷毀。

當(dāng)訪問某個(gè)頁面時(shí),出發(fā)一個(gè)request請(qǐng)求,執(zhí)行requestInitialized方法;當(dāng)頁面關(guān)閉時(shí),執(zhí)行requestDestroyed方法。

實(shí)現(xiàn)方式,直接實(shí)現(xiàn)ServletRequestListener接口:

package com.learn;

import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.http.HttpServletRequest;

/**
 * Created by Administrator on 2017/09/23.
 */
public class MyRequestListener implements ServletRequestListener {
 @Override
 public void requestDestroyed(ServletRequestEvent sre) {


  HttpServletRequest request = (HttpServletRequest) sre.getServletRequest();
  Long date = System.currentTimeMillis()-(Long) (request.getAttribute("dateCreated"));
  System.out.println("消耗時(shí)間:"+date);
 }

 @Override
 public void requestInitialized(ServletRequestEvent sre) {
  HttpServletRequest request = (HttpServletRequest) sre.getServletRequest();
  String uri = request.getRequestURI();
  uri = request.getQueryString() == null ? uri : (uri + "?" + request.getQueryString());

  request.setAttribute("dateCreated", System.currentTimeMillis());
  System.out.println("IP:"+request.getRemoteAddr()+"URI:"+uri);

 }
}

5監(jiān)聽器web.xml的配置

<listener>
  <listener-class>com.learn.MyServletContextListener</listener-class>
</listener>

<listener>
  <listener-class>com.learn.MySessionListener</listener-class>
</listener>

<listener>
 <listener-class>com.learn.MyRequestListener</listener-class>
</listener>

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • TreeSet判斷重復(fù)元素解析及代碼示例

    TreeSet判斷重復(fù)元素解析及代碼示例

    這篇文章主要介紹了TreeSet判斷重復(fù)元素解析及代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • SpringBoot整合Mysql和Redis的詳細(xì)過程

    SpringBoot整合Mysql和Redis的詳細(xì)過程

    這篇文章主要介紹了SpringBoot整合Mysql和Redis的示例代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • java正則表達(dá)式匹配規(guī)則超詳細(xì)總結(jié)

    java正則表達(dá)式匹配規(guī)則超詳細(xì)總結(jié)

    正則表達(dá)式并不僅限于某一種語言,但是在每種語言中有細(xì)微的差別,下面這篇文章主要給大家介紹了關(guān)于java正則表達(dá)式匹配規(guī)則的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • fastjson 使用方法詳細(xì)介紹

    fastjson 使用方法詳細(xì)介紹

    Fastjson是一個(gè)Java語言編寫的JSON處理器,由阿里巴巴公司開發(fā)。接下來通過本文給大家分享fastjson 使用方法詳細(xì)介紹,感興趣的朋友一起看看吧
    2017-11-11
  • 詳解Java對(duì)象的強(qiáng)、軟、弱和虛引用+ReferenceQueue

    詳解Java對(duì)象的強(qiáng)、軟、弱和虛引用+ReferenceQueue

    這篇文章主要介紹了詳解Java對(duì)象的強(qiáng)、軟、弱和虛引用+ReferenceQueue的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • java實(shí)現(xiàn)投票程序設(shè)計(jì)

    java實(shí)現(xiàn)投票程序設(shè)計(jì)

    這篇文章主要介紹了java實(shí)現(xiàn)投票程序設(shè)計(jì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2015-12-12
  • Spring?MVC中的攔截器案例演示

    Spring?MVC中的攔截器案例演示

    攔截器可以攔截所有的請(qǐng)求,也可以只攔截滿足指定的請(qǐng)求,?Spring?MVC?的攔截器類似于過濾器,用來執(zhí)行預(yù)處理和后處理操作,本文給大家介紹Spring?MVC中的攔截器案例演示,感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • 如何把JAR發(fā)布到maven中央倉庫的幾種方法

    如何把JAR發(fā)布到maven中央倉庫的幾種方法

    這篇文章主要介紹了如何把JAR發(fā)布到maven中央倉庫的幾種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Spring項(xiàng)目使用Maven和BCrypt實(shí)現(xiàn)修改密碼功能方式

    Spring項(xiàng)目使用Maven和BCrypt實(shí)現(xiàn)修改密碼功能方式

    在數(shù)字時(shí)代,信息安全尤其是密碼安全至關(guān)重要,本文通過實(shí)例探討如何在Spring項(xiàng)目中利用Maven和BCrypt實(shí)現(xiàn)一個(gè)安全的密碼修改功能,我們將從環(huán)境搭建到編寫核心業(yè)務(wù)邏輯,再到完成功能測(cè)試,確保每一步都遵循最佳安全實(shí)踐,通過本文,你將了解到密碼安全的重要性
    2024-10-10
  • Java集合中的LinkedHashMap使用解析

    Java集合中的LinkedHashMap使用解析

    這篇文章主要介紹了Java集合中的LinkedHashMap使用解析,LinkedHashMap是繼承于HashMap的,所以它的很多屬性和方法都是HashMap中的,那么它是怎么實(shí)現(xiàn)有序存儲(chǔ)的呢,需要的朋友可以參考下
    2023-12-12

最新評(píng)論

文水县| 九寨沟县| 祥云县| 衡山县| 静海县| 天长市| 郯城县| 洪江市| 靖江市| 定州市| 贵德县| 那曲县| 六枝特区| 沙洋县| 海阳市| 新干县| 龙井市| 北宁市| 古蔺县| 上高县| 论坛| 稻城县| 郓城县| 澎湖县| 施甸县| 双鸭山市| 江口县| 论坛| 新安县| 余庆县| 台中市| 仙居县| 巧家县| 星座| 南康市| 茂名市| 搜索| 土默特左旗| 林州市| 荔浦县| 额敏县|