day21(Listener监听器)
监听器只要分为监听web对象创建与销毁,监听属性变化,感知监听器。
1.监听web对象的创建与销毁
servletContextListener 监听ServletContext对象的创建和销毁
创建监听器类
package listener; import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener; public class MyServletContextListener implements ServletContextListener{ @Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("ServletContext对象创建了...."); } @Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("ServletContext对象销毁了");
} }
配置监听器(web.xml)
<listener>
<!--对应的监听器类全路径-->
<listener-class>listener.MyServletContextListener</listener-class>
</listener>
测试:
加载: 把项目加载到tomcat(服务器)中,启动服务器,监听器就会加载到内存中,
销毁: 把服务器关闭监听器就会执行销毁方法;
HttpSession监听器 监听HttpSession对象的创建和销毁
创建监听器类
package listener; import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener; public class MyHttpSessionListener implements HttpSessionListener{
@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("sessin创建了");
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("session销毁了");
}
}
配置文件(web.xml)
<listener>
<!--对应的监听器类的全路径-->
<listener-class>listener.MyHttpSessionListener</listener-class>
</listener>
测试:
创建: 访问jsp页面 或者访问已经创建了session对象的servlet文件(java类)
访问: 页面 是否创建
HTML 否
JSP 是
原因: 访问jsp文件时服务器会对jsp文件进行编译成servlet文件,查看编译的servlet文件,可以看到servlet文件在静态代码块中对session对象进行赋值了。
Servlet 否
销毁: 让session 对象销毁就会执行监听器的销毁方法
让session销毁的方式三种,
a.强行关闭控制台
b.session对象调方法(invalidate())
c.session对象超时(配置session对象存在的时间 1.在tomcat中的配置文件进行配置2.在项目的web.xml文件中进行配置 )
在tomcat中进行配置(apache-tomcat-7.0.52\conf)默认是时间为30分钟
在项目的中进行配置(web.xml)
<session-config>
<!-- 配置session的过期时间 (分钟)-->
<session-timeout>5</session-timeout>
</session-config>
HttpServletRequest监听器 监听请求的对象的创建和销毁
创建监听类
package listener; import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener; public class MyServletRequestListener implements ServletRequestListener{ @Override
public void requestDestroyed(ServletRequestEvent sre) {
System.out.println("request销毁了");
} @Override
public void requestInitialized(ServletRequestEvent sre) {
System.out.println("request创建了");
} }
配置监听器(web.xml)
<listener>
<listener-class>listener.MyServletRequestListener</listener-class>
</listener>
测试:
创建: 只要是一次请求(客户端-----服务器)request对象就是一次请求
访问页面 是否创建request对象
html 是
jsp 是
servlet 是
销毁:一次响应完成后就会销毁
2.监听web对象的属性变化(添加/移除/替换)
HttpServletContext的属性监听器
创建监听器 监听值得添加、移除、替换
package listener01; import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener; public class MyServletContextAttributeListener implements ServletContextAttributeListener{ @Override
public void attributeAdded(ServletContextAttributeEvent scab) {
// 设置值
System.out.println("ServletContextAttribute---add");
}
@Override
public void attributeRemoved(ServletContextAttributeEvent scab) {
// 移除值
System.out.println("ServletContextAttribute---remove"); } @Override
public void attributeReplaced(ServletContextAttributeEvent scab) {
// 替代值
System.out.println("ServletContextAttribute---replaced"); } }
配置监听类
<listener>
<listenerclass>listener01.MyServletContextAttributeListener</listener-class>
</listener>
测试页面
<%@ 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>
<%
getServletContext().setAttribute("name", "张三");//设置ServletContext的值为nam值为“张三” 监听器中的attributeReplaced方法会执行 会在服务器加载时会给赋值
%> <% request.getSession.getAttribute("name") %>//获取ServletContext中名字为name的值
<%
getServletContext.setAttribute("name", "李四");//替换ServletContext的值为nam值为“李四” 监听器中的attributeReplaced方法会执行
%>
<%
getServletContext.removeAttribute("name");//移除session的值为nam值 监听器中的attributeRemoved方法会执行
%>
<h3>测试Session属性监听</h3> </body> </html>
HttpSession的属性监听器
创建监听类
package listener01; import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent; public class MyHttpSessionAttributeListener implements HttpSessionAttributeListener{ @Override
public void attributeAdded(HttpSessionBindingEvent se) {
// TODO Auto-generated method stub
System.out.println("sessionAttribute---add");
} @Override
public void attributeRemoved(HttpSessionBindingEvent se) {
// TODO Auto-generated method stub
System.out.println( "sessionAttribute---remove");
} @Override
public void attributeReplaced(HttpSessionBindingEvent se) {
// TODO Auto-generated method stub
System.out.println( "sessionAttribute---replace"); } }
配置监听类
<listener>
<listener-class>listener01.MyHttpSessionAttributeListener</listener-class>
</listener>
测试
<%@ 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.getSession().setAttribute("name", "张三");//设置session的值为nam值为“张三” 监听器中的attributeAdded方法会执行
%> <% request.getSession.getAttribute("name") %>//获取session中名字为name的值
<%
request.getSession().setAttribute("name", "李四");//替换session的值为nam值为“李四” 监听器中的attributeReplaced方法会执行
%> <%
request.getSession().removeAttribute("name");//移除session的值为nam值 监听器中的attributeRemoved方法会执行
%> <h3>测试Session属性监听</h3> </body> </html>
HttpServletRequest的属性监听器
创建监听类
package listener01; import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener; public class MyServletRequestAttributeListener implements ServletRequestAttributeListener{ @Override
public void attributeAdded(ServletRequestAttributeEvent srae) {
// 设置值
System.out.println("requestAttribute---add"); } @Override
public void attributeRemoved(ServletRequestAttributeEvent srae) {
// 移除值
System.out.println("requestAttribute---remove"); } @Override
public void attributeReplaced(ServletRequestAttributeEvent srae) {
// 替换值
System.out.println("requestAttribute---replace"); } }
配置监听类
<listener>
<listener-class>listener01.MyServletRequestAttributeListener</listener-class>
</listener>
测试
<%@ 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", "张三");
%>
<% request.setAttribute("name", "李四"); %>
<h3>测试servletContextAttribute监听</h3>
</body>
</html>
3.感知类监听器
HttpSessionBindingListener 绑定监听器
创建方式: 只能绑定类 只要类创建了对象就会执行监听器中的绑定方法(valueBound)
解绑方式: 服务器关闭 或对象被回收了(valueUnbound)
session 绑定
session解绑
package listener02; import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener; public class MyHttpSessionBindingListener implements HttpSessionBindingListener { private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public void valueBound(HttpSessionBindingEvent event) {
System.out.println("绑定"); } @Override
public void valueUnbound(HttpSessionBindingEvent event) { System.out.println("解绑");
} }
HttpSessionActivationListener
package listener02; import java.io.Serializable; import javax.servlet.http.HttpSessionActivationListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
import javax.servlet.http.HttpSessionEvent; public class User implements Serializable,HttpSessionBindingListener,HttpSessionActivationListener{ private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public void valueBound(HttpSessionBindingEvent event) {
System.out.println("向Session中绑定user对象");
} @Override
public void valueUnbound(HttpSessionBindingEvent event) {
System.out.println("解绑session中的user对象");
}
@Override
public void sessionWillPassivate(HttpSessionEvent se) {
System.out.println("钝化了");
}
@Override
public void sessionDidActivate(HttpSessionEvent se) {
System.out.println("活化了");
} }
钝化:持久化到磁盘(序列化的对象)
活化:从磁盘中加载到项目中(反序列化对象)
操作过程: 钝化
1:创建user对象,并进行赋值,添加到session对象中。
2. 正常关闭服务器,这样session就钝化到磁盘中了
活化
1:创建user对象 可以直接获取值(其中的值是由钝化的user对象加载进来的)
<%@page import="listener02.User"%>
<%@page import="listener02.MyHttpSessionBindingListener"%>
<%@ 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>
<%
User user=new User();//创建User对象 user.setName("张三");//设置其中的name值
session.setAttribute("name", user); //将user对象添加到session对象中
%>
</body>
</html>
day21(Listener监听器)的更多相关文章
- [Java] JSP笔记 - Listener 监听器
Java Web 开发时,可以使用 Listener 来监听来监听一些事件,从而实现一些功能.实际上这个监听器,原理就是 Delphi 中大家常用的各种事件. 1. 那么,监听器的主要用途用哪些呢: ...
- Java ---Listener监听器
在我们的web容器中,一直不断的触发着各种事件,例如:web应用启动和关闭,request请求到达和结束等.但是这些事件通常对于开发者来说是透明的,我们可以根据这些接口开发符合我们自身需求的功能.在w ...
- Listener监听器和Filter过滤器
Listener监听器 WEB中的监听器 WEB 中的 Listener 和 Filter 是属于 Servlet 规范中的高级的技术.WEB中的监听器共有三类八种(监听三个域对象)* 事件源:Ser ...
- 转-JavaWeb三大组件之Listener监听器
JavaWeb三大组件之Listener监听器一.概述1,它是一个接口,内容由我们来实现 2,它需要注册,例如注册在按钮上 3,监听器中的方法,会在特殊事件发生时被调用 二.JavaWeb中的监听器1 ...
- Servlet3.0的注解自定义原生Listener监听器实战
简介:监听器介绍和Servlet3.0的注解自定义原生Listener监听器实战 自定义Listener(常用的监听器 servletContextListener.httpSessionListen ...
- 【Servlet】Java Serlvet Listener 监听器
Listener监听器 Servlet规范中定义的一种特殊的组件,用来监听Servlet容器产生的事件并进行相应的处理 容器产生的事件分类 - 生命周期相关的事件 - 设置和删除Attribute数据 ...
- 15 Filter过滤器和Listener监听器
1.Filter:过滤器 (1) 概念:生活中的过滤器:净水器,空气净化器,土匪.web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能.过滤器的作用:一般用于完成通用的 ...
- .jsp文件的使用和理解以及一些小练习和Listener监听器
什么是 jsp,它有什么用? jsp 的全换是 java server pages.Java 的服务器页面.jsp 的主要作用是代替 Servlet 程序回传 html 页面的数据.因为 Servle ...
- 什么是Listener监听器
什么是Listener监听器 1,Listener 监听器它是JavaWeb的三大组件之一.JavaWeb的三大组件:Servlet程序,Filter过滤器,Listener监听器. 2,Listen ...
随机推荐
- 汇编中CMP的作用
假设现在AX寄存器中的数是0002H,BX寄存器中的数是0003H.执行的指令是:CMP AX, BX 执行这条指令时,先做用AX中的数减去BX中的数的减法运算.列出二进制运算式子: 0 ...
- stl中顺序性容器,关联容器两者粗略解释
什么是容器 首先,我们必须理解一下什么是容器,在C++ 中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器.很简单,容器就是保存其它对象的对象 ...
- (转)在WinForm中选择本地文件
相信很多朋友在日常的编程中总会遇到各钟各样的问题,关于在WinForm中选择本地文件就是很多朋友们都认为很难的一个学习.net的难点, 在WebForm中提供了FileUpload控件来供我们选择本地 ...
- N! (大数,优化)
Problem Description 输出N的阶乘.(注意时间限制150ms&&注意不能打表后输出) 打表的定义:在本地主机预先计算出了每个值对应的答案,并把输入和输出的映射直接写入 ...
- HDOJ2586 How far away ?
一道LCA模板 原题链接 \(LCA\)模板题,不解释. 倍增版 #include<cstdio> #include<cmath> #include<cstring> ...
- 关于发件人地址会自动增加BATV及prvs的问题处理方法
问题描述: 发现Exchange 2010往外发邮件时,有些用户的发件人地址会自动增加BATV= 及 prvs=绪如,这些的特定字符,变成型如prvs=123456=example@example.c ...
- virtualbox 采用 NAT 还是 BRIDGE
正如标题所言,其实这两个都可以让虚拟机上网,但是还是有些差别的. 选择NAT的话, 虚拟机之间无法PING通 虚拟机可以PING通主机 主机无法PING通虚拟机 这是因为虚拟机不能在网络里拥有自己的I ...
- jquery查找frameset框架内iframe的元素
老系统还幸存有过时的frameset框架,维护升级工作需要对其内部的iframe中的元素进行相关操作.使用jquery查找子iframe页面内的元素时,总找不到目标元素.后来发现少了contents ...
- Linux入门练习操作命令
查看目录命令 1. 显示目录下所有文件 2.显示所有文件,包括隐藏文件 创建目录命令 1.在改目录下创建文件夹“practise” 切换目录 1.切换到指定的目录 2.切换到上一级目录 3.还在当前目 ...
- jvm 启动参数设置(转载)
JVM启动参数 http://onlyor.iteye.com/blog/1722413 博客分类: java java java启动参数共分为三类其一是标准参数(-),所有的JVM实现都必须实现这些 ...