Listener(2)—案例
- ServletContext的事件监听器,创建:当前web应用被加载(或重新加载)到服务器中,销毁:当前web应用被卸载
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
* ServletContext的事件监听器,创建:当前web应用被加载(或重新加载)到服务器中,销毁:当前web应用被卸载
*/
public class ApplicationListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("当前web应用被加载到服务器中,创建ServletContextListener对象...");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("当前web应用被卸载,销毁ServletContextListener对象...");
}
}
- HttpSession对象的监听器,创建:会话的开始,销毁:session调用invalidate()方法,或者会话时间到期
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
/**
* HttpSession对象的监听器,创建:会话的开始,销毁:session调用invalidate()方法,或者会话时间到期
*/
public class SessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("监听HttpSession对象的创建...");
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("监听HttpSession对象的销毁...");
}
}
- HttpSession对象的监听器,创建:一次请求的开始,销毁:一次请求的结束
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
/**
* HttpSession对象的监听器,创建:一次请求的开始,销毁:一次请求的结束
*
*/
public class RequestListener implements ServletRequestListener {
@Override
public void requestDestroyed(ServletRequestEvent sre) {
System.out.println("监听ServletRequest对象的销毁...");
}
@Override
public void requestInitialized(ServletRequestEvent sre) {
System.out.println("监听ServletRequest对象的创建...");
}
}
页面:
demo1.jsp
<body>
<h3>Demo1 Page</h3>
<!-- 1.请求页面 -->
<!-- 使用该方法无法跨页面传递参数 -->
<a href="demo2.jsp">To test Page</a>
<%
//为request对象设置一个属性
request.setAttribute("name", "test1");
%>
<!-- 使用forward方法可以跨页面传递参数 -->
<jsp:forward page="demo2.jsp"></jsp:forward>
</body>
demo2.jsp
<body>
<h3>销毁session</h3>
<%
session.invalidate();
%>
name:<%=request.getAttribute("name") %>
<br><br>
<!-- 2.请求Servlet -->
<a href="testServlet">TestServlet </a>
</body>
demo3.jsp
<body>
<h3>Demo3 Page</h3>
name:<%=request.getAttribute("name") %>
</body>
session.jsp
<body>
<h3>Session Page</h3>
<%
//在page标签中禁用掉session,然后显式的创建一个session
HttpSession session = request.getSession();
//销毁session,1.设置过期时间,2.调用invalidate方法
session.setMaxInactiveInterval(10);
//session.invalidate();
%>
</body>
web.xml配置文件
<!-- 1.监听域对象自身的创建和销毁的事件监听器 -->
<listener>
<listener-class>com.test.demo1.ServletContextListener.ApplicationListener</listener-class>
</listener>
<listener>
<listener-class>com.test.demo1.HttpSessionListener.SessionListener</listener-class>
</listener>
<listener>
<listener-class>com.test.demo1.ServletRequestListener.RequestListener</listener-class>
</listener>
<!-- 2.监听域对象中属性的增加和删除的事件监听器 -->
<listener>
<listener-class>com.test.demo2.HttpSessionAttributeListener.SessionAttributeListener</listener-class>
</listener>
<listener>
<listener-class>com.test.demo2.ServletContextAttributeListener.ApplicationAttributeListener</listener-class>
</listener>
<listener>
<listener-class>com.test.demo2.ServletRequestAttributeListener.RequestAttributeListener</listener-class>
</listener>
结果:
信息: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [232] milliseconds.
当前web应用被加载到服务器中,创建ServletContextListener对象...
Application中添加属性:org.apache.jasper.compiler.TldLocationsCache :org.apache.jasper.compiler.TldLocationsCache@1bdb367
十一月 30, 2017 2:54:53 下午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["http-apr-8084"]
十一月 30, 2017 2:54:53 下午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["ajp-apr-8009"]
十一月 30, 2017 2:54:53 下午 org.apache.catalina.startup.Catalina start
信息: Server startup in 1386 ms
监听ServletRequest对象的创建...
Request中替代属性:org.apache.catalina.ASYNC_SUPPORTED :true
Application中添加属性:org.apache.jasper.runtime.JspApplicationContextImpl :org.apache.jasper.runtime.JspApplicationContextImpl@52ccef60
监听HttpSession对象的创建...
Request中添加属性:name :test1
监听HttpSession对象的销毁...
监听ServletRequest对象的销毁...
监听ServletRequest对象的创建...
Request中替代属性:org.apache.catalina.ASYNC_SUPPORTED :true
Request中添加属性:name :test2
监听ServletRequest对象的销毁...
监听ServletRequest对象的创建...
Request中替代属性:org.apache.catalina.ASYNC_SUPPORTED :true
监听HttpSession对象的创建...
监听ServletRequest对象的销毁...
Listener(2)—案例的更多相关文章
- 面试题:filter过滤器 listener 监听器 案例有点用
1.Filter工作原理(执行流程) 当客户端发出Web资源的请求时,Web服务器根据应用程序配置文件设置的过滤规则进行检查,若客户请求满足过滤规则,则对客户请求/响应进行拦截,对请求头和请求数据进行 ...
- 第7章 监听器Listener
Listener概述 Listener的使用 使用Listener需要实现相应的Listener接口. public class SessionListenerTest implements Http ...
- Unity3D笔记二十 多媒体与网络
1 游戏音频 1.游戏音乐:如游戏背景音乐 2.游戏音效:如开枪或打怪物时“砰砰”的游戏音效 Unity 3D游戏引擎共支持4种音乐格式的文件,具体如下. aiff:适用于较短的音乐文件,可用作游戏音 ...
- ros实例_百度语音+图灵
1 百度语音模块 参考http://blog.csdn.net/u011118482/article/details/55001444 1.1 百度语音识别包 git clonehttps://git ...
- JavaWEB-01-MySQL基础
JavaWeb内容 数据库 – 数据存储 MySQL JDBC Maven - 项目管理工具 Mybatis 前端 - 为了前端哥们沟通 HTML+CSS JavaScript Ajax + Vue ...
- Listener监听器使用小案例
这里介绍的就是一个客户流失监听器案例 新建一个监听器实现ServletContextListener接口 覆写contextDestroyed和contextInitialized 方法 packag ...
- ORA-12514, TNS:listener does not currently know of service requested in connect descriptor案例2
今天使用SQL Developer连接一台测试服务器数据库(ORACLE 11g)时,遇到了"ORA-12514, TNS:listener does not currently know ...
- java web Listener的简单使用案例
1.web.xml的配置 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi= ...
- EL&Filter&Listener:EL表达式和JSTL,Servlet规范中的过滤器,Servlet规范中的监听器,观察着设计模式,监听器的使用,综合案例学生管理系统
EL&Filter&Listener-授课 1 EL表达式和JSTL 1.1 EL表达式 1.1.1 EL表达式介绍 *** EL(Expression Language):表达式语言 ...
随机推荐
- HDU 1384 Intervals【差分约束-SPFA】
类型:给出一些形如a−b<=k的不等式(或a−b>=k或a−b<k或a−b>k等),问是否有解[是否有负环]或求差的极值[最短/长路径].例子:b−a<=k1,c−b&l ...
- 【NOI2017】泳池
题解: 满分的笛卡尔树以后再学吧.. 40分还是比较好想的 但是状态挺复杂的 直接贴代码了 代码: #include <bits/stdc++.h> using namespace std ...
- 【ASP.NET】UCenter实现多站点同步登录退出
利用UCenter实现discuz论坛和应用网站同步登录和退出功能 测试环境:Discuz! X3.2.UCenter 1.6..Net Framework 4.0 进入Discuz 后台的UCent ...
- 分布式系统的BASE理论
一.BASE理论 eBay的架构师Dan Pritchett源于对大规模分布式系统的实践总结,在ACM上发表文章提出BASE理论,BASE理论是对CAP理论的延伸,核心思想是即使无法做到强一致性(St ...
- WPF中矢量图制作和引用
WPF程序有时需要适配不同大小的屏幕,图片是像素图的话,拉伸之后会变模糊,影响美观度,因此可以考虑使用矢量图.网上找到了相应的介绍:http://learnwpf.com/post/2006/06/0 ...
- Codeforces 911F Tree Destruction
Tree Destruction 先把直径扣出来, 然后每个点都和直径的其中一端组合, 这样可以保证是最优的. #include<bits/stdc++.h> #define LL lon ...
- POJ1273 USACO 4.2.1 Drainage Ditches CodeVS1993草地排水 网络流 最大流 SAP
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 传送门 - POJ 传送门 - CodeVS 题意概括 给出一个图,告诉你边和容量,起点是1,汇点是n,让你求最大流. 题解 ...
- asp gridview
<table> <tr> <td colspan="5">请选择试卷制定人员<span style="color:red&quo ...
- 041 SparkSql的回顾与复习
在前面学完了SparkCore后,又学了SparkSQL,在继续加深学习之前,一定的复习还是很重要的.这里大体写一下,加深自己对SparlSQL的理解. 1.SparkSQL 首先是SaprkSQL与 ...
- ThreadPoolExecutor 入参 corePoolSize 和 maximumPoolSize 的联系
前言 我们可以通过 java.util.concurrent.ThreadPoolExecutor 来创建一个线程池: new ThreadPoolExecutor(corePoolSize, max ...