JavaWeb学习笔记——监听器详解

知识概要:

1.监听器下例子举例

2.Servlet规范中的监听器

3.

4.

1. 监听器下例子举例说明:

/*

Frame:事件源。发生事件的对象

WindowListener:监听器。(对应着事件源的某些内容)

WindowEvent:事件对象。封装事件源

*/

public class FrameDemo {

public static void main(String[] args) {

Frame f = new Frame("我的小窗");

f.setSize(400, 300);

f.addWindowListener(new WindowAdapter() {//注册具体的监听器

public void windowClosing(WindowEvent e) {

Frame f1 = (Frame) e.getSource();

f1.dispose();

}

});

f.setVisible(true);

}

}

例子二:

Student

package com.itheima.base;

public class Student {

private String name;

private StudentListener listener;

public Student(String name){

this.name = name;

}

public void eat(){

if(listener!=null){

listener.preEat(new StudentEvent(this));

}

System.out.println(name+":开吃");

}

public void study(){

if(listener!=null){

listener.preStudy(new StudentEvent(this));

}

System.out.println(name+":开始学习");

}

public String getName() {

return name;

}

public void addStudentListener(StudentListener listener){

this.listener =  listener;

}

}

StudentListener

StudentEvent

package com.itheima.base;

public interface StudentListener {

void preEat(StudentEvent e);

void preStudy(StudentEvent e);

}

package com.itheima.base;

public class StudentEvent {

private Object source;

public StudentEvent(Object source){

this.source = source;

}

public Object getSource(){

return source;

}

}

studentDemo

public class StudentDemo {

public static void main(String[] args) {

Student s = new Student("张三");

s.addStudentListener(new StudentListener() {

public void preStudy(StudentEvent e) {

Student s1 = (Student)e.getSource();

System.out.println(s1.getName()+",我给你一个香吻,你努力学习");

}

public void preEat(StudentEvent e) {

Student s1 = (Student)e.getSource();

System.out.println(s1.getName()+",我给你一个湿吻,润一下喉咙,好好吃饭");

}

});

s.study();

s.eat();

}

打印结果:

张三,我给你一个香吻,你努力学习

张三:开始学习

张三,我给你一个湿吻,润一下喉咙,好好吃饭

张三:开吃

2.Servlet规范中的监听器

a、监听ServletContext、HttpSession、ServletRequest对象的创建和销毁的监听器。

ServletContextListener:两个方法

HttpSessionListener:两个方法

ServletRequestListener:两个方法

1.ServletContextListene监听器:

import javax.servlet.ServletContextEvent;

import javax.servlet.ServletContextListener;

/*

在web.xml中进行监听器注册

<listener>

<listener-class>com.itheima.listener.MyServletContextListener</listener-class>

</listener>

*/

public class MyServletContextListener implements ServletContextListener {

//ServletContext对象创建时就会指定该方法

//ServletContext对象创建时就执行,执行一次:特点

//应用场景:完成系统的初始化。

//Spring框架:就是利用监听器完成Spring容器的初始化的

public void contextInitialized(ServletContextEvent sce) {

System.out.println("ServletContext实例化了");

}

//ServletContext对象销毁时就会指定该方法

public void contextDestroyed(ServletContextEvent sce) {

System.out.println("ServletContext销毁了");

}

}

2.HttpSessionListener:主要可以用来检测网站的访问次数

import javax.servlet.http.HttpSessionEvent;

import javax.servlet.http.HttpSessionListener;

public class MyHttpSessionListener implements HttpSessionListener {

//监听访问量

public void sessionCreated(HttpSessionEvent se) {

System.out.println(se.getSession()+"创建了");

}

public void sessionDestroyed(HttpSessionEvent se) {

System.out.println(se.getSession()+"销毁了");

}

}

3.ServletRequestListener:两个方法

import javax.servlet.ServletRequestEvent;

import javax.servlet.ServletRequestListener;

public class MyServletRequestListener implements ServletRequestListener {

//统计某个资源的访问次数

public void requestDestroyed(ServletRequestEvent sre) {

}

public void requestInitialized(ServletRequestEvent sre) {

}

}

b、三个类型对象域属性中增、删、改的监听器(3个)

ServletContextAttributeListener,

HttpSessionAttributeListener,

ServletRequestAttributeListener

c、感知型监听器(2个):监听自己何时被帮到session上,何时解绑了;何时被钝化了,何时被活化了(序列化到某个存储设置中)。

注意:这种监听器不需要注册。某个javabean实现这些接口后就可以监听何时被绑定、解绑或被激活或钝化。

HttpSessionBindingListener:实现该接口的类,能检测自己何时被Httpsession绑定,和解绑

HttpSessionActivationListener:实现该接口的类(要求些javabean必须是实现了Serializable接口的),能监测自己何时随着HttpSession一起激活和钝化。

ServletListener对象学习笔记的更多相关文章

  1. javaScript 对象学习笔记

    javaScript 对象学习笔记 关于对象,这对我们软件工程到学生来说是不陌生的. 因为这个内容是在过年学到,事儿多,断断续续,总感觉有一丝不顺畅,但总结还是要写一下的 JavaScript 对象 ...

  2. ASP.NET本质论第二章应用程序对象学习笔记1

    1.请求的处理参数—上下文对象HttpContext 1) 针对每一次请求,ASP.NET将创建一个处理这次请求所使用的HttpContext对象实例,这个对象实例将用来在ASP.NET服务器的处理过 ...

  3. JavaScript 对象 之继承对象 学习笔记

    假设,我们有个这样的需求: 两个种族,每个种族都有 名字.血量(默认200).行为(行为有 跳跃.移动速度 这些属性)等共有属性. 人族能量值比兽人多10%,兽人血量比人族多10%. 职业有战士和法师 ...

  4. JavaScript中Date(日期对象),Math对象--学习笔记

    Date对象 1.什么是Date对象? 日期对象可以储存任意一个日期,并且可以精确到毫秒数(1/1000 秒). 语法:var Udate=new Date();  注:初始值为当前时间(当前电脑系统 ...

  5. javaScript对象学习笔记(一)

    一.什么是对象 对象: JavaScript的一种基本数据类型 对象是属性的无序集合,每个属性都是一个名/值对 JavaScript中的事物都是对象:字符串.数值.数组.函数... JavaScrip ...

  6. java——对象学习笔记

    1.面向对象(OOP)的三大特性 对象的行为(behavior):可以对对象施加哪些操作,或者可以对对象施加哪些方法. 对象的状态(state):当施加那些方法后,对象如何响应. 对象标识(ident ...

  7. python_类与对象学习笔记

    class Phone: #手机属性===>类属性 # color='black' # price=4500 # brand='oppo' # size='5.5' #参数化-魔法方法--初始化 ...

  8. OpenGL学习笔记3——缓冲区对象

    在GL中特别提出了缓冲区对象这一概念,是针对提高绘图效率的一个手段.由于GL的架构是基于客户——服务器模型建立的,因此默认所有的绘图数据均是存储在本地客户端,通过GL内核渲染处理以后再将数据发往GPU ...

  9. Redis学习笔记一:数据结构与对象

    1. String(SDS) Redis使用自定义的一种字符串结构SDS来作为字符串的表示. 127.0.0.1:6379> set name liushijie OK 在如上操作中,name( ...

随机推荐

  1. tkinter第一章

    tk1 ------------------------------------------------------------------------------------------ impor ...

  2. 标题:a++和++a的区别

    以前我也是老搞不懂a++和++a的区别, 后来看了很多资料, 终于总结出来一条规律, 小白专用! 看完这个例子就懂了: 例1:$a = 8, 求 ++a + a++ - --a + a-- + ++a ...

  3. MongoDB学习之路(二)

    MongDB特点 MongoDB是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器的性能. MongoDB旨在为WEB应用提供可拓展的高 ...

  4. 团队作业4---第一次项目冲刺(ALpha)版本 第五天

    一.Daily Scrum Meeting照片 二.燃尽图 三.项目进展 a.完成所有基础功能 b.正在进行测试调试 四.困难与问题 1.根据测试需求功能,部分基础功能不能实现,性能不达标,后续已完成 ...

  5. 201521123104《Java程序设计》第4周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. (1)继承时子类将获得父类的属性与方法,并具有自身特有的属性与方法. (2)使用super还 ...

  6. 201521044091 《Java程序设计》第12周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. Answer: 2. 书面作业 将Student对象(属性:int id, String name,int a ...

  7. 猴子吃桃问题(南阳ACM324)

    猴子吃桃问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:0 描述 有一堆桃子不知数目,猴子第一天吃掉一半,又多吃了一个,第二天照此方法,吃掉剩下桃子的一半又多一个,天天如此, ...

  8. Sublime自定义语法

    以thinkphp框架的assign函数为例 在sublime\Data\Packages\PHP下 新建文件:assign.sublime-snippet 内容为 <snippet> & ...

  9. 记录兼容IE8中发现的一些问题

    1.new Date().getYear(); chrome下:获取的是1900年之后的年份,如2017年获取的是117 IE8下:获取的是公元年份,如2017获取的是2017 解决方案:使用new ...

  10. 用vue开发一个app(3,三天的成果)

    前言 一个vue的demo 源码说明 项目目录说明 . |-- config // 项目开发环境配置 | |-- index.js // 项目打包部署配置 |-- src // 源码目录 | |-- ...