属性监听器:ServletRequestAtttributeListener/HttpSeessionAttributeListener/ServletContextAttributeListener

这里可以直接拿HttpSeessionAttributeListener来示例

首先来写一个实现他的接口类:

package comgqx.b_attr;

import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;

public class MySesssionAttribute implements HttpSessionAttributeListener{

	//属性添加
	@Override
	public void attributeAdded(HttpSessionBindingEvent event) {
		// TODO Auto-generated method stub
		//首先要获取session
		HttpSession session=event.getSession();
		//获取添加的属性
		Object object=session.getAttribute("name");
		System.out.println("添加的属性是:"+object);
	}
	//属性移除
	@Override
	public void attributeRemoved(HttpSessionBindingEvent event) {
		// TODO Auto-generated method stub
		System.out.println("属性移除了!");
	}
	//属性被替换
	@Override
	public void attributeReplaced(HttpSessionBindingEvent event) {
		// TODO Auto-generated method stub
		//获取session对象
		HttpSession session=event.getSession();
		//		获取替换之前的值
		Object oldObject=event.getValue();
		System.out.println("旧值:"+oldObject);
		//获取新值
		Object object=session.getAttribute("name");
		System.out.println("新的sessiom值是:"+object);
	}

}

 来写一个jsp页面,写一句简单的话

session.setAttribute("name", "gqxing");

配置到服务器上去(web.xml)

<!-- 属性监听器Session -->
  <listener>
  	<listener-class>comgqx.b_attr.MySesssionAttribute</listener-class>
  </listener>

访问相关的jsp页面可以看到如下结果:

然后我们在jsp去修改代码如下:

    session.setAttribute("name", "gqxing");
    	//属性移除
    	session.removeAttribute("name");

清除缓存后,继续去访问,发现先关的语句被执行了。如下:

继续去修改jsp页面,如下,来些事替换session中的相关值

 <% session.setAttribute("name", "gqxing");
    	//属性移除
    	//session.removeAttribute("name");
    	//属性替换
    	session.setAttribute("name", "test");
    %>

清除缓存,继续访问,就会看到替换的语句,这里要注意的是,我们不经在HttpSessionAttributeListener的实现类的attributeReplaced()方法中得到新的值,还可以通过getValue()方法得到被替换的旧值,如下:


HttpSessionBindingListener:监听对象绑定、解除绑定到session上的事件

步骤:

  对象实现此接口,在把对象绑定、解除绑定带session上就会自动触发监听代码。

示例代码:

package comgqx.b_attr;

import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;

public class MySesssionAttribute implements HttpSessionAttributeListener{

	//属性添加
	@Override
	public void attributeAdded(HttpSessionBindingEvent event) {
		// TODO Auto-generated method stub
		//首先要获取session
		HttpSession session=event.getSession();
		//获取添加的属性
		Object object=session.getAttribute("name");
		System.out.println("添加的属性是:"+object);
	}
	//属性移除
	@Override
	public void attributeRemoved(HttpSessionBindingEvent event) {
		// TODO Auto-generated method stub
		System.out.println("属性移除了!");
	}
	//属性被替换
	@Override
	public void attributeReplaced(HttpSessionBindingEvent event) {
		// TODO Auto-generated method stub
		//获取session对象
		HttpSession session=event.getSession();
		//		获取替换之前的值
		Object oldObject=event.getValue();
		System.out.println("旧值:"+oldObject);
		//获取新值
		Object object=session.getAttribute("name");
		System.out.println("新的sessiom值是:"+object);
	}

}

在jsp页面写入如下代码:

        session.setAttribute("admin", new Admin());
    	session.removeAttribute("admin");    

然后去访问,会看到控制台的看到如下的结果(有时候没有清楚缓存,在测试这个的时候会发现一些语句会重复,如若是第一次访问是去创建Admin对象,没有加入清除对象的语句,第二次加入清除对象的语句,再去访问,会看到两句“Admin对象已经从session中移除了!”的语句)

应用举例:可以作为上线提醒,比如qq,当一个好友上线的时候,系统会提示你的好友“****”上线了

HttpSessionBindingListener和前面的声明周期属性的监听器的区别是:

  不用再web.xml上配置,因为监听的对象是自己创建的对象,不是服务器创建的对象。

  

Javaweb监听器(2)的更多相关文章

  1. JavaWeb监听器详解

    1 JavaWeb监听器概述 在JavaWeb被监听的事件源为:ServletContext.HttpSession.ServletRequest,即三大域对象.有监听域对象"创建" ...

  2. 十四、JavaWeb监听器

    JavaWeb监听器 三大组件: l Servlet l Listener l Filter Listener:监听器 初次相见:AWT 二次相见:SAX 监听器: l 它是一个接口,内容由我们来实现 ...

  3. Javaweb学习笔记——(二十)——————Javaweb监听器、国际化

    Javaweb监听器     三大组件         *Servlet         *Listener         *Filter Listener:监听器         1.初次相见:A ...

  4. Day20 javaWeb监听器和国际化

    day20 JavaWeb监听器 三大组件: Servlet Listener Filter   Listener:监听器 初次相见:AWT 二次相见:SAX   监听器: 它是一个接口,内容由我们来 ...

  5. javaweb监听器实现与原理

    参考:https://www.cnblogs.com/lxp503238/p/6678688.html https://blog.csdn.net/CPOHUI/article/details/888 ...

  6. JavaWEB监听器

    1.基本概念 JavaWeb中的监听器是Servlet规范中定义的一种特殊类,它用于监听web应用程序中的ServletContext, HttpSession和 ServletRequest等域对象 ...

  7. JavaWeb—监听器Listener

    1.简介 Listener是Servlet的监听器,Servlet 监听器用于监听一些重要事件的发生,监听器对象在事情发生前.发生后可以做一些必要的处理. JavaWeb里面的listener是通过观 ...

  8. JAVAWEB监听器(二)

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

  9. Java-Web监听器

    在WEB端实现监听实质: 实现一系列的监听接口(实现相应的接口,覆写各接口中相应的方法,在相应的事件触发的时候会执行自己的监听器中的覆写的方法,在各个方法中完成自己想要的操作,从而实现了监听) 监听- ...

随机推荐

  1. javascript实现继承的一种方式

    function extend(Child, Parent) { var F = function(){}; F.prototype = Parent.prototype; Child.prototy ...

  2. Darwin Streaming Server 6.0.3安装、订制、插件或模块

    How to setup Darwin Streaming Server 6.0.3 on 32 or 64 bit Linux platforms, add custom functionality ...

  3. Mac下配置PHP+Apache+phpMyAdmin+MySql远程链接

    最近的项目是微信公众号平台的开发,微信官方给出的Demo是PHP的,发现大部分的学习资料也是PHP,那好吧,放弃Java,来段儿PHP吧 下面说说Mac下搭建PHP环境 数据库:MySQL-5.6.2 ...

  4. Android SDK Manager 更新代理配置 ,蛋碎了

    启动 Android SDK Manager ,打开主界面,依次选择「Tools」.「Options...」,弹出『Android SDK Manager - Settings』窗口: 在『Andro ...

  5. MyBatis 如何接收参数

    MyBatis的mapper接口不需要自己实现,框架会自动帮我们实现,到时候直接调用就可以了.定义的mapper接口中的方法可以有多个参数吗?答案是肯定.在Ibatis时代是自己通过代码实现如何调用x ...

  6. ECshop 二次开发模板教程3

    <p>商品列表</p> <table width="70%" border="1"> <tr> <td&g ...

  7. 为SQL表添加全文索引范例

    --范例: --为HR_Job中的JobTitle,JobDes创建全文索引 execute sp_fulltext_catalog 'boli188', 'create' --创建全文目录,boli ...

  8. HDU 5430 Reflect

    题意:问在一个圆形的镜面里,从任意一点发出一个光源,经n次反射回到起点的情况数是多少. 解法:直接贴题解吧…… 求1至N+1中与N+1互质的个数,即欧拉函数. 代码: #include<stdi ...

  9. HDU 5745 La Vie en rose

    La Vie en rose Time Limit: 14000/7000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  10. 《Python 学习手册4th》 第十三章 while和for循环

    ''' 时间: 9月5日 - 9月30日 要求: 1. 书本内容总结归纳,整理在博客园笔记上传 2. 完成所有课后习题 注:“#” 后加的是备注内容 (每天看42页内容,可以保证月底看完此书) “重点 ...