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

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

难度初级
时长 1小时30分
学习人数
综合评分9.70
269人评价 查看评价
9.8 内容实用
9.7 简洁易懂
9.6 逻辑清晰
  • 监听器总结续 二、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中监听器没有顺序
    查看全部
    0 采集 收起 来源:监听器总结

    2019-04-01

  • 监听器总结:
    一、监听器分类
    在Servlet规范中定义了多种类型的监听器,它们用于监听的事件源分别为SerlvetConext,HttpSession和ServletRequest这三个域对象。
    Servlet规范针对这三个对象上的操作,又把这多种类型的监听器划分为三种类型:
    1>监听三个域对象创建和销毁的事件监听器
    2>监听域对象中属性的增加和删除的事件监听器
    3>监听绑定到HttpSession域中的某个对象的状态的时间监听器。
    a、如三个域对象的创建与销毁方法签名:
    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)
    b、三个类型对象域中属性增、删、改的监听器(3个)
    ServletContextAttributeListener,
    HttpSessionAttributeListener,
    ServletRequestAttributeListener
    c、感知型监听器(2个):监听自己何时被帮到session上,何时解绑;何时被钝化,何时被活化(序列化到某个存储设置中)。
    注意:这种监听器不需要注册。某个javabean实现这些接口后就可以监听何时被绑定、解绑或被激活或钝化。
    HttpSessionBindingListener:实现该接口的类,能检测自己何时被Httpsession绑定和解绑
    HttpSessionActivationListener:实现该接口的类(要求些javabean必须是实现了Serializable接口的),能监测自己何时随着HttpSession一起激活和钝化。

    查看全部
    0 采集 收起 来源:监听器总结

    2019-04-01

  • @统计在线用户及人数——(下)
    @MyServletRequestListener.java
    @WebListener
    public class MyServletRequestListener implements ServletRequestListener {

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

    @Override
    public void requestDestroyed(ServletRequestEvent arg0) {

    }

    @Override
    public void requestInitialized(ServletRequestEvent arg0) {

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

    if(userList==null)
    userList = new ArrayList<User>();

    HttpServletRequest request = (HttpServletRequest) arg0.getServletRequest();
    String sessionIdString = request.getSession().getId();

    if(SessionUtil.getUserBySessionId(userList,sessionIdString)==null){
    User user = new User();
    user.setSessionIdString(sessionIdString);
    user.setFirstTimeString(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
    user.setIpString(request.getRemoteAddr());
    userList.add(user);
    }
    arg0.getServletContext().setAttribute("userList", userList);
    }
    }
    查看全部
  • @统计在线用户及人数——(中)
    @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()));
    }
    }
    }
    查看全部
  • @统计在线用户及人数——(上)
    @index.jsp
    当前在线用户人数:${userNumber}
    <hr>
    <%
    ArrayList<User> userList = (ArrayList<User>) request.getServletContext().getAttribute("userList");
    if (userList != null) {
    for (int i = 0; i < userList.size(); i++) {
    User user = userList.get(i);
    %>
    IP:<%=user.getIpString()%>
    <hr>
    FirstTime:<%=user.getFirstTimeString()%>
    <hr>
    SessionId:<%=user.getSessionIdString()%>
    <hr>
    <%
    }
    }
    %>

    @SessionUtil.java
    public class SessionUtil {

    public static Object getUserBySessionId(ArrayList<User> userList, String sessionIdString) {
    for (int i = 0; i < userList.size(); i++) {
    User user = userList.get(i);
    if (user.getSessionIdString().equals(sessionIdString)) {
    return user;
    }
    }
    return null;
    }
    }

    @User.java
    public class User {
    private String sessionIdString;
    private String ipString;
    private String firstTimeString;
    //setter、getter...
    }

    Ps:session是没有获取IP地址方法,但request有。
    查看全部
  • @统计在线用户及人数 1.统计在线人数:使用ServletSessionListener监听器的初始化和销毁实现增加和删除 2.在线用户信息:使用ServletRequestListener监听器的初始化实现获取用户信息: HttpServletRequest对象.getSession().getId();//获取session的ID HttpServletRequest对象..getRemoteAddr();//获取用户ip地址 3.保存:保存于全局的getSession.getServletContext().getAttribute("","")里面 4.${userNumber}是EL表达式,可以获取userNumber的值 EL表达式:取出某一范围中名称为username的变量,由于没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。 如果找到username,则直接回传,如果没有找到时,则回传null。

    查看全部
  • @Listener---Servlet3.0使用前提

    1、使用Servlet3.0新标准Jar包;
    2、JDK版本必须1.6以上;
    3、编译器的编译级别为6.0;
    4、在web.xml文件中,使用3.0规范;
    5、使用支持servlet3.0特性的web容器,比如tomcat7.0


    查看全部
  • 监听器的分类-按监听事件划分: 1、监听器绑定到HttpSession域中的某个对象的状态事件监听器; 2、HttpSession中的对象状态: (1)绑定:通过setAttribute(); (2)解除绑定:removeAttribute(); (3)钝化:将session对象序列化到存储设备上 (4)活化:将session对象从存储设备上进行恢复 3、session钝化机制: (1)把服务器中不常使用的session对象暂时的序列化到系统文件或是数据库中,当使用时反序列化到内存中,整个过程有服务器自动完成。 (2)session的钝化机制由SessionManager管理 4、实现绑定和解除绑定,创建一个【普通的javabean】绑定和解除绑定需实现【HttpSessionBindingListener】接口; 实现钝化和活化,需实现HttpSessionActivationListener接口和Serializable接口

    查看全部
  • 监听域对象中的属性的增加和删除的事件监听器 ServletContext、HttpSession、ServletRequest对象的中属性的增加和删除有单独的事件监听器 包括 attributeAdded() attributeRemoved() attributeReplaced() @init.jsp <%   request.setAttribute("requestName", "requestValue");   request.getSession().setAttribute("sessionName", "sessionValue");   request.getSession().getServletContext().setAttribute("applicationName", "applicationValue");   //request.setAttribute("requestName", "requestValue");//只有这种办法可以调用request的replace。 //request.removeAttribute("requestName");//可以调用request的remove。   %>   @destory.jsp <%   request.removeAttribute("requestName");   request.getSession().removeAttribute("sessionName");   request.getSession().getServletContext().removeAttribute("applicationName");   %>     request.getAttribute的值获得是从request.setAttribute的值,不能获取类似www.immoc.com/username=imooc的参数值; request.getParameter是请求的参数值,如www.immoc.com/username=imooc。 request——request request.getSession()——session request.getSession().getServletContext()——application

    查看全部
  • @Listener---ServletRequest的事件监听器

    创建和销毁:
    一个ServletRequest可以注册多个ServletRequestListener接口。

    有两个事件处理方法:
    requestInitialized方法:
        public void requestInitialized(ServletRequestEvent sre)
        request创建时调用,获取ServletRequest对象和传递的参数。
    requestDestroyed方法:
        ublic void requestDestroyed(ServletRequestEvent sre)
        request销毁时调用

    主要用途:
        读取参数
        记录访问历史

    request监听的是用户的每一个访问请求。


    查看全部
  • HttpSession的创建和销毁 实现HttpSessionListener接口用于监听它的创建和销毁事件 一个HttpSession可以注册多个HttpSessionListener接口, 一个web应用中可以有多个HttpSession对象 有两个事件处理方法: sessionCreated方法: public void sessionCreated(HttpSessionEvent se) session创建时调用 sessionDestroyed方法: public void sessionDestroyed(HttpSessionEvent se) session销毁时调用 HttpSessionListener的主要用途: 统计在线人数 记录访问日志,记录访问时间、访问的ip /** * 销毁session * 1.关闭服务器 * 2.关闭浏览器 * 3.不关闭浏览器,session超时 */ 不关闭浏览器,session超时 可以在web.xml配置session超时的时间 <session-config> <session-timeout>0</session-timeout> </session-config> 0:session没有超时的限制 1:session超时1分钟后销毁,但是并不是准确的一分钟

    查看全部
  • 监听器分类: 1.按监听器的对象划分: a 用户监听应用程序环境对象(ServletContext)的时间监听器 b 用于监听用户会话对象(HttpSession)的事件监听器 c 用于监听请求消息对象(ServletRequest)的事件监听器。 2.按事件划分 a 监听域对象自身的创建和销毁的事件监听器 b 监听域对象中的属性的增加和删除的事件监听器 c 监听绑定到HttpSession域中的某个对象的状态的事件监听器 ServletContext的创建和销毁 实现ServletContextListener接口用于监听它的创建和销毁事件 一个项目中可以有多个ServletContextListener,但是只有一个ServletContext对象 有两个事件处理方法: (1)contextInitialized方法: public void contextInitialized( ServletContextEvent sce ) ServletContext创建时调用 参数 ServletContextEvent 事件对象,可以获取ServletContext对象以及一些初始化参数 例如: 1.获取ServletContext对象: ServletContext sc = sce.getServletContext(); 获取初始化参数:sc.getInitParmeter("参数名称"); 初始化参数在web.xml中配置: <context-param> <param-name>initParam</param-name> <param-value>imooc</param-value> </context-param> 2.设置ServletContext属性:sc.setAttribute("name",obj); 然后在其它地方获取getAttribute("name") (2)contextDestroyed方法: public void contextDestroyed( ServletContextEvent sce ) ServletContext销毁时调用 主要用于数据库链接关闭时释放一些资源,以免过度的占用。

    查看全部
  • 监听器的启动顺序: 监听器按照注册顺序从上到下执行 优先级: 监听器>过滤器>Servlet

    查看全部
  • 实现了ServletContextListener接口的类,即创建了一个监听事件源为ServletContext的监听器,当服务器启动时,便会自动创建一个application对象,此时会调用此监听器的初始化方法.可以通过初始化方法的参数来对application对象做出一些操作.当服务器关闭,application对象销毁时,也会调用监听器的销毁方法,也可以通过参数来作出一些操作.初始化方法和销毁方法中的参数是ServletContextEvent的对象,因此可以通过参数来获取到application对象来对其操作. 实现了ServletRequestListener接口的类,即创建了一个监听事件源为ServletRequest的监听器,并且当用户发出请求时,此时会调用此监听器的初始化方法,可以通过初始化方法的参数作出一些操作,当request销毁时,也会调用监听器的销毁方法,也可以通过参数作出相应的操作.初始化方法和销毁方法中的参数是ServletRequestEvent的对象,因此可以通过参数来获取到request对象来对其操作. 实现了HttpSessionListener接口的类,即创建了一个监听事件源为HttpSession的监听器,并且当session创建时,此时会调用此监听器的初始化方法.可以通过初始化方法的参数作出一些操作,当session销毁时,也会调用监听器的销毁方法.也可以通过初始化方法的参数作出一些操作,初始化方法和销毁方法中的参数是HttpSessionEvent的对象,因此可以通过参数来获取到session对象来对其操作. 实现了ServletContextListener、ServletRequestListener、HttpSessionListener接口的监听器是监听域对象自身的创建与销毁的事件. ServletContext接口实现了ServletContextListener接口. ServletRequest接口实现了ServletRequestListener接口. HttpSession接口实现了HttpSessionListener接口.

    查看全部
  • Web监听器的用途: 1,统计在线人数和在线用户。 2,系统启动时加载初始化信息。 3,统计网站访问量。 4,跟Spring结合。

    查看全部

举报

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

微信扫码,参与3人拼团

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

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