java基础篇---Servlet监听器
在写此篇前,看了一下园友写的,感觉其基础知识归纳的十分全面,我在此就不累赘的写了,链接地址(http://www.cnblogs.com/sherryueda/p/4273169.html),
我就写一下关于监听器的具体应用:
功能是负责监听WEB的各种操作,当相关的事件触发之后将产生事件,并对此事件进行处理,在WEB中可以对application、session、request三种操作进行监听。
对application监听:
package com.oumyye.监听器;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class ServletContextListenerDemo implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) { // 上下文初始化时触发
System.out.println("** 容器初始化 --> "
+ event.getServletContext().getContextPath());
}
public void contextDestroyed(ServletContextEvent event) { // 上下文销毁时触发
System.out.println("** 容器销毁 --> "
+ event.getServletContext().getContextPath());
}
}
web.xml配置
<listener>
<listener-class>
com.oumyye.监听器.ServletContextListenerDemo
</listener-class>
</listener>
对session监听
- 当需要对创建或销毁session的操作进行监听的时候,可以实现javax.servlet.http.HttpSessionListener接口,此接口定义的方法如下:public void sessionCreated(HttpSessionEvent se),public void sessionDestroyed(HttpSessionEvent se)
- 当session创建或销毁后,将产生HttpSessionEvent事件,此事件定义的操作如下:public HttpSession getSession()
对session监听
package com.oumyye.监听器;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class HttpSessionListenerDemo implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent event) { // 创建session触发
System.out.println("** SESSION创建,SESSION ID = " + event.getSession().getId());
}
public void sessionDestroyed(HttpSessionEvent event) { // 销毁session触发
System.out.println("** SESSION销毁,SESSION ID = " + event.getSession().getId());
}
}
web.xml配置
<listener>
<listener-class>
<listener>
<listener-class>
com.oumyye.监听器.HttpSessionListenerDemo
</listener-class>
</listener>
session销毁的操作
session属性监听:HttpSessionAttributeListener接口
package com.oumyye.监听器;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
public class HttpSessionAttributeListenerDemo implements
HttpSessionAttributeListener {
public void attributeAdded(HttpSessionBindingEvent event) {// 属性增加时调用
System.out.println(event.getSession().getId() + ",增加属性 --> 属性名称:"
+ event.getName() + ",属性内容:" + event.getValue());
}
public void attributeRemoved(HttpSessionBindingEvent event) {// 属性删除时调用
System.out.println(event.getSession().getId() + ",删除属性 --> 属性名称:"
+ event.getName() + ",属性内容:" + event.getValue());
}
public void attributeReplaced(HttpSessionBindingEvent event) {// 属性替换时调用
System.out.println(event.getSession().getId() + ",替换属性 --> 属性名称:"
+ event.getName() + ",属性内容:" + event.getValue());
}
}
web.xml配置
<listener>
<listener-class>
com.oumyye.监听器.HttpSessionAttributeListenerDemo
</listener-class>
</listener>
session属性监听:HttpSessionBindingListener接口
public Object getValue()
package com.oumyye.监听器;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
public class HttpSessionAttributeListenerDemo implements
HttpSessionAttributeListener {
public void attributeAdded(HttpSessionBindingEvent event) {// 属性增加时调用
System.out.println(event.getSession().getId() + ",增加属性 --> 属性名称:"
+ event.getName() + ",属性内容:" + event.getValue());
}
public void attributeRemoved(HttpSessionBindingEvent event) {// 属性删除时调用
System.out.println(event.getSession().getId() + ",删除属性 --> 属性名称:"
+ event.getName() + ",属性内容:" + event.getValue());
}
public void attributeReplaced(HttpSessionBindingEvent event) {// 属性替换时调用
System.out.println(event.getSession().getId() + ",替换属性 --> 属性名称:"
+ event.getName() + ",属性内容:" + event.getValue());
}
}
web.xml同上
session属性监听:HttpSessionBindingListener接口
对request监听
请求状态监听:ServletRequestListener接口
package com.oumyye.监听器;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
public class ServletRequestListenerDemo implements ServletRequestListener {
public void requestInitialized(ServletRequestEvent event) {
System.out.println("** request初始化。http://"
+ event.getServletRequest().getRemoteAddr()
+ event.getServletContext().getContextPath());
}
public void requestDestroyed(ServletRequestEvent event) {
System.out.println("** request销毁。http://"
+ event.getServletRequest().getRemoteAddr()
+ event.getServletContext().getContextPath());
}
}
web.xml配置
<listener>
<listener-class>
com.oumyye.监听器.ServletRequestListenerDemo
</listener-class>
</listener>
request属性监听:ServletRequestAttributeListener接口
package com.oumyye.监听器;
import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener;
public class ServletRequestAttributeListenerDemo implements
ServletRequestAttributeListener {
public void attributeAdded(ServletRequestAttributeEvent event) {
System.out.println("** 增加request属性 --> 属性名称:" + event.getName()
+ ",属性内容:" + event.getValue());
}
public void attributeRemoved(ServletRequestAttributeEvent event) {
System.out.println("** 删除request属性 --> 属性名称:" + event.getName()
+ ",属性内容:" + event.getValue());
}
public void attributeReplaced(ServletRequestAttributeEvent event) {
System.out.println("** 替换request属性 --> 属性名称:" + event.getName()
+ ",属性内容:" + event.getValue());
}
}
web.xml配置
<listener>
<listener-class>
com.oumyye.监听器.ServletRequestAttributeListenerDemo
</listener-class>
</listener>
监听器实例 —— 在线人员统计
package com.oumyye.监听器; import java.util.*; public class LoginList {
private static LoginList user = new LoginList();
private Vector vector = null;
//private调用构造函数,
//防止被外界类调用产生新的instance对象
public LoginList() {
this.vector = new Vector();
}
//外界使用的instance对象
public static LoginList getInstance() {
return user;
}
//用户登录
public boolean addLoginList(String user) {
if (user != null) {
this.vector.add(user);
return true;
} else {
return false;
}
}
//获取用户列表
public Vector getList() {
return vector;
}
//删除用户
public void removeLoginList(String user) {
if (user != null) {
vector.removeElement(user);
}
}
}
LoginList.java
创建LoginNote.java类,实现HttpSessionBindingListener类
package com.oumyye.监听器;
import javax.servlet.http.HttpSessionBindingEvent; public class LoginNote implements javax.servlet.http.HttpSessionBindingListener {
private String user;
private LoginList container = LoginList.getInstance();
public LoginNote() {
user = "";
}
public void setUser(String user) {
this.user = user;
}
public String getUser() {
return this.user;
}
public void valueBound(HttpSessionBindingEvent arg0) {
System.out.println(this.user+"该用户己经上线" );
}
public void valueUnbound(HttpSessionBindingEvent arg0) {
System.out.println(this.user+"该用户己经下线");
if (user != "") {
container.removeLoginList(user);
}
}
}
LoginNote.java
页面文件
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>监听查看在线用户</title>
</head>
<script language="javascript">
function checkEmpty(form){
for(i=0;i<form.length;i++){
if(form.elements[i].value==""){
alert("表单信息不能为空");
return false;
}
}
}
</script>
<link href="css/style.css" rel="stylesheet" type="text/css">
<body>
<div align="center">
<table width="400" height="150" border="0" cellpadding="0" cellspacing="0" bgcolor="lightblue">
<Tr><td> </td></Tr>
<tr>
<td align="center">
<form name="form" method="post" action="LoginList.jsp" onSubmit="return checkEmpty(form)">
<input type="text" name="user"><br><br>
<input type="submit" name="Submit" value="登录上线">
</form>
</td>
</tr>
</table>
</div>
</body>
</html>
index.jsp
<%@ page contentType="text/html; charset=UTF-8" language="java" import="java.sql.*" errorPage="" %>
<%@ page import="java.util.*"%>
<%@ page import="com.oumyye.监听器.*"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>监听查看在线用户</title>
<link href="css/style.css" rel="stylesheet" type="text/css">
</head>
<%
LoginList list=LoginList.getInstance();
LoginNote ut=new LoginNote();
String name=request.getParameter("user");
ut.setUser(name);
session.setAttribute("list",ut);
list.addLoginList(ut.getUser());
session.setMaxInactiveInterval(10);
%>
<body>
<div align="center"> <table width="400" height="150" border="0" cellpadding="0" cellspacing="0" bgcolor="lightblue">
<tr align="center"><td>用户在线列表</td></tr>
<tr>
<td align="center"><br> <textarea rows="5" cols="22">
<%
Vector vector=list.getList();
if(vector!=null&&vector.size()>0){
for(int i=0;i<vector.size();i++){
out.println(vector.elementAt(i)+"己登录在线");
}
}
%>
</textarea><br><br>
<a href="loginOut.jsp">返回</a>
</td>
</tr>
</table>
</div>
</body>
</html>
LoginList.jsp
<%@ page contentType="text/html; charset=utf-8" language="java" errorPage="" %>
<%
session.invalidate();
out.println("<script>parent.location.href='index.jsp';</script>");
%>
loginOut.jsp
java基础篇---Servlet监听器的更多相关文章
- java基础篇---Servlet过滤器
Servlet过滤器从字面上的字意理解为景观一层次的过滤处理才达到使用的要求,而其实Servlet过滤器就是服务器与客户端请求与响应的中间层组件,在实际项目开发中Servlet过滤器主要用于对浏览器的 ...
- JAVA基础篇—Servlet小结
一.get请求和post请求的区别: 1.get请求是通过url传递参数,post请求是通过请求体传递参数的 2.get请求最多允许传递255个字符,对长度有限制,所以数据比较大的时候我们使用post ...
- java基础篇---HTTP协议
java基础篇---HTTP协议 HTTP协议一直是自己的薄弱点,也没抽太多时间去看这方面的内容,今天兴致来了就在网上搜了下关于http协议,发现有园友写了一篇非常好的博文,博文地址:(http: ...
- java基础篇---I/O技术
java基础篇---I/O技术 对于任何程序设计语言而言,输入输出(I/O)系统都是比较复杂的而且还是比较核心的.在java.io.包中提供了相关的API. java中流的概念划分 流的方向: 输 ...
- 金三银四跳槽季,BAT美团滴滴java面试大纲(带答案版)之一:Java基础篇
Java基础篇: 题记:本系列文章,会尽量模拟面试现场对话情景, 用口语而非书面语 ,采用问答形式来展现.另外每一个问题都附上“延伸”,这部分内容是帮助小伙伴们更深的理解一些底层细节的补充,在面试中可 ...
- java基础篇---I/O技术(三)
接上一篇java基础篇---I/O技术(二) Java对象的序列化和反序列化 什么叫对象的序列化和反序列化 要想完成对象的输入或输出,还必须依靠对象输出流(ObjectOutputStream)和对象 ...
- Java基础篇 - 强引用、弱引用、软引用和虚引用
Java基础篇 - 强引用.弱引用.软引用和虚引用 原创零壹技术栈 最后发布于2018-09-09 08:58:21 阅读数 4936 收藏展开前言Java执行GC判断对象是否存活有两种方式其中一种是 ...
- java基础篇 之 构造器内部的多态行为
java基础篇 之 构造器内部的多态行为 我们来看下下面这段代码: public class Main { public static void main(String[] args) { new ...
- 小白—职场之Java基础篇
java基础篇 java基础 目录 1.java是一种什么语言,jdk,jre,jvm三者的区别 2.java 1.5之后的三大版本 3.java跨平台及其原理 4.java 语言的特点 5.什么是字 ...
随机推荐
- solr 5.3.1安装配置
1.下载Solr5.3.1 http://mirror.bit.edu.cn/apache/lucene/solr/5.3.1/ wget http://mirror.bit.edu.cn/apach ...
- Eclipse中创建Maven多模块工程
1.先创建父项目 在Eclipse里面New -> Maven Project: 在弹出界面中选择“Create a simple project” 这样,我们就按常规模版创建了一个Maven工 ...
- 【C语言】练习1-22
题目来源:<The C programming language>中的习题 练习1-22:编写一个程序,把较长的输入行‘折’成短一些的两行或者多行,折行的位置在输入行的第n列之前的最后 ...
- 在C语言中除法运算为什么没有小数部分?
原文链接: http://wenda.tianya.cn/question/4e096f010317a93d 除法运算符" / ",如果是两个整数相除结果为整数如果需要保留小数时 ...
- linux卸载自带jdk
centos 6.5系统 java -version: rpm -qa | grep jdk rpm -qa | grep gcj: 使用: yum -y remove java-1.5.0-gcj- ...
- proguard的简单配置说明
#需要转换的jar文件路径-injars 'D:\fs-np.jar'#转换后的jar文件名称-outjars 'D:\fs-np-sec.jar' #关联的第三方jar-libraryjars 'C ...
- SQL SERVER数据库维护与重建索引
第一步:查看是否需要维护,查看扫描密度/Scan Density是否为100% declare @table_id int set @table_id=object_id('表名') dbcc sho ...
- Docker容器进入的4种方式(转)
在使用Docker创建了容器之后,大家比较关心的就是如何进入该容器了,其实进入Docker容器有好几多种方式,这里我们就讲一下常用的几种进入Docker容器的方法. 进入Docker容器比较常见的几种 ...
- 使用mysqltools配置读写分离环境
mysqltools 目前自带了cat的的自动化安装功能 一.环境规划: 主机名 ip地址 角色 mtls17 10.186.19.17 master mtls19 10.186.19.19 slav ...
- 请教Mysql如何删除 不包含 某些字符的记录
删除包含指定字符的记录 delete from `表` where `字段` like '%指定字符1%' or like '%指定字符2%' or like '%指定字符3%' 删除不包含指定字符的 ...