本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用

内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系。

本人互联网技术爱好者,互联网技术发烧友

微博:伊直都在0221

QQ:951226918

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1.域对象中属性的变更的事件监听器( 三个很少被使用 )

  1)域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信息事件的监听器

  2)这三个监听器接口分别是  ServletContextAttributeListener  ,   HttpSessionAttributeListener   和  ServletRequestAttributeListener,这三个接口中都定义了三个方法来处理被监听对象中的属性的增加,删除和替换的事件,同一个事件在这三个接口中对应的方法名称完全相同,只是接受的参数类型不同

  3)当向被监听器对象中增加一个属性时,web容器就调用事件监听器的 attributeAdded 方法进行相应,这个方法接受一个事件类型的参数,监听器可以通过这个参数来获得正在增加属性的域对象和被保存到域中的属性对象

  4)各个域属性监听器中的完整语法定义为:

      public void attributeAdded(ServletContextAttributeEvent scae)

      public void attributeReplaced(HttpSessionBindingEvent hsbe)

      public void attributeRmoved(ServletRequestAttributeEvent srae)

  

以request 为例子做测试

TestAttribute.java

 package com.jason.listener;

 import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener;
import javax.servlet.ServletRequestListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent; /**
*
* @ClassName:TestAttribute
* @Description:TODO
* @author: jason_zhangz@163.com
* @date:2016年7月17日下午9:44:56
*
*
*/
public class TestAttribute implements ServletContextAttributeListener, ServletRequestAttributeListener
,HttpSessionAttributeListener{ @Override
public void attributeAdded(HttpSessionBindingEvent se) {
// TODO Auto-generated method stub } @Override
public void attributeRemoved(HttpSessionBindingEvent se) {
// TODO Auto-generated method stub } @Override
public void attributeReplaced(HttpSessionBindingEvent se) {
// TODO Auto-generated method stub } @Override
public void attributeAdded(ServletRequestAttributeEvent srae) {
// TODO Auto-generated method stub
System.out.println("向 request 中添加了一个 属性 ... ");
} @Override
public void attributeRemoved(ServletRequestAttributeEvent srae) {
// TODO Auto-generated method stub
System.out.println("从 request 中移除了一个属性 ... "); } @Override
public void attributeReplaced(ServletRequestAttributeEvent srae) {
// TODO Auto-generated method stub
System.out.println("从request 中置换了属性 ..."); } @Override
public void attributeAdded(ServletContextAttributeEvent scae) {
// TODO Auto-generated method stub } @Override
public void attributeRemoved(ServletContextAttributeEvent scae) {
// TODO Auto-generated method stub } @Override
public void attributeReplaced(ServletContextAttributeEvent scae) {
// TODO Auto-generated method stub } }

web.xml

 <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <!-- 配置listener --> <listener>
<listener-class>com.jason.listener.TestAttribute</listener-class>
</listener>
/web-app>

test-attribute-listener.jsp

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
request.setAttribute("name", "jason");
System.out.println("--------------------------------------------------");
request.setAttribute("name", "zhang");
System.out.println("--------------------------------------------------");
request.removeAttribute("name");
System.out.println("--------------------------------------------------");
%> </body>
</html>

2.感知 Session 绑定的事件监听器( 使用较少 )

 > 保存在 Session 域中的对象可以有多种状态:

  1)绑定到  Session 中;从 Session 域中解除绑定

  2)随 Session 对象持久化到一个存储设备中;随 Session 对象从一个存储设备中恢复

 >Servlet 规范中定义了两个特殊的监听器接口来帮助  JavaBean  对象了解自己在 Session 域中的这些状态:HttpSessionBindingListener接口  和  HttpSessionActivationListener接口 ,实现这两个接口的类不需要 web.xml 文件中进行注册

 2.1 HttpSessionBindingListener接口:监听实现了该接口的 Java 类的对象 绑定到 session 或从 session 中解除绑定事件

  ① 实现了HttpSessionBindingListener接口的 JavaBean 对象可以感知自己被绑定到 Session 中和从 Session 中删除的事件

   ② 当对象被绑定到 HttpSession 对象中时,web 服务器调用该对象的 void valueBound(HttpSessionBindingEvent event) 方法

   ③ 当对象从 HttpSession 对象中解除绑定时,web 服务器调用该对象的 void valueUnbound(HttpSessionBindingEvent event)方法

HttpSessionBindingListener.jsp

 <%@page import="com.jason.listener.user"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>HttpSessionBindingListener</h3>
<%
user usr = new user();
session.setAttribute("user", usr); System.out.println("---------------------"); session.removeAttribute("user");
%> </body>
</html>

user.java

 package com.jason.listener;

 import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener; public class user implements HttpSessionBindingListener { @Override
public void valueBound(HttpSessionBindingEvent event) {
// TODO Auto-generated method stub
System.out.println("绑定到session ");
} @Override
public void valueUnbound(HttpSessionBindingEvent event) {
// TODO Auto-generated method stub
System.out.println("从session 中解除绑定");
} }

  2.2 HttpSessionActivationListener接口(不常用)

    1)实现了HttpSessionBindingListener接口的 JavaBean 对象可以感知自己被活化和钝化的事件

     2)当绑定到 HttpSession 对象中的对象将要随 HttpSession 对象被钝化之前,web 服务器调用该对象的  void sessionWillPassivate(HttpSessionBindingEvent event) 方法

    3)当绑定到 HttpSession 对象中的对象将要随 HttpSession 对象被活化之后,web 服务器调用该对象的 void sessionDidActive(HttpSessionBindingEvent event)方法

[原创]java WEB学习笔记48:其他的Servlet 监听器:域对象中属性的变更的事件监听器 (3 个),感知 Session 绑定的事件监听器(2个)的更多相关文章

  1. [原创]java WEB学习笔记95:Hibernate 目录

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  2. [原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  3. [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  4. [原创]java WEB学习笔记11:HttpServlet(HttpServletRequest HttpServletRsponse) 以及关于 Servlet 小结

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  5. [原创]java WEB学习笔记55:Struts2学习之路---详解struts2 中 Action,如何访问web 资源,解耦方式(使用 ActionContext,实现 XxxAware 接口),耦合方式(通过ServletActionContext,通过实现 ServletRequestAware, ServletContextAware 等接口的方式)

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  6. [原创]java WEB学习笔记47:Servlet 监听器简介, ServletContext(Application 对象), HttpSession (Session 对象), HttpServletRequest (request 对象) 监听器,利用listener理解 三个对象的生命周期

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  7. [原创]java WEB学习笔记43:jstl 介绍,core库详解:表达式操作,流程控制,迭代操作,url操作

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  8. [原创]java WEB学习笔记15:域对象的属性操作(pageContext,request,session,application) 及 请求的重定向和转发

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  9. [原创]java WEB学习笔记61:Struts2学习之路--通用标签 property,uri,param,set,push,if-else,itertor,sort,date,a标签等

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

随机推荐

  1. JQ_浏览器窗口改变触发

    $(window).resize(function () { //当浏览器大小变化时 alert($(window).height()); //浏览器时下窗口可视区域高度 alert($(docume ...

  2. Notepad++列编辑模式

    先按住alt,选中列,再上下左右拖动编辑即可:再次点击左键即可取消.

  3. Sprint回顾大揭秘——“宝典”来了

    我始终记得当年我作为敏捷教练所做的第一次Sprint回顾,这一切都仿佛就发生在昨天.这家公司实行Scrum有好几年了,我自然而然地认为他们这群人是纪律严明并且成熟稳重的敏捷专家. 因此,当他们计划了一 ...

  4. 用康托展开实现全排列(STL、itertools)

    康拓展开: $X=a_n*(n-1)!+a_{n-1}*(n-2)!+\ldots +a_2*1!+a_1*0!$ X=an*(n-1)!+an-1*(n-2)!+...+ai*(i-1)!+...+ ...

  5. Emag eht htiw Em Pleh(imitate)

    Emag eht htiw Em Pleh Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2901   Accepted:  ...

  6. 我的工具箱之Securecrt6.5.0

    Securecrt是一款支持SSH的终端仿真软件,一般用于连接Linux/Unix系统.感觉这个比Putty强些. 下载地址是:http://pan.baidu.com/s/1gednNhh

  7. 洛谷P2731 骑马修栅栏 Riding the Fences

    P2731 骑马修栅栏 Riding the Fences• o 119通过o 468提交• 题目提供者该用户不存在• 标签USACO• 难度普及+/提高 提交 讨论 题解 最新讨论 • 数据有问题题 ...

  8. java中enum类型的使用

    java 枚举类型enum 的使用 最近跟同事讨论问题的时候,突然同事提到我们为什么java 中定义的常量值不采用enmu 枚举类型,而采用public final static 类型来定义呢?以前我 ...

  9. eclipse配置tomcat添加外部项目

    在eclipse中配置tomcat,添加外部项目. 添加外部项目 然后直接启动服务器,服务器里面不能添加项目.

  10. 各种反演细节梳理&amp;模板

    炫酷反演魔术课件byVFK stO FDF Orz(证明全有%%%) 莫比乌斯反演 \(F(n)=\sum\limits_{d|n}f(d)\Rightarrow f(n)=\sum\limits_{ ...