java listen_java web-- listen
1. HttpSessionActivationListener
1). 监听实现了该接口和 Serializable 接口的 Java 类的对象随 session 钝化和活化事件
> 活化: 从磁盘中读取 session 对象
> 钝化: 向磁盘中写入 session 对象
> session 对象存储在tomcat 服务器的 work\Catalina\localhost\contextPath 目录下. SESSION.SER
2). 该监听器不需要在 web.xml 文件中进行配置.
3).
/ /在活化之后被调用.
public void sessionDidActivate(HttpSessionEvent se)
/ /在钝化之前被调用
public void sessionWillPassivate(HttpSessionEvent se)
HttpSessionEvent: getSession()
4). 该监听器较少被使用.
2. HttpSessionBindingListener
1). 监听实现了该接口的 Java 类的对象被绑定到 session 或从 session 中解除绑定的事件.
//当前对象被绑定到 session 时调用该方法
public void valueBound(HttpSessionBindingEvent event)
//当前对象从 session 中解除绑定调用该方法
public void valueUnbound(HttpSessionBindingEvent event)
2). 注意: 该监听器不需要在 web.xml 文件中进行配置.
3). HttpSessionBindingEvent:
getName()
getValue()
getSession()
4). 该监听器较少被使用.
3. XxxAttributeListener
1). 监听 ServletContext, HttpSession, ServletRequest 中添加属性, 替换属性, 移除属性的事件监听器.
2). 以 ServletRequestAttributeListener 为例:
//添加属性时被调用
public void attributeAdded(ServletRequestAttributeEvent srae) {
System.out.println("向 request 中添加了一个属性...");
}
//移除属性时被调用
@Override
public void attributeRemoved(ServletRequestAttributeEvent srae) {
System.out.println("从 request 中移除了一个属性...");
}
//替换属性时被调用.
@Override
public void attributeReplaced(ServletRequestAttributeEvent srae) {
System.out.println("request 中属性替换了...");
}
3). 这三个 ServletContextAttributeListener,
ServletRequestAttributeListener, HttpSessionAttributeListener 监听器较少被使用.
4). API:
ServletRequestAttributeEvent:
> getName(): 获取属性的名字
> getValue(): 获取属性的值.
4. ServletRequestListener & HttpSessionListener
1). 和 ServletContextListener 类似。
2). 利用 ServletRequestListener、HttpSessionListener 以及 ServletContextListener 可以把 request, session
及 application 的生命周期进一步的做一了解.
> request: 是一个请求, 当一个响应返回时, 即被销毁. 当发送一个请求时被创建. 注意, 请求转发的过程是一个 request 对象.
重定向是两个请求
> session: 当第一次访问 WEB 应用的一个 JSP 或 Servlet 时, 且该 JSP 或 Servlet 中还需要创建 session 对象. 此时服务器会
创建一个 session 对象.
session 销毁: session 过期, 直接调用 session 的 invalidate 方法, 当前 web 应用被卸载(session 可以被持久化).
* 关闭浏览器, 并不意味着 session 被销毁, 还可以通过 sessionid 找到服务器中的 session 对象.
JSESSIONID=F4119DE0FC93ED38E8EC83B24CFA3B81
http://localhost:8989/day_40/session.jsp;jsessionid=F4119DE0FC93ED38E8EC83B24CFA3B81
> application: 贯穿于当前的 WEB 应用的生命周期. 当前 WEB 应用被加载时创建 application 对象, 当前 WEB 应用被卸载时
销毁 application 对象.
5. ServletContextListener:
1). what: 监听 ServletContext 对象被创建或销毁的 Servlet 监听器
2). how:
> 创建一个实现了 ServletContextListener 的类, 并且实现其中的两个方法
public class HelloServletContextListner implements ServletContextListener
> 在 web.xml 文件中配置 Listener
com.atguigu.javaweb.test.HelloServletContextListner
3). why: ServletContextListener 是最常用的 Listener, 可以在当前 WEB 应用被加载时对当前 WEB 应用的相关资源进行初始化操作:
创建数据库连接池, 创建 Spring 的 IOC 容器, 读取当前 WEB 应用的初始化参数 ...
4). API:
/ / SerlvetContext 对象被创建(即, 当前 WEB 应用被加载时)的时候, Servlet 容器调用该方法.
public void contextInitialized(ServletContextEvent sce)
// SerlvetContext 对象被销毁之前(即, 当前 WEB 应用被卸载时)的时候, Servlet 容器调用该方法.
public void contextDestroyed(ServletContextEvent sce)
ServletContextEvent 中的: getServletContext() 获取 ServletContext
6.代码区
packagecom.atguigu.javaweb.test;importjava.io.Serializable;importjavax.servlet.http.HttpSessionActivationListener;importjavax.servlet.http.HttpSessionBindingEvent;importjavax.servlet.http.HttpSessionBindingListener;importjavax.servlet.http.HttpSessionEvent;public class Customer implementsSerializable,HttpSessionBindingListener, HttpSessionActivationListener{privateString time;public voidsetTime(String time) {this.time =time;
}/****/
private static final long serialVersionUID = 1L;
@Overridepublic voidvalueBound(HttpSessionBindingEvent event) {
System.out.println("绑定到 session");
Object value=event.getValue();
System.out.println(value== this);
System.out.println(event.getName());
}
@Overridepublic voidvalueUnbound(HttpSessionBindingEvent event) {
System.out.println("从 sessoin 中解除绑定");
}
@Overridepublic voidsessionWillPassivate(HttpSessionEvent se) {
System.out.println("从内存中写到磁盘上...");
}
@Overridepublic voidsessionDidActivate(HttpSessionEvent se) {
System.out.println("从磁盘中读取出来...");
}
@OverridepublicString toString() {return super.toString() + ", time: " +time;
}
}
Customer
packagecom.atguigu.javaweb.test;importjavax.servlet.ServletContextEvent;importjavax.servlet.ServletContextListener;importjavax.servlet.ServletRequestEvent;importjavax.servlet.ServletRequestListener;importjavax.servlet.http.HttpSessionEvent;importjavax.servlet.http.HttpSessionListener;public classHelloServletContextListnerimplementsServletContextListener, ServletRequestListener, HttpSessionListener {
@Overridepublic voidcontextInitialized(ServletContextEvent sce) {
System.out.println("ServletContext 对象被创建。 " +sce.getServletContext());
}
@Overridepublic voidcontextDestroyed(ServletContextEvent sce) {
System.out.println("ServletContext 对象被销毁。" +sce.getServletContext());
}
@Overridepublic voidsessionCreated(HttpSessionEvent se) {
System.out.println("HttpSession 被创建。");
}
@Overridepublic voidsessionDestroyed(HttpSessionEvent se) {//TODO Auto-generated method stub
System.out.println("HttpSession 被销毁");
}
@Overridepublic voidrequestDestroyed(ServletRequestEvent sre) {//TODO Auto-generated method stub
System.out.println("ServletRequest 被销毁");
}
@Overridepublic voidrequestInitialized(ServletRequestEvent sre) {//TODO Auto-generated method stub
System.out.println("ServletRequest 被创建");
}
}
HelloServletContextListner
packagecom.atguigu.javaweb.test;importjavax.servlet.ServletContextAttributeEvent;importjavax.servlet.ServletContextAttributeListener;importjavax.servlet.ServletRequestAttributeEvent;importjavax.servlet.ServletRequestAttributeListener;importjavax.servlet.http.HttpSessionAttributeListener;importjavax.servlet.http.HttpSessionBindingEvent;public class TestAttributeListener implementsServletContextAttributeListener,
ServletRequestAttributeListener, HttpSessionAttributeListener{
@Overridepublic voidattributeAdded(ServletRequestAttributeEvent srae) {
System.out.println("向 request 中添加了一个属性: " + srae.getName() + ": " +srae.getValue());
}
@Overridepublic voidattributeRemoved(ServletRequestAttributeEvent srae) {
System.out.println("从 request 中移除了一个属性: " + srae.getName() + ": " +srae.getValue());
}
@Overridepublic voidattributeReplaced(ServletRequestAttributeEvent srae) {
System.out.println("request 中属性替换了: " + srae.getName() + ": " +srae.getValue());
}
@Overridepublic voidattributeAdded(ServletContextAttributeEvent scab) {//TODO Auto-generated method stub
}
@Overridepublic voidattributeRemoved(ServletContextAttributeEvent scab) {//TODO Auto-generated method stub
}
@Overridepublic voidattributeReplaced(ServletContextAttributeEvent scab) {//TODO Auto-generated method stub
}
@Overridepublic voidattributeAdded(HttpSessionBindingEvent se) {//TODO Auto-generated method stub
}
@Overridepublic voidattributeRemoved(HttpSessionBindingEvent se) {//TODO Auto-generated method stub
}
@Overridepublic voidattributeReplaced(HttpSessionBindingEvent se) {//TODO Auto-generated method stub
}
}/*ServletRequest 被创建
request 中属性替换了: org.apache.catalina.ASYNC_SUPPORTED: true
向 request 中添加了一个属性: name: ABCD
-----------------------------
request 中属性替换了: name: ABCD
-----------------------------
从 request 中移除了一个属性: name: DEFG
-----------------------------
ServletRequest 被销毁*/
TestAttributeListener
packagecom.atguigu.javaweb.test;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;/*** Servlet implementation class TestServlet*/
public class TestServlet extendsHttpServlet {private static final long serialVersionUID = 1L;/***@seeHttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {
request.setAttribute("requestKey", "requestValue2");
request.getRequestDispatcher("/test.jsp").forward(request, response);//response.sendRedirect("test.jsp");
}
}
TestServlet
com.atguigu.javaweb.test.TestAttributeListener
com.atguigu.javaweb.test.HelloServletContextListner
TestServlet
TestServlet
com.atguigu.javaweb.test.TestServlet
TestServlet
/TestServlet
web.xml
Insert title here
HttpSessionBindingListener
session.setAttribute("customer", customer);
System.out.println("------------------------");
session.removeAttribute("customer");--%>
customer= newCustomer();
customer.setTime("" + newDate());
session.setAttribute("customer", customer);
System.out.println("创建一个新的 Customer 对象: " + customer + ", 并放入到 session 中");
}else{
System.out.println("从 session 中读取到 Customer 对象: " +customer);
}%>
HttpSessionBindingListener.jsp
Insert title here
Index Page
To Test Page
--%>
TestServlet
index.jsp
Insert title here
Session Page
session.invalidate();%>
session.jsp
Insert title here
System.out.println("-----------------------------");
request.setAttribute("name", "DEFG");
System.out.println("-----------------------------");
request.removeAttribute("name");
System.out.println("-----------------------------");%>
test-attribute-listener.jsp
Insert title here
Test Page
test.jsp
java listen_java web-- listen相关推荐
- java-web测试题cpu_tomcat+java的web程序持续占cpu高问题调试【转】
转自 tomcat+java的web程序持续占cpu问题调试 - 像风一样的自由 - CSDN博客 http://blog.csdn.net/five3/article/details/2841677 ...
- 基于Java的webapp_几乎所有基于Java的web app都需要Model 2 (part II) (转)
几乎所有基于Java的web app都需要Model 2 (part II) (转)[@more@] 几乎所有基于的 app都需要Model 2 当Web容器从客户端接收到一个请求时,控制流开始运行. ...
- Java RESTful Web Service实战
编者按: InfoQ开设栏目"品味书香",精选技术书籍的精彩章节,以及分享看完书留下的思考和收获,欢迎大家关注.本文节选自韩陆著<Java RESTful Web Servi ...
- 【译】①JWS之Java[tm] Web Start开发者指南目录
为什么80%的码农都做不了架构师?>>> Java[tm] Web Start开发者指南1.2版本. 这个开发者指南提供了怎么使用Java[tm] web start和jnlp ...
- Java开发web的几种开发模式
Java开发web的几种开发模式 Java Web开发方案有多种可供选择,这里列举一些经典的开发模式进行横向比较,为Java Web的开发模式选择提供参考.除此之外还有好多方案(如Tapestry和W ...
- 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?
2019独角兽企业重金招聘Python工程师标准>>> 今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制 ...
- 使用.net调用java的Web Services
上周是悲剧的一周,尝试用C#调用一个java的Web services,一直未能成功. 因为该Web services的服务器环境设置为NLS_LANG=SIMPLIFIED CHINESE_CHIN ...
- JAVA 调用Web Service
JAVA 调用Web Service的方法 1.使用HttpClient 用到的jar文件:commons-httpclient-3.1.jar 方法: 预先定义好Soap请求数据,可以借助于X ...
- Java EE WEB工程师培训-JDBC+Servlet+JSP整合开发之14.Servlet请求头信息
–典型的请求头信息 –读取HTTP请求头 –使用表格显示所有请求头信息 –理解各种请求头的含义 –区分不同的浏览器类型 ##############Michael分割线################ ...
- java ee web高级,Java EE Web高级开发案例
核心提示:Java EE Web高级开发案例 内容简介:<Java EE Web高级开发案例>充分体现了高等职业教育的特点,突出了理论和实践的紧密结合,以充分掌握基本技术技能和必要的基本知 ...
最新文章
- 汇编语言随笔(11)- int 指令(返回到应用程序的中断例程),实验13(编写、应用中断例程)
- python怎么用数据修改,如何更改数据框Python中的值
- python requests库作用_python Requests库入门
- 证明kruskal算法求解图的最小生成树具有贪心选择性质_将并查集应用在图论中的最小生成树算法——Kruskal...
- 字符串大小写字母转换c 语言,towlower()
- git clone 指定分支
- SpringBoot的Bean之@ConditionalOnBean与@ConditionalOnClass
- 获得Azure订阅LoadBalancer的脚本
- 线性代数-线性转化和矩阵
- 基于ssm的客户管理系统
- NSString+NSMutableString+NSValue+NSAraay用法汇总
- 新版edge浏览器换主题皮肤,使用Chrome浏览器的主题皮肤
- 怎么查违章?查违章哪个软件最好?交管12123处理电子眼不用再跑交警队!
- SCCM通过PXE部署系统蓝屏Recovery
- 【复盘】互联网老辛七月复盘-年中flag
- 微博官方自助服务一键批量取消微博全部关注方法
- Unity笔记-29-ARPG游戏项目-05-简易的战斗系统
- 什么样的程序员才算得上优秀,把导师曾对我说的话送给大家(比代码更重要的事)
- vue在创建项目时不小心选上代码校验选项(linter/ESlint)后,如何关掉?
- Python——递归:这帮小兔崽子、汉诺塔