Servlet的三种监听器

Servlet的三种监听器

 

 

1:对Servlet上下文进行监听:

 

可以监听ServletContext对象的创建和删除以及属性的添加、删除和修改等操作,该监听器需要用到如下两个接口类:

 

(1)ServletContextAttributeListener:监听对ServletContext属性的操作,比如增加、删除、修改。

      attributeAdded(ServletContextAttributeEvent sa)添加属性时调用

      attributeReplaced(ServletContextAttributeEvent sa)修改属性时调用

       attributeRemoved(ServletContextAttributeEvent sa)删除属性时调用

 

(2)ServletContextListener:监听对ServletContext对象的创建和删除。

      contextInitialized(ServletContextEvent sce)初始化时调用

      contextDestroyed(ServletContextEvent sce)销毁时调用,即当服务器重新加载时调用

 

/*******************************************************************************/

 

相关案例

 

import javax.servlet.ServletContextAttributeEvent;

import javax.servlet.ServletContextAttributeListener;

import javax.servlet.ServletContextEvent;

import javax.servlet.ServletContextListener;

public class ServletContext implements       ServletContextListener,ServletContextAttributeListener{

   //上下文属性:添加、删除、修改监听

   //1.上下文属性添加监听

 public void attributeAdded(ServletContextAttributeEvent scae) {

         print("增加ServletContext对象的一个属性:"+scae.getName()+","+scae.getValue());

 }

    //2.上下文属性删除监听

 public void attributeRemoved(ServletContextAttributeEvent scae) {

         print("删除ServletContext对象的一个属性:"+scae.getName()+","+scae.getValue());

 }

    //3.上下文属性修改监听

 public void attributeReplaced(ServletContextAttributeEvent scae) {

         print("修改ServletContext对象的一个属性:"+scae.getName()+","+scae.getValue());

 }

   //上下文对象:创建、销毁监听

 //1.上下文对象创建监听

  public void contextInitialized(ServletContextEvent sce) {

         print("ServletContext初始化......"); }

 //2.上下文对象销毁监听

 public void contextDestroyed(ServletContextEvent sce) {

         print("ServletContext销毁......"); }

 

 @SuppressWarnings("deprecation")

 private void print(String message){

  //调用该方法在txt文件中打印出message字符串信息

  PrintWriter out = null;

  try {

        out = new PrintWriter(new FileOutputStream("F:context_result.txt",true));

        out.println(new java.util.Date().toLocaleString()+"contextListener:"+message);

        out.close();

  } catch (FileNotFoundException e) {

        e.printStackTrace();) }

}

}

 

 

2:监听http会话:

 

 

可以监听http会话活动情况和http会话中的属性设置情况,也可以监听http会话的active和passivate情况等,该监听器需要用到如下多个接口类:

 

(1)HttpSessionListener:监听httpSession的操作。           

      sessionCreate(HttpSessionEvent se)初始化时调用;

      sessionDestroyed(httpSessionEvent se)销毁时调用,即当用户注销时调用

 

(2)HttpSessionActivationListener:用于监听http会话的active和passivate情况

 

(3)HttpSessionAttributeListener:监听HttpSession中的属性操作 

      attributeAdded(HttpSessionBindingEvent se)添加属性时调用

      attributeRemoved(HttpSessionBindingEvent se)删除属性时调用

      attributeReplaced(HttpSessionBindingEvent se)修改属性时调用

 

 

/*******************************************************************************/

 

相关案例

import java.io.FileNotFoundException

import java.io.FileOutputStream;

import java.io.PrintWriter; import javax.servlet.ServletContext;

import javax.servlet.ServletContextEvent;

import javax.servlet.ServletContextListener;

import javax.servlet.http.HttpSessionActivationListener;

import javax.servlet.http.HttpSessionAttributeListener;

import javax.servlet.http.HttpSessionBindingEvent;

import javax.servlet.http.HttpSessionEvent;

import javax.servlet.http.HttpSessionListener;

public class SessionListener implements HttpSessionActivationListener,HttpSessionAttributeListener,

HttpSessionListener,ServletContextListener{

       ServletContext context;

       int users;

   //session属性监听

   //1.监听属性添加

 public void attributeAdded(HttpSessionBindingEvent arg0) {

        print("attributeAdded('"+arg0.getSession().getId()+"','"+arg0.getName()+"','"+arg0.getValue()+"')");

 }

     //2.监听属性删除

 public void attributeRemoved(HttpSessionBindingEvent arg0) {

        print("attributeRemoved('"+arg0.getSession().getId()+"','"+arg0.getName()+"','"+arg0.getValue()+"')");

 }

     //3.监听属性替换

 public void attributeReplaced(HttpSessionBindingEvent arg0) {

        print("attributeReplaced('"+arg0.getSession().getId()+"','"+arg0.getName()+"','"+arg0.getValue()+"')");

 }

   //session会话创建监听

   //1.监听会话创建

 public void sessionCreated(HttpSessionEvent arg0) {

       users++;

       print("sessionCreated('"+arg0.getSession().getId()+"'),目前拥有"+users+"个用户");

       context.setAttribute("users",new Integer(users));

 }

     //2.监听会话释放

 public void sessionDestroyed(HttpSessionEvent arg0) {

       users--;

       print("sessionDestroyed('"+arg0.getSession().getId()+"'),目前拥有"+users+"个用户");

       context.setAttribute("users",new Integer(users));

 }

 

 public void contextInitialized(ServletContextEvent arg0) {

       this.context = arg0.getServletContext();

       this.print("ServletContext的初始化.....");

 }

 

 public void contextDestroyed(ServletContextEvent arg0) {

       this.context = null;

       print("ServletContext的释放");

 }

   //session活动监听

   //1.监听会话的active情况

 public void sessionDidActivate(HttpSessionEvent arg0) {

       print("sessionDidActivate("+arg0.getSession().getId()+")");

 }

     //2.监听会话的passivate情况

 public void sessionWillPassivate(HttpSessionEvent arg0) {

       print("sessionWillPassivate("+arg0.getSession().getId()+")");

 }

 @SuppressWarnings("deprecation")

 private void print(String message){

  //调用该方法在txt文件中打印出message字符串信息

  PrintWriter out = null;

  try {

          out = new PrintWriter(new FileOutputStream("F:session_result.txt",true));

          out.println(new java.util.Date().toLocaleString()+"contextListener:"+message);

          out.close();

  } catch (FileNotFoundException e) {

          e.printStackTrace();

  }

 } 

}

 

 

3:对客户端请求进行监听:

 

对客户端的请求进行监听是在Servlet2.4规范中新添加的一项新技术,使用的接口如下:

 

 (1)ServletRequestListener接口类

       requestDestroyed(ServletRequestEvent arg0)对销毁客户端进行监听,即当执行request.removeAttribute("user")时调用

       requestInitialized(ServletRequestEvent arg0)对实现客户端的请求进行监听

 

 (2)ServletRequestAttributeListener接口类

       attributeAdded(ServletRequestAttributeEvent arg0)对属性添加进行监听

       attributeRemoved(ServletRequestAttributeEvent arg0)对属性删除进行监听

       attributeReplaced(ServletRequestAttributeEvent arg0)对属性替换进行监听

 

 

/*******************************************************************************/

 

相关案例

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.PrintWriter;

import javax.servlet.ServletRequestAttributeEvent;

import javax.servlet.ServletRequestAttributeListener;

import javax.servlet.ServletRequestEvent;

import javax.servlet.ServletRequestListener;

public class RequestListener implements ServletRequestListener,ServletRequestAttributeListener{

  //监听请求的初始化与否

  //1.对实现客户端请求进行监听

 public void requestInitialized(ServletRequestEvent arg0) {

          print("request的初始化");

          print(arg0.getServletRequest().getRemoteAddr()+";"+arg0.getServletRequest().getRemoteHost()+","+arg0.getServletRequest().getRemotePort());

 }

    //2.对销毁客户端请求进行监听

 public void requestDestroyed(ServletRequestEvent arg0) {

          print("request的销毁");

 }

  //监听请求属性

  //1.对属性的添加进行监听

 public void attributeAdded(ServletRequestAttributeEvent arg0) {

          print("attributeAdded('"+arg0.getName()+"','"+arg0.getValue()+"')");

 }

    //2.对属性的删除进行监听

 public void attributeRemoved(ServletRequestAttributeEvent arg0) {

          print("attributeRemoved('"+arg0.getName()+"','"+arg0.getValue()+"')"); 

 }

    //3.对属性的更新进行监听

 public void attributeReplaced(ServletRequestAttributeEvent arg0) {

          print("attributeReplaced('"+arg0.getName()+"','"+arg0.getValue()+"')");

 }

 @SuppressWarnings("deprecation")

 private void print(String message){

  //调用该方法在txt文件中打印出message字符串信息

  PrintWriter out = null;

  try {

            out = new PrintWriter(new FileOutputStream("F: equest_result.txt",true));

            out.println(new java.util.Date().toLocaleString()+"RequestListener:"+message);

            out.close();

  } catch (FileNotFoundException e) {

            e.printStackTrace();

  }

 }

}

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java Servlet监听器Servlet的一种功能组件,它可以监听并响应Web应用程序中特定事件的发生。通过监听器,我们可以在特定事件发生时执行一些操作。监听器可以监听Servlet中的多个作用域对象,如ServletContext、HttpSession和ServletRequest。例如,可以使用监听器来监听在线用户数量、初始化上下文或会话等事件。配置监听器需要在web.xml文件中添加相应的配置,指定监听器的类名和监听的事件。例如,在web.xml中可以配置一个监听application的监听器,如下所示:在代码中,我们还可以通过实现HttpSessionListener接口来创建自定义监听器。这样的监听器可以在session创建和销毁时执行特定的操作。例如,在下面的代码中,我们定义了一个实现了HttpSessionListener接口的监听器,当会话创建时,我们将会话计数器加一,并将其存储在ServletContext中;当会话销毁时,我们将会话计数器减一,并更新ServletContext中的计数器值。这样,我们就可以在应用程序中使用Java Servlet监听器来监听并响应特定事件的发生。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【JavaWeb】之Servlet监听器](https://blog.csdn.net/qq_42146402/article/details/127481125)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [Servlet监听器——实现在线登录人数统计小例子](https://blog.csdn.net/rongxiang111/article/details/53487381)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值