初识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
- 初识Servlet监听器
- Servlet监听器
- servlet监听器
- Servlet监听器
- Servlet监听器
- servlet 监听器
- servlet监听器
- Servlet监听器
- servlet监听器
- Servlet监听器
- Servlet监听器
- Servlet监听器
- Servlet监听器
- Servlet监听器
- Servlet监听器
- servlet监听器
- servlet监听器
- servlet监听器
- Bmob的后台问题
- Matlab常用的集合运算
- Django 创建第一个项目
- Mobile Service
- Microsoft 开源人工智能系统 Malmo
- 初识Servlet监听器
- 平衡二叉树
- 简单排序:冒泡排序、选择排序、插入排序
- 二进制中1的个数(最精简代码)
- Mysql server zip版安装
- java关键字static
- Android 那些你所不知道的Bitmap对象详解
- 计蒜客 联想专卖店大促销
- struts2 面试题