初识Servlet监听器

来源:互联网 发布:表单数据 编辑:程序博客网 时间:2024/06/16 06:02

Servlet监听器简介
Servlet监听器的作用是监听Web容器的有效事件,由容器管理。利用Listener接口监听在容器中的某个执行程序,并更具应用程序的需求做出适当的响应。


监听Servlet上下文
Servlet上下文监听可以监听ServletContext对象的创建、删除和添加属性,以及删除和修改操作,该监听器需要用到下面两个接口。

  • ServletContextListener接口:监听ServletContext的创建和删除。
class myServletContextListener implements ServletContextListener{    //通知正在收听的对象应用程序已经被加载及初始化    @Override    public void contextInitialized(ServletContextEvent servletContextEvent) {    }    //通知正在收听的对象应用程序已经被载出,即关闭    @Override    public void contextDestroyed(ServletContextEvent servletContextEvent) {    }}
  • ServletAttributeListener接口:监听ServletContext属性的修改、删除和增加
class myServletAttributeListener implements ServletContextAttributeListener{    //若有对象加入Application范围,通知正在收听的对象    @Override    public void attributeAdded(ServletContextAttributeEvent servletContextAttributeEvent) {    }    //若有对象从Application范围移除,通知正在收听的对象    @Override    public void attributeRemoved(ServletContextAttributeEvent servletContextAttributeEvent) {    }    //若有对象在Application范围内的一个对象被另一个对象替换,通知正在收听的对象    @Override    public void attributeReplaced(ServletContextAttributeEvent servletContextAttributeEvent) {    }}class myServletAttributeListener2 implements ServletRequestAttributeListener{    @Override    public void attributeAdded(ServletRequestAttributeEvent servletRequestAttributeEvent) {    }    @Override    public void attributeRemoved(ServletRequestAttributeEvent servletRequestAttributeEvent) {    }    @Override    public void attributeReplaced(ServletRequestAttributeEvent servletRequestAttributeEvent) {    }}

监听HTTP会话

  • HttpSessionListener接口:监听HTTP会话的创建及销毁
class myHttpSessionListener implements HttpSessionListener{    //通知正在收听的对象,session已经被加载及初始化    @Override    public void sessionCreated(HttpSessionEvent httpSessionEvent) {    }    //通知正在收听的对象,session被载出    @Override    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {    }}
  • HttpSessionActivationListener接口:监听HTTP会话active和passivate情况
class myHttpSessionActivationListener implements HttpSessionActivationListener{    //通知正在收听的对象,其session状态变为有效状态    @Override    public void sessionWillPassivate(HttpSessionEvent httpSessionEvent) {    }    //通知正在收听的对象,其session状态变为无效状态    @Override    public void sessionDidActivate(HttpSessionEvent httpSessionEvent) {    }}
  • HttpSessionBindingListener接口:监听HTTP会话中对象的绑定信息,它是唯一不需要再web.xml中设置Listener的。
class myHttpBindingListener implements HttpSessionBindingListener{    //当有对象加入session的范围时,会被自动调用    @Override    public void valueBound(HttpSessionBindingEvent httpSessionBindingEvent) {    }    //当有对象从session的范围移除时,会被自动取消调用    @Override    public void valueUnbound(HttpSessionBindingEvent httpSessionBindingEvent) {    }}
  • HttpSessionAttributeListener接口:监听HTTP会话中属性的设置请求。
class myHttpSessionAttributeListener implements HttpSessionAttributeListener {    //若有对象加入Session范围,通知正在收听的对象    @Override    public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {    }    //若有对象从Session范围移除,通知正在收听的对象    @Override    public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {    }    //若有对象在Session范围内的一个对象被另一个对象替换,通知正在收听的对象    @Override    public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {    }}

监听Servlet请求

  • ServletRequestListener接口:
class myServletRequestListener implements ServletRequestListener{    //通知正在收听的对象,ServletRequest已经被加载及初始化    @Override    public void requestDestroyed(ServletRequestEvent servletRequestEvent) {    }    //通知正在收听的对象,ServletRequest已经被载出,即关闭    @Override    public void requestInitialized(ServletRequestEvent servletRequestEvent) {    }}
  • ServletRequestAttributeListener接口:
class myServletRequestAttributeListener implements ServletRequestAttributeListener{    //若有对象加入Request范围,通知正在收听的对象    @Override    public void attributeAdded(ServletRequestAttributeEvent servletRequestAttributeEvent) {    }    //若有对象从Request范围移除,通知正在收听的对象    @Override    public void attributeRemoved(ServletRequestAttributeEvent servletRequestAttributeEvent) {    }    //若有对象在Request范围内的一个对象被另一个对象替换,通知正在收听的对象    @Override    public void attributeReplaced(ServletRequestAttributeEvent servletRequestAttributeEvent) {    }}

下面使用一个小例子:使用监听器查看在线用户
UserInfoList类:

package com.java.model;import java.util.ArrayList;/** * Created with IntelliJ IDEA. * Created by YEN on 2016/7/10 and 22:05. */public class UserInfoList {    private static UserInfoList userInfoList=new UserInfoList();    private ArrayList arrayList=null;    public UserInfoList(){        this.arrayList=new ArrayList();    }    public static UserInfoList getInstance(){        return userInfoList;    }    //增加用户    public boolean addUserInfo(String username){        if(username!=null){            this.arrayList.add(username);            return true;        }else return false;    }    //获取用户列表    public ArrayList getUserList(){        return arrayList;    }    //移除用户    public void removeUserInfo(String username){        if(username!=null){            arrayList.remove(username);        }    }}

UserInfoTrace类:

package com.java.model;import javax.servlet.http.HttpSessionBindingEvent;import javax.servlet.http.HttpSessionBindingListener;/** * Created with IntelliJ IDEA. * Created by YEN on 2016/7/10 and 22:12. */public class UserInfoTrace implements HttpSessionBindingListener{    private String username;    private UserInfoList container=UserInfoList.getInstance();    public UserInfoTrace(){        this.username="";    }    public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    @Override    public void valueBound(HttpSessionBindingEvent httpSessionBindingEvent) {        System.out.println("上线................"+this.username);    }    @Override    public void valueUnbound(HttpSessionBindingEvent httpSessionBindingEvent) {        System.out.println("下线................"+this.username);        if(username!=""){            container.removeUserInfo(username);        }    }}

login.jsp页面

<%--  Created by IntelliJ IDEA.  User: YEN  Date: 2016/7/9  Time: 16:29  To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>Title</title>    <script>        function checkForm() {            if(document.getElementById("username").value==null || document.getElementById("username").value==""){                  alert("用户名不能为空!");                  return false;              }            if(document.getElementById("password").value==null || document.getElementById("password").value==""){                alert("密码不能为空!");                return false;            }            return true;        }    </script></head><body><form name="form1" action="<%=request.getContextPath()%>/showUserInfo.jsp" method="get" onsubmit="return checkForm()">    username:<input type="text" name="username" id="username">   <br>    password:<input type="password" name="password" id="password">   <br>    <input type="submit" value="提交"></form></body></html>

showUserInfo.jsp页面

<%--  Created by IntelliJ IDEA.  User: YEN  Date: 2016/7/10  Time: 22:16  To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><%@page import="com.java.model.UserInfoList" language="java" %><%@page import="com.java.model.UserInfoTrace" language="java" %><%@ page import="java.util.ArrayList" %><html><head>    <title>UserInfoPage</title></head><body><%    UserInfoList userInfoList=UserInfoList.getInstance();  //获得UserInfoList类的对象    UserInfoTrace userInfoTrace=new UserInfoTrace();       //创建UserInfoTrace类的对象    request.setCharacterEncoding("UTF-8");    String username=request.getParameter("username");    userInfoTrace.setUsername(username);    session.setAttribute("list",userInfoTrace);    userInfoList.addUserInfo(username);    session.setMaxInactiveInterval(30);                   //session过期时间为30s%><textarea rows="8" cols="20">    <%        ArrayList arrayList=userInfoList.getUserList();        if(arrayList!=null && arrayList.size()>0 ){            for (int i = 0; i < arrayList.size(); i++) {                out.print(arrayList.get(i));            }        }    %></textarea></body></html>

运行结果:
一:在login.jsp页面输入信息
这里写图片描述
二:点击登陆按钮
这里写图片描述
这里写图片描述

三:在登陆一个用户
这里写图片描述

0 0
原创粉丝点击