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

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

难度初级
时长 1小时30分
学习人数
综合评分9.70
269人评价 查看评价
9.8 内容实用
9.7 简洁易懂
9.6 逻辑清晰
  • @监听器分类: 1.按监听器的对象划分: a 用户监听应用程序环境对象(ServletContext)的事件监听器 b 用于监听用户会话对象(HttpSession)的事件监听器 c 用于监听请求消息对象(ServletRequest)的事件监听器 2.按事件划分 a 监听域对象自身的创建和销毁的事件监听器 b 监听域对象中的属性的增加和删除的事件监听器 c 监听绑定到HttpSession域中的某个对象的状态的事件监听器。对ServletContext的监听:ServletContextListener<br> 有两个方法:初始化方法和销毁方法<br> 用途:定时器 加载全局属性

     @FirstListener.java public class FirstListener implements ServletContextListener { public void contextDestroyed(ServletContextEvent arg0) { System.out.println("contextDestroyed"); } public void contextInitialized(ServletContextEvent arg0) { String user = arg0.getServletContext().getInitParameter("user"); System.out.println("contextInitialized:" + user); } } @web.xml <context-param> <param-name>user</param-name> <param-value>admin</param-value> </context-param>

    查看全部
  • 有多个监听器的时候,按web.xml中注册顺序启动 监听器>过滤器>servlet的启动顺序

    查看全部
  • @FirstListener.java public class FirstListener implements ServletContextListener { public void contextDestroyed(ServletContextEvent arg0) { System.out.println("contextDestroyed"); } public void contextInitialized(ServletContextEvent arg0) { System.out.println("contextInitialized"); } } @web.xml <listener>        <listener-class>com.imooc.listener.FirstListener</listener-class>    </listener> @输出: //Tomcat启动 contextInitialized //Tomcat关闭 contextDestroyed

    查看全部
  • Web监听器由Servlet规范提供的,可以监听客户端的请求以及服务端的操作,即监听ServletContext、HttpSession、ServletRequest对象.(这三个对象称为域对象).监听事件分为这三个对象的创建、销毁事件以及这三个对象属性的变化事件.与监听绑定到HttpSession域中的某个对象的状态的时间,分别要实现不同的监听器接口. ServletContext-->对应jsp的application对象. HttpSession-->对应jsp的session对象. ServletRequest-->对应jsp的request对象.

     application:是上下文对象,由容器创建并初始化的。范围整个web应用,只会有一个存在,服务器关闭时销毁。    session:保存上下文的机制,针对每一个会话,放在服务器端通过sessionId区分的,浏览器和服务器关闭后,销毁。    request:当客户 发送请求时,容器创建对象,用来封装请求数据,同时会创建ServletResponse对象来封装响应数据。访问结束请求时销毁。    监听器是servlet定义的一种特殊类。监听域对象的创建销毁以及属性变化的事件。

    查看全部
    0 采集 收起 来源:概述

    2018-04-26

  • spacer.gif

    查看全部
  • https://img1.sycdn.imooc.com//5adfd93e000171c810460535.jpg

    查看全部
  • 监听器总结:
    一、监听器分类
    在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 采集 收起 来源:监听器总结

    2018-04-23

  • @统计在线用户及人数——(下)
    @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有。

    查看全部
  • 2、监听绑定到HttpSession域中的某个对象的状态的事件监听器<br>
    钝化:1,由Session.StandardManager:Tocat服务器关闭或Web应用程序被重新加载时把当前内存中的Session序列化到文件或数据库中。<br>
    2,由Session.Persistentmanager:除了1,中的两种,第3种可以将不常用的Session序列化到文件或数据库中。<br>
    (默认Tocat两种钝化驱动:org.apache.Catalina.FileStore和org.apache.Catalina.JDBCStore)<br>
    活化:服务器启动是把钝化的Seesion反序列化到服务器上
    前提:先绑定session<br>  绑定就是session.setAttribute()把属性保存到Session对象当中,解除绑定:session.getAttribute()
    (1)HttpSession【Binding】Listener //绑定、解除绑定<br>
    a) 创建一个javabean类,实现接口【HttpSessionBindingListener,】无需到Web.xml注册<br>
    b) 2个方法<br>
    1) void valueBound 绑定 JSP: request.getsession.setattribute("ab",new javabean全名);<br>
    2) void valueUnbound 解除绑定 JSP: request.getsession().removeAttribute("ab")<br>
    (2)HttpSessionActivationListener //钝化(持久化到存储设备时)、活化(从存储设备恢复)<br>
    a) 在已经创建的javabean类,实现接口HttpSessionActivationListener无需到Web.xml注册<br>
    b) 2个方法<br>
    1) void sessionWillPassivate 钝化 JSP: 无需写,前提javabean进行绑定了<br>
    2) void sessionDidActivate 活化 JSP:request.getSession.getAttribute("ab");<br>
    需要【活化必须】再继承一个接口:【Serializable】

    public void valueBound(HttpSessionBindingEvent arg0) {
    System.out.println("valueBound:" + arg0.getName());
    }

    public void valueUnbound(HttpSessionBindingEvent arg0) {
    System.out.println("valueUnbound:" + arg0.getName());
    }

    // 活化
    public void sessionDidActivate(HttpSessionEvent se) {
    System.out.println("sessionDidActivate:" + se.getSource());
    }

    // 钝化
    public void sessionWillPassivate(HttpSessionEvent se) {
    System.out.println("sessionWillPassivate:" + se.getSource());
    }
    要想实现钝化和活化,除了需实现HttpSessionActivationListener接口还需要实现Serializable接口。

    查看全部
  • 还好
    查看全部
    0 采集 收起 来源:概述

    2018-04-22

  • servet 3.0 下监听器的用法

    查看全部
  • 1

    查看全部
  • 2

    查看全部

举报

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

微信扫码,参与3人拼团

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

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