关闭

Java Web开发--------监听器

标签: 监听器java web
275人阅读 评论(0) 收藏 举报
分类:

一. 监听器的基本概念

监听器是Servlet规范定义的一种特殊类,

  • 用于监听ServletContext,HttpSession和ServletRequest等域对象的创建和销毁事件
  • 用于监听对象的属性发生修改的事件

可以在事件发生前,发生后做一些必要的处理。

监听器常用在统计在线人数,统计网站访问量,系统启动时加载初始化信息等上面。

监听器,过滤器,Servlet的优先级,即加载顺序是依次递减的


二. 监听器的分类

有监听ServletContext,HttpSession和ServletRequest三大类,三大类中每一类又分为

  • 监听域对象自身的创建,销毁
  • 监听域对象中的属性的增加和删除

HttpSession还有个监听绑定到该域中的某个对象(上面是属性)的状态的事件监听器HttpSessionBindingListener,HttpSessionActionListener,在Eclipse中创建Listener时的对话框很好地体现了这一分类结构
这里写图片描述


三. 使用步骤

  1. 定义Listener类,实现需要的接口
  2. 在web.xml中配置相应的Listener
    • 使用注解@WebListener(servlet3可用)
    • HttpSessionBindingListener,HttpSessionActionListener不需要再web.xml中注册

四. 案例:统计在线人数和记录相应的IP

一个Session对应一人,
IP地址在Session中获取不到,只能在request中获取,两者通过往ServletContext()中setAttribute来交互

SessionListener类:

public void sessionCreated(HttpSessionEvent arg0) {
        // TODO Auto-generated method stub
        userNum ++;
        arg0.getSession().getServletContext().setAttribute("userNum", userNum);
    }

    /**
     * @see HttpSessionListener#sessionDestroyed(HttpSessionEvent)
     */
    public void sessionDestroyed(HttpSessionEvent arg0) {
        // TODO Auto-generated method stub
        userNum --;
        HttpSession session = arg0.getSession();
        session.getServletContext().setAttribute("userNum", userNum);

        ArrayList<User> users = (ArrayList<User>) session.getServletContext().getAttribute("users");
        users.remove(SessionUtil.getUserById(users, session.getId()));
    }

RequestLisenter类:

public void requestInitialized(ServletRequestEvent arg0) {
        // TODO Auto-generated method stub
        HttpServletRequest request =  (HttpServletRequest) arg0.getServletRequest();
        String sessionId = request.getSession().getId();

        if(SessionUtil.getUserById(users, sessionId) == null) {
            User u = new User();
            u.setFirstTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
            u.setIp(request.getRemoteAddr());
            u.setSessionId(sessionId);
            users.add(u);
        }

        request.getSession().getServletContext().setAttribute("users", users);
    }

jsp视图:

<body>
    ${userNum} online<br>

    <% ArrayList<User> users = (ArrayList<User>)application.getAttribute("users"); 
        System.out.println(users.size());
        for(User u : users) {
    %>
        IP: <%=u.getIp() %><br>
        sessionId: <%=u.getSessionId() %><br>
        firstTime: <%=u.getFirstTime() %><br>
    <%

        }
    %>
</body>
0
0
查看评论

web监听器的用途

web监听器的用途 1,统计在线人数和在线用户,也是监听器的主要用途之一 2,系统启动时加载初始化信息,包括一些缓存,功能的定时器 3,统计网站访问量,每次请求都可通过request来获取 4,跟Spring结合,做相关的操作 步骤: 1,实现一个实现监听器接口的类 2,配置web.x...
  • java_zhaoyanli
  • java_zhaoyanli
  • 2015-02-02 10:54
  • 2371

过滤器、拦截器和监听器在javaWeb中应用的区别

最近在闲暇的时候,发现自己对过滤器和拦截器的应用不是很清楚。因此,对二者的区别仅应用场景做了下对比,在此做笔记以作知识积累。 拦截器,顾名思义是用来拦截的。也就是说拦截某一类或一个请求处理,在进行逻辑处理之前和处理之后做出相应的其他动作(附加的操作)。而过滤器是随着应用启动而生效的,所以一般做项目...
  • m765201832
  • m765201832
  • 2016-05-29 23:59
  • 1314

JavaWeb中监听器+过滤器+拦截器区别、配置和实际应用

JavaWeb中监听器+过滤器+拦截器区别、配置和实际应用 1.前沿上一篇文章提到在web.xml中各个元素的执行顺序是这样的,context-param-->listener-->filter-->servlet; 而拦截器是在Spring MVC中配置的,如果从整个项目中看,...
  • Jintao_Ma
  • Jintao_Ma
  • 2016-10-30 19:51
  • 5175

Java Web开发——Servlet监听器

一、Servlet监听器的概念 Servlet监听器是Servlet规范中定义的一种特殊类,用于监听ServletContext、HttpSession和ServletRequest等域对象的创建与销毁事件,以及监听这些域对象中属性发生修改的事件。 监听对象: 1、ServletContext...
  • xy_190261
  • xy_190261
  • 2016-06-03 14:39
  • 146

JavaWEB开发-Servlet监听器

JavaWEB开发-Servlet监听器简介。 监听器:专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动。 Servlet 监听器:Servlet 规范中定义的一种特殊类,它用于监听 web 应用程序中的 ServletContext,...
  • zhchzh1000
  • zhchzh1000
  • 2009-08-13 22:55
  • 1345

Java三大器之监听器(Listener)的工作原理和代码演示

现在来说说Servlet的监听器Listener,它是实现了javax.servlet.ServletContextListener 接口的服务器端程序,它也是随web应用的启动 而启动,只初始化一次,随web应用的停止而销毁。主要作用是:做一些初始化的内容添加工作、设置一些基本的内容、比如一些参...
  • reggergdsg
  • reggergdsg
  • 2016-10-22 12:00
  • 23207

java监听器Listener使用详解

转载请注明原文地址: http://www.cnblogs.com/ygj0930/p/6374384.html 在我的项目中有具体应用:https://github.com/ygj0930/CoupleSpace      监听器用于监听web...
  • syslbjjly
  • syslbjjly
  • 2017-10-19 10:42
  • 381

javaweb常用监听器

Servlet 规范中定义了很多监听器,用于监听Servlet三个数据域对象创建销毁和 内部数据状态改变 Servlet三种存储范围:ServletContext、HttpSession、ServletRequest Servlet监听器分为三大类 1、数据域对象创建和销毁 监听器 2、数据域对...
  • qq_33665647
  • qq_33665647
  • 2016-12-31 10:15
  • 1306

java-web 过滤器 & 监听器 & 拦截器

servlet规范 servlet/filter/listener/interceptor区别与联系 http://blog.csdn.net/sundenskyqq/article/details/8549932 http://hejiajunsh.iteye.com/blog/17765...
  • gg_gogoing
  • gg_gogoing
  • 2015-07-27 16:45
  • 2428

Java监听器的使用

目录目录 一监听器的简介 二监听器的用途 三创建一个简单监听器的实例步骤 四监听器的启动顺序 五监听器的分类1按照监听对象划分 2按照监听的事件划分 六servlet30下的监听器的使用一、监听器的简介定义:监听器实际上是一个类,这个类实现了特定的接口,然后将这个类在 web.xml 文件中进行描述...
  • qq_33482432
  • qq_33482432
  • 2016-05-27 17:21
  • 1179