好记性不如烂笔头42-javaWeb监听对象域属性变化(6)

JavaWeb中对象域的属性的变更的事件监听器,可以用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信息事件的监听器。

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

1、 attributeAdded 方法

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

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

1 public void attributeAdded(ServletContextAttributeEvent scae)

2 public void attributeReplaced(HttpSessionBindingEvent hsbe)

3 public void attributeRmoved(ServletRequestAttributeEvent srae)

2、 attributeRemoved 方法

当删除被监听对象中的一个属性时,web容器调用事件监听器的attributeRemoved方法进行响应

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

1 public void attributeRemoved(ServletContextAttributeEvent scae)

2 public void attributeRemoved (HttpSessionBindingEvent hsbe)

3 public void attributeRemoved (ServletRequestAttributeEvent srae)

3、 attributeReplaced 方法

当监听器的域对象中的某个属性被替换时,web容器调用事件监听器的attributeReplaced方法进行响应

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

1 public void attributeReplaced(ServletContextAttributeEvent scae)

2 public void attributeReplaced (HttpSessionBindingEvent hsbe)

3 public void attributeReplaced (ServletRequestAttributeEvent srae)

4、 编写监听ServletContext域对象的属性变化的源代码

实现ServletContextAttributeListener接口,监听对象域属性的变化


package com.servlet.listener;
import java.text.MessageFormat;

import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
/**
 * 简单实现ServletContextAttributeListener接口,监听对象域属性的变化
 * @author 范芳铭
 */
public class EasyServletContextAttributeListener implements ServletContextAttributeListener{
    @Override
    public void attributeAdded(ServletContextAttributeEvent scab) {
        String str =MessageFormat.format(
                "ServletContext域对象中添加了属性:{0},属性值是:{1}"
                ,scab.getName()
                ,scab.getValue());
        System.out.println(str);
    }

    @Override
    public void attributeRemoved(ServletContextAttributeEvent scab) {
        String str =MessageFormat.format(
                "ServletContext域对象中删除属性:{0},属性值是:{1}"
                ,scab.getName()
                ,scab.getValue());
        System.out.println(str);
    }

    @Override
    public void attributeReplaced(ServletContextAttributeEvent scab) {
        String str =MessageFormat.format(
                "ServletContext域对象中替换了属性:{0}的值,原始值为{1}"
                ,scab.getName()
                ,scab.getValue());
        System.out.println(str);
    }
}

5、 修改web.xml

<listener>
      <description>EasyServletContextAttributeListener监听器</description>
      <listener-class>com.servlet.listener.EasyServletContextAttributeListener</listener-class>
  </listener>
  ```

6、  测试用的index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML>
<html>
<head>
<title>My JSP ‘index.jsp‘ starting page</title>
</head>

<body>
    HttpSession创建后的Id是:${pageContext.session.id}
    <br>
    <%
        //往application域对象中添加属性
        application.setAttribute("name", "ffm");
        //替换application域对象中name属性的值
        application.setAttribute("name", "123");
        //移除application域对象中name属性
        application.removeAttribute("name");
    %>
</body>
</html>

7、 运行结果

启动WEB中间件,从URL访问:

http://127.0.0.1:8080/webStudy/index.jsp

控制台输结果:

ServletContext域对象中添加了属性:name,属性值是:ffm

ServletContext域对象中替换了属性:name的值,原始值为ffm

ServletContext域对象中删除属性:name,属性值是:123

8、 其他

因为这三个对象域的实现方式类似,因此其他两个具体的实现也可以完全参考本源代码;

时间: 2024-10-02 18:22:17

好记性不如烂笔头42-javaWeb监听对象域属性变化(6)的相关文章

Proxy监听对象的数据变化,处理绑定数据很有用

Proxy可以监听对象身上发生了什么事情,并在这些事情发生后执行一些相应的操作.一下子让我们对一个对象有了很强的追踪能力,同时在数据绑定方面也很有用处. var peo = { name: 'zhangsan', salary: 27 }; //interceptor 拦截 var interceptor = { set: function (recObj, key, value) { console.log(key, 'is changed to', value); //name is cha

好记性不如烂笔头40-javaWeb应用中HttpSession域的监听(4)

JavaWeb中的监听器是Servlet规范中定义的一种特殊类,它用于监听web应用程序中的ServletContext, HttpSession和 ServletRequest等域对象的创建与销毁事件,以及监听这些域对象中的属性发生修改的事件. HttpSessionListener 接口用于监听HttpSession对象的创建和销毁 创建一个Session时, sessionCreated (HttpSessionEvent se): 销毁一个Session时, sessionDestroy

好记性不如烂笔头41-javaWeb应用中ServletRequest域的监听(5)

JavaWeb中的监听器是Servlet规范中定义的一种特殊类,它用于监听web应用程序中的ServletContext, HttpSession和 ServletRequest等域对象的创建与销毁事件,以及监听这些域对象中的属性发生修改的事件. ServletRequestListener接口用于监听ServletRequest 对象的创建和销毁 Request对象被创建时,requestInitialized(ServletRequestEvent sre)方法将会被调用 Request对象

开篇记(好记性不如烂笔头)

入园两年零三个月,我居然没有一点东西记载下来实在是不应该. 爷爷曾经告诉过我,好记性不如烂笔头.他告诉了我最鲜明的例子.爷爷的脑子一直很好用,记性也是比常人好上一些,当然这也直接导致了爷爷的性格很是高傲.爷爷年轻的时候喜欢舞文弄墨什么的,所以呢每逢人家红白喜事的时候都会去人家及里面瞅上一眼,看看人家送上的喜联或者挽联.有此爱好的还有我的一个另一个宋爷爷,他们经常约好一起的.爷爷老是自信于强悍的记忆能力,每次都是记在脑子中,而宋爷爷却每次都将那些很好的对联记载一个小本子上面.如今爷爷年纪越来越大,

好记性不如烂笔头89-spring3学习(10)-spring3常用schema(持续整理)

Spring3有很多的schema,这些schema对应很多不同的功能.使用这些常用的schema,能让我们避免重复发明轮子,提高我们的开发效率. 我以为这是一个很常见的信息,到网上随便整理下就能完成,可能用的关键词不对,怎么找也没有找到相对比较全面的. 正所谓,好记性不如烂笔头,自己动手把自己能收集到的整理下来,以后需要找资料也能方便点. spring-beans-3.0.xsd 用途:spring3最主要的schema,用于配置bean 命名空间: http://www.springfram

好记性不如烂笔头48-java拦截器-JDK自带动态代理和CGLIB效率比较(3)

Java中自带的动态代理的类必须要实现一个接口,而且据说使用反射的效率也并不是很高.于是CGLIB就诞生了. 使用CGLib实现动态代理,完全不受代理类必须实现接口的限制,而且CGLib底层采用ASM字节码生成框架,使用字节码技术生成代理类,理论上比使用Java反射效率要高. 那么我们测试下,这个运行的效率如何. 1. 测试的准备情况 准备1:好记性不如烂笔头46-java拦截器-彻底理解动态代理的概念(1) http://blog.csdn.net/ffm83/article/details/

好记性不如烂笔头39-javaWeb应用中的监听器(1)

监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动. JavaWeb中的监听器是Servlet规范中定义的一种特殊类,它用于监听web应用程序中的ServletContext, HttpSession和 ServletRequest等域对象的创建与销毁事件,以及监听这些域对象中的属性发生修改的事件. 1. Servlet监听器的分类 在Servlet规范中定义了多种类型的监听器,它们用于监听的事件源为ServletCont

动态数据绑定之监听对象变化

---恢复内容开始--- 动态数据绑定是MVVM框架中最基础的的一个功能,简单描述就是:将数据和视图进行绑定,当数据发生改变时,视图随之改变,更深层次一点,数据绑定包括单向数据绑定和双向数据绑定. 本文从数据绑定中的问题出发,一步一步的来实现这个功能. 本文的所有的源代码地址: 点击此处查看源代码 问题一 给定任意一个对象,如何监听其属性的读取与变化?也就是说,如何知道程序访问了对象的哪个属性,又改变了哪个属性? 举个例子: let app = new Observer({ name: 'liu

AngularJS - Watch 监听对象

<body> <div ng-app="myApp"> <div ng-controller="firstController"> <p>价格:<input type="text" ng-model="iphone.money"></p> <p>个数:<input type="text" ng-model="