为了账号安全,请及时绑定邮箱和手机立即绑定

JAVA Web开发技术应用——监听器

难度初级
时长 1小时30分
学习人数
综合评分9.70
269人评价 查看评价
9.8 内容实用
9.7 简洁易懂
9.6 逻辑清晰
  • ServletContext、HttpSession、ServletRequest对象的中属性的增加和删除有单独的事件监听器 XXAttributeListner 监听的事件包括 attributeAdded() attributeRemoved() attributeReplaced() request.getAttribute的值获得是从request.setAttribute的值 request.getParameter是请求的参数值
    查看全部
  • 绑定到HttpSession域中的对象状态的事件监听器

    绑定到HttpSession域中的对象有多种状态如下:
    绑定(相当于保存,通过session.setAttribute()把对象保存到域对象session中)——>解除绑定 (相当于session.removeAttribute())            钝化(将session对象持久化到存储设备上)——>活化(从存储设备上进行恢复)

    Session钝化机制:session正常情况下,存储在服务器内存当中,服务器会对每一个在线用户创建一个session对象,当在线用户很多时,session内存的开销将是巨大的,会直接影响Web服务器的性能,Session的钝化机制就解决了这个问题。

    Session钝化机制本质:把服务器不经常使用的session对象暂时序列化到系统文件或者数据库内存当中,当使用的时候,反序列化到服务器内存当中,整个过程由服务器自动完成。

    Tomcat中有两种Session钝化管理器(Session钝化机制由SessionManager管理)

    第一种钝化管理器:StandardManger,有两种情况,第一种情况,当Tomcat服务器被关闭或重启时,Tomcat服务器会将当前内存中的Session对象钝化到服务器文件系统中,第二种情况是Web应用程序被重新加载时(重新覆盖web.xml,或者从新覆盖Spring.xml,或者在Tomcat服务器里点击重新加载按钮时),内存中的Session对象也会被钝化到服务器的文件系统中,钝化后的文件会保存到Tomcat目录下的work/Catalina/hostname/applicationname/SESSION.ser,当Tmocat服务器重新启动时,这个文件就会被加载,然后就会被删掉,也是默认的StandardManger。

    https://img1.sycdn.imooc.com//5d02378900012f4610760629.jpg

    第二种钝化管理器:Persistentmanager,它在Tomcat下的conf下的context.xml中进行配置,首先在钝化的基础上进行了扩张。前两种如上,第三种情况,可以配置主流内存的Session对象数目,将不长使用的Session对象保存到文件系统或数据库,当用时再重新加载,默认情况下,Tomcat提供了两个钝化驱动类,一个是FileStore另一个是JDBCStore。

    https://img1.sycdn.imooc.com//5d0240cc0001cbfa09040205.jpg

    https://img1.sycdn.imooc.com//5d02388700012f6e11190577.jpg

    Servlet规范提供了两个接口(这两个监听器不需要在web.xml中进行注册)

    HttpSessionBindingListener接口:提供了绑定方法valueBound()

    和解除绑定方法valueUnbound()。

    HttpSessionActivationListener:提供了钝化方法sessionWillPassivate()和活化方法sessionDidActivate()。

    创建的这个类不是监听器,而是一个普通javaBean,因为这个状态指的是session当中的对象,是对象的状态,而不是监听器的状态,当前端页面把这个对象存入session中,就会触发相应(添加和移除)事件。

    https://img1.sycdn.imooc.com//5d023c150001da3211050505.jpgHttpSessionActivationListener接口:如果想实现钝化和活化,一定要实现序列化接口Serializable



    查看全部
  • WEB监听器
    查看全部
    1 采集 收起 来源:概述

    2015-04-06

  • @统计在线用户及人数——(中)
    @MyHttpSessionListener.java
    @WebListener
    public class MyHttpSessionListener implements HttpSessionListener {

    private int userNumber = 0;

    @Override
    public void sessionCreated(HttpSessionEvent arg0) {
    userNumber++;
    arg0.getSession().getServletContext().setAttribute("userNumber", userNumber);
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent arg0) {
    userNumber--;
    arg0.getSession().getServletContext().setAttribute("userNumber", userNumber);

    ArrayList<User> userList = null;//在线用户List

    userList = (ArrayList<User>)arg0.getSession().getServletContext().getAttribute("userList");

    if(SessionUtil.getUserBySessionId(userList, arg0.getSession().getId())!=null){
    userList.remove(SessionUtil.getUserBySessionId(userList, arg0.getSession().getId()));
    }
    }
    }

    查看全部
  • 解释一下为什么这里不用去创建一个监听器类而是直接在普通的JavaBean类中实现接口吧: 前面两类作用范围都是相对于整个页面,比如session的就是相对整个页面的session会话,request就是整个页面的所有request请求 而这类作用范围是某个对象,所以要监听哪个对象就让哪个对象实现接口就行了
    查看全部
  • 使用注解 @WebListener 就不要在web.xml中进行配置
    查看全部
  • Web监听器的用途: 1,统计在线人数和在线用户。 2,系统启动时加载初始化信息。 3,统计网站访问量。 4,跟Spring结合。
    查看全部
  • 统计在线人数 1.在ServletContext(application)中设置一个Attribute(int)记录在线人数 2.用HttpSessionListener的实现类监听Session创建和销毁事件,Session创建更新在线人数+1,Session销毁更新在线人数-1 (注意在会话结束后Session仍驻留服务器内存一段时间) 记录在线用户的详细信息 1.在ServletContext(application)中设置一个Attribute(List<User>)记录在线用户信息 2.要获取用户信息需要request对象,而HttpSessionListener的实现类不能获取,因此需要使用ServletRequestListener的实现类,同时用户下线仍需要通过Session销毁判断,因此也需要使用HttpSessionListener的实现类 3.一个session对应多个request,通过sessionId(记录在User中)来识别一个用户的多个request 4.新增在线用户:有新的request创建时,且sessionId和已有用户不同,表示新增了在线用户,将该用户对象加入到List<User>并更新到ServletContext(application) 5.在线用户下线:当session销毁时,将通过sessionId将对应用户移除并更新到ServletContext(application)
    查看全部
  • 慕粉4303026 思路很清晰了,因为理解了监听器就是一个事件---动作模型,所以对于这个例子的代码的逻辑也能够有一个非常清晰的理解,我来分析一下这个例子。 第一:统计在线用户人数,是利用了httpSessionListener这个监听器来完成,当服务器生成一个session对象时,触发了时间,然后专区监听器执行相应的初始化方法,这里的初始化方法,是number++,当然为了方便在jsp页面中显示,这个number要保存到全局变量中,也就是application的(getServletContext())的setAttribute()中。 接下来分析第二个例子,就是保存用户的一些信息。请看下一条评论 时间: 2017-05-10 2
    查看全部
  • 继承于ServletContextListener // application对象创建、销毁时 继承于HttpSessionListener // session对象创建、销毁时 继承于ServletRequstListener // Request对象创建、销毁时 继承于ServletContextAttributeListener // application对象属性增删改时 继承于HttpSessionAttributeListener // session对象属性增删改时 继承于ServletRequstAttributeListener // request对象属性增删改时
    查看全部
  • 监听器:是指专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当监视的对象发生变化时,立即采取相应的行动。 application:是上下文对象,由容器创建并初始化的。范围整个web应用,只会有一个存在,服务器关闭时销毁。 session:保存上下文的机制,针对每一个会话,放在服务器端通过sessionId区分的,浏览器和服务器关闭后,销毁。 request:当客户 发送请求时,容器创建对象,用来封装请求数据,同时会创建ServletResponse对象来封装响应数据。访问结束请求时销毁。 监听器是servlet定义的一种特殊类。监听域对象的创建销毁以及属性变化的事件。
    查看全部
    1 采集 收起 来源:概述

    2017-09-28

  • servlet规范 application:上下文对象,是由容器创建和初始化的,它的范围是整个的web应用,而且整个web应用中只会有一个 application对象存在,当web服务器关闭时,就会将application对象销毁 session:是一种保存上下文信息的机制,它是针对每个会话的,它是放在服务器端,通过SessionId区分的,在浏览器和服务器结束后,都会将session销毁 request对象:是当客户端发送请求时,容器就会创建一个ServletRequest对象,来进行封装请求数据,同时会创建一个servletResponse对象来进行封装相应数据,当结束封装请求之后,就会销毁该对象 WEB监听器,就是监听这3个对象的创建,销毁,和它们的属性发生的变化
    查看全部
    1 采集 收起 来源:概述

    2017-07-25

  • request.setAttribute("...","..."); // 是存储在request对象中的属性 request.getAttribute("..."); // get的只能是setAttribute设置的属性 request.getParameter("..."); // 获取的是http://请求中设置的param
    查看全部
  • 监听器总结续 二、Listenner的注册 Javaweb的这些特别的监听器注册比较简单,因为ServletRequest、HttpSession、ServletContext对象都是容器创建的,所以需要它们的监听器的话,只需要在应用的web-info的web.xml里配置即可: <listener> <listener-class>com.test.listener.MyHttpSessionAttributeListener</listener-class> <listener-class>com.test.listener.MyServletContextAttributeListener</listener-class> <!-- 多个实现相同的Listenner接口,在执行时是按web.xml注册出现的来决定。 --> </listener> 注意:感知型监听器HttpSessionBindingListener、HttpSessionActivationListener不需要注册。 三、应用场景: 由于ervletRequest、HttpSession、ServletContext对象都是容器创建的,什么时候创建,用户都不知道。通过实现这些对象的监听器后,就可以得知了。比如: 1>在ServletContextLintener监听器的contextInitialized方法中,进行应用级的资源初始化以便提高效率,在contextDestroyed方法中对应用级的资源进行释放。 2>又比如web应用中,会存在会话,通常的作法是将当前登录的用户存放在session会话中。那么如何统计在线人数话,如何显示出当前登录的用户呢。如何踢出某些已登录的用户呢。就可以通过HttpSessionAttributeListener监听器的attributeAdded方法,等等。 四、优先级顺序 监听器->过滤器->Servlet 五、在Servlet3.0下的使用 通过在类前添加注解@WebListener即可,不用在web.xml中配置,在servlet3.0中监听器没有顺序
    查看全部
    1 采集 收起 来源:监听器总结

    2018-03-22

  • A.按监听器的对象划分: 1、用户监听应用程序环境对象(ServletContext)的时间监听器 2、用于监听用户会话对象(HttpSession)的事件监听器 3、用于监听请求消息对象(ServletRequest)的事件监听器。 B.按事件划分: 1、监听三个域对象创建和销毁的事件监听器 ServletRequestListener有以下两个方法: void requestDestroyed(ServletRequestEvent sre) void requestInitialized(ServletRequestEvent sre) HttpSessionListener有以下两个方法: void sessionCreated(HttpSessionEvent se) void sessionDestroyed(HttpSessionEvent se) ServletContextListener有以下两个方法: void contextDestroyed(ServletContextEvent sce) void contextInitialized(ServletContextEvent sce) 2、监听域对象中属性的增加和删除的事件监听器 ServletContextAttributeListener HttpSessionAttributeListener ServletRequestAttributeListener 3、监听绑定到HttpSession域中的某个对象的状态的时间监听器 注意:这种监听器不需要注册。某个javabean实现这些接口后就可以监听何时被绑定、解绑或被激活或钝化(Servlet3.0下) HttpSessionBindingListener:实现该接口的类,能检测自己何时被Httpsession绑定和解绑 HttpSessionActivationListener:实现该接口的类(要求javabean必须是实现了Serializable接口的),能监测自己何时随着HttpSession一起激活和钝化
    查看全部
    1 采集 收起 来源:监听器总结

    2017-04-01

举报

0/150
提交
取消
课程须知
亲,要学习本门课程需要对JSP和Servlet有所了解呦。如未学习上述知识,可移步网站相关课程。
老师告诉你能学到什么?
通过对本课程的学习,可以掌握监听器的基础知识,深入了解监听器的处理机制和分类方式,并可以让自己更快的动手编写监听器的例子。

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!