JavaWeb监听器的使用(一)监听上下文和会话信息
1.监听上下文的类
package com.examp.ch9;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public final class MyServletContextListener
implements ServletContextListener, ServletContextAttributeListener
{
private ServletContext context = null;
public void contextDestroyed(ServletContextEvent sce)
{
logout("调用contextDestroyed()方法-->ServletContext被销毁");
this.context = null;
}
public void contextInitialized(ServletContextEvent sce)
{
this.context = sce.getServletContext();
logout("调用contextInitialized()方法-->ServletContext初始化");
}
public void attributeAdded(ServletContextAttributeEvent scae)
{
logout("调用attributeAdded('" + scae.getName() + "', '" + scae.getValue() +
"')方法-->增加了一个属性");
}
public void attributeRemoved(ServletContextAttributeEvent scae)
{
logout("调用attributeRemoved('" + scae.getName() + "', '" + scae.getValue() +
"')方法-->删除了该属性");
}
public void attributeReplaced(ServletContextAttributeEvent scae)
{
logout("调用attributeReplaced('" + scae.getName() + "', '" + scae.getValue() +
"')方法-->更改了该属性");
}
private void logout(String message)
{
PrintWriter out = null;
try
{
out = new PrintWriter(new FileOutputStream("E:\\contextLog.txt", true));
out.println(new Date().toLocaleString() + message);
out.close();
}
catch (Exception e)
{
out.close();
e.printStackTrace();
}
}
}
2.监听Http会话的类
package com.examp.ch9;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
/*
* HttpSessionListener Http会话的创建、销毁
* HttpSessionAttributeListener 监听会话中属性的改变
*/
public final class MySessionListener implements HttpSessionAttributeListener, HttpSessionListener
{
ServletContext context;//创建一个context对象
int users = 1;//初始化用户数量为1
/*
* 在session中添加对象时触发此操作 笼统的说就是调用setAttribute这个方法时候会触发的
*
*/
public void attributeAdded(HttpSessionBindingEvent event)
{
logout("attributeAdded('" + event.getSession().getId() + "', '" +
event.getName() + "', '" + event.getValue() + "')");
}
/*
* 修改、删除session中添加对象时触发此操作 笼统的说就是调用 removeAttribute这个方法时候会触发的
*
*/
public void attributeRemoved(HttpSessionBindingEvent event)
{
logout("attributeRemoved('" + event.getSession().getId() + "', '" +
event.getName() + "', '" + event.getValue() + "')");
}
/*
* 在Session属性被重新设置时
*
*/
public void attributeReplaced(HttpSessionBindingEvent se)
{
logout("attributeReplaced('" + se.getSession().getId() + ",'" + se.getName() + "','" + se.getValue() + "')");
}
/*
* 新建一个会话时候触发也可以说是客户端第一次和服务器交互时候触发
*/
public void sessionCreated(HttpSessionEvent event)
{
System.out.println(users);
this.users += 1;//获取ID 和用户个数
logout("sessionCreated('" + event.getSession().getId() + "'),目前有" + this.users + "个用户");
this.context.setAttribute("users", new Integer(this.users));//将用户数存入context
}
/*
* 销毁会话的时候 一般来说只有某个按钮触发进行销毁 或者配置定时销毁
*
*/
public void sessionDestroyed(HttpSessionEvent event)
{
this.users --;
logout("sessionDestroyed('" + event.getSession().getId() + "'),目前有" + this.users + "个用户");//获取ID 和用户个数
this.context.setAttribute("users", new Integer(this.users));////将用户数存入context
}
public void contextDestroyed(ServletContextEvent sce)
{
logout("contextDestroyed()-->ServletContext被销毁");
this.context = null;
}
public void contextInitialized(ServletContextEvent sce)
{
this.context = sce.getServletContext();
logout("contextInitialized()-->ServletContext初始化了");
}
private void logout(String message)
{
PrintWriter out = null;
try
{ //创建输入流 写入文件
out = new PrintWriter(new FileOutputStream("E:\\sessionLog.txt", true));
out.println(new Date().toLocaleString() + "-->" + message);
out.close();
}
catch (Exception e)
{
out.close();
e.printStackTrace();
}
}
}
3.前端JSP文件
context_test.jsp
<%@ page contentType="text/html;charset=UTF-8"%>
<%
out.println("add attribute");
getServletContext().setAttribute("userName","Smith");
out.println("replace attribute");
getServletContext().setAttribute("userName","Kate");
out.println("remove attribute");
getServletContext().removeAttribute("userName");
%>
session_test.jsp
<%@ page contentType="text/html;charset=UTF-8"%>
执行了以下的操作:
session.setAttribute("userName","Smith")<br>
<% session.setAttribute("userName","Smith");%><!--添加属性-->
session.setAttribute("userName","Kate")<br>
<% session.setAttribute("userName","Kate");%><!--更改属性-->
session.removeAttribute("userName","Kate")<br>
<% session.removeAttribute("userName");%><!--删除属性-->
目前有<%=getServletContext().getAttribute("users")%>个用户。<br>
after session.invalidate()<br>
<% session.invalidate();%><!--销毁该session-->
目前有<%=getServletContext().getAttribute("users")%>个用户。
JavaWeb监听器的使用(一)监听上下文和会话信息的更多相关文章
- SpringBoot2.0 监听器ApplicationListener的使用-监听ApplicationReadyEvent事件
参考:http://www.shareniu.com/article/73.htm 一.需求是想将我的写一个方法能在项目启动后就运行,之前使用了redis的消息监听器,感觉可以照着监听器这个思路做,于 ...
- JavaWEB监听器
1.基本概念 JavaWeb中的监听器是Servlet规范中定义的一种特殊类,它用于监听web应用程序中的ServletContext, HttpSession和 ServletRequest等域对象 ...
- 监听域对象创建和销毁的Listener
1.什么是Servlet监听器? 先来看看什么是监听器.监听器是专门用于对其它对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时立即采取相应的行动.Servlet监听器是S ...
- javaweb监听器实现与原理
参考:https://www.cnblogs.com/lxp503238/p/6678688.html https://blog.csdn.net/CPOHUI/article/details/888 ...
- 【监听文件 多线程】使用java--WatchService监听文件 开启多线程copy文件
有一个小需求: 在PC跟前没有人的时候,迅雷下载文件 至PC磁盘上,并且自动移动文件到U盘上,小主只要在走的时候取走U盘即可. 基于这个需求,有了下面这段代码:[JDK 1.8] package c ...
- javascript事件监听与事件委托
事件监听与事件委托 在js中,常用到element.addEventListener()来进行事件的监听.但是当页面中存在大量需要绑定事件的元素时,这种方式可能会带来性能影响.此时,我们可以用事件 ...
- JAVAWEB监听器(二)
监听域对象中属性的变更的监听器 域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信息事 ...
- ALERT日志中常见监听相关报错之中的一个:ORA-609错误的排查
參考MOS文档有: Troubleshooting Guide ORA-609 : Opiodr aborting process unknown ospid (文档 ID 1121357.1) Al ...
- Java-Web监听器
在WEB端实现监听实质: 实现一系列的监听接口(实现相应的接口,覆写各接口中相应的方法,在相应的事件触发的时候会执行自己的监听器中的覆写的方法,在各个方法中完成自己想要的操作,从而实现了监听) 监听- ...
随机推荐
- git的学习
学习怎么使用git这个分布式版本控制系统 学习资源 廖雪峰的git教程 Git的官方文档 Git命令列表 Git参考手册 中文 https://www.dropbox.com/s/sp2eupl8tp ...
- codevs 1576 最长上升子序列的线段树优化
题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...
- servlet过滤器使用
servlet的过滤器夹在用户和servlet之间,可以截获并预处理或者打断{用户到servlet的请求或servlet到用户的响应},但本身并不能处理和响应用户请求. filter类必须实现Filt ...
- Gearman使用示例
最近的一个旧项目重构过程中,使用到了gearman这个开源项目,简单来讲,这是一个类似MQ的异步系统,一边派发任务,一边处理任务(有类似MQ中的消息发送方与接收方),目前支持java,php等多种语言 ...
- [LeetCode] Maximum Size Subarray Sum Equals k 最大子数组之和为k
Given an array nums and a target value k, find the maximum length of a subarray that sums to k. If t ...
- [LeetCode] Add and Search Word - Data structure design 添加和查找单词-数据结构设计
Design a data structure that supports the following two operations: void addWord(word) bool search(w ...
- 基于C/S架构的3D对战网络游戏C++框架_【不定期更新通知】
由于笔者最近有比赛项目要赶,这个基于C/S架构的3D对战网络游戏C++框架也遇到了一点瓶颈需要点时间沉淀,所以近一段时间不能保证每天更新了,会保持不定期更新.同时近期笔者也会多分享一些已经做过学过的C ...
- Gulp 入门
1. 安装 Node 环境 参考 http://www.cnblogs.com/zichi/p/4627728.html,注意一起安装 npm 工具,并把路径保存到环境变量中(安装过程中会有提醒) 安 ...
- Todo list and 学习心得
1. 理论实践要区分起来学习,结合起来运用. 2. 内事不决问百度外事不决问谷歌 3. 一个人走的快,一群人走得远或者更快 2016-09-01 23:27:58 九月目标:对程序从编译到执行的整个 ...
- Wpf usercontrol dispose
窗口关闭时组件"析构": public UserControl() { InitializeComponent(); ...