JAVA基础JSP之监听器

目录

1.application监听器  servlet---ServletContext

2.Session监听器

3.request监听器

Servlet程序: 监听Servlet    Listener
    主要功能是负责监听Web的各种操作,当相关的事件触发后将产生事件,并对事件进行处理。

监听器分为3种:
    application监听器
    session监听器
    request监听器

事件:点击、移动、键盘、触摸


1.application监听器  servlet---ServletContext

  实现:ServletContextListener  (常用)
  重写:

  //容器启动时调用
  public void contextInitialized(ServletContextEvent event){
    
  }

  //容器消毁时调用
  public void contextDestroyed(ServletContextEvent event){
    
  }


  ServletContextEvent事件方法:
    .getServletContext()    //取得ServletContext对象,即上下文

  例示:
    event.getServletContext().getContextPath();


2.Session监听器

实现:HttpSessionListener  (偶尔用)
  重写:
  //session创建时调用
  public void sessionCreated(HttpSessionEvent event){

  }

  //session销毁时调用
  public void sessionDestroyed(HttpSessionEvent event){

  }


  HttpSessionEvent事件方法:
    .getSession()    //取得当前的session

    例示:
    event.getSession().getId();    //得到session的ID


  


  实现:HttpSessionAttributeListener (不用,性能差)
  重写:
  //增加属性时触发
  public void attributeAdded(HttpSessionBindingEvent event){
    
  }

  //删除属性时触发
  public void attributeRemoved(HttpSessionBindingEvent event){
    
  }

  //替换属性时触发
  public void attributeReplaced(HttpSessionBindingEvent event){
    
  }


  HttpSessionBindingEvent事件方法:
    .getSession()    //取得session
    .getName()    //取得属性的名称
    .getValue()    //取得属性的内容

    例示:
    event.getSession()    //取得session
    event.getName()        //取得属性的名称
    event.getValue()    //取得属性的内容
    

3.request监听器

实现:ServletRequestListener (不用,性能差)
  重写:
  //请求开始时调用
  public requestInitialized(ServletRequestEvent event){

  }

  //请求结束时调用
  public requestDestroyed(ServletRequestEvent event){

  }


  ServletRequestEvent事件方法:
    .getServletRequest()    //取得ServletRequest对象
    .getServletContext()    //取得ServletContext对象

    例示:
    event.getServletRequest().getRemoteAddr();    //得到IP地址
    event.getServletContext().getContextPath();    //得到当前路径



为什么说session监听器和request监听器一般都不用?
答:以request监听器为例,如果采用request监听,那就意味着每次请求都要触发一次监听,这大大降低了程率的效率,因此很少用。
 

web.xml
<listener>
   <listener-class>com.listener.Application</listener-class>
</listener>


  在tomcat执行时被加载。
  正常关闭时被销毁。

==============================================

实例:监听在线人数
    
分析:创建一个会话就+1,销毁了会话则-1
      (在会话被创建时,往全局变量中+1;会话被关闭时,全局变量-1)
      服务器停止则移除 count


public class AppListrener implements ServletContextListener,HttpSessionListener {
    
    ServletContext app=null;
    
    //容器销毁时调用
    public void contextDestroyed(ServletContextEvent sce) {
        // TODO Auto-generated method stub
        System.out.println("容器销毁了");
        
    }
    //容器初始化时调用
    public void contextInitialized(ServletContextEvent sce) {
        // TODO Auto-generated method stub
        System.out.println("容器初始化了");
        app=sce.getServletContext();
        Integer count=0;
        app.setAttribute("cut", count);
        System.out.println(count+"___");
    }
    
    //session创建时调用
    public void sessionCreated(HttpSessionEvent arg0) {
        // TODO Auto-generated method stub
        System.out.println("session创建时调用");
        Integer count=(Integer)app.getAttribute("cut");
        
        if(count==null){
            count=0;
        }
        count++;
        System.out.println("创建时:"+count);
        app.setAttribute("cut", count);
    }
    
    //session销毁时调用
    public void sessionDestroyed(HttpSessionEvent arg0) {
        // TODO Auto-generated method stub
        System.out.println("session销毁时调用");
        Integer count=(Integer)app.getAttribute("cut");
        
        if(count==null){
            count=0;
        }
        count--;
        System.out.println("注销时:"+count);
        app.setAttribute("cut", count);
    }


web.xml

  <listener>
      <listener-class>com.servlet.AppListrener</listener-class>
  </listener>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值