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相关推荐

  1. java-web测试题cpu_tomcat+java的web程序持续占cpu高问题调试【转】

    转自 tomcat+java的web程序持续占cpu问题调试 - 像风一样的自由 - CSDN博客 http://blog.csdn.net/five3/article/details/2841677 ...

  2. 基于Java的webapp_几乎所有基于Java的web app都需要Model 2 (part II) (转)

    几乎所有基于Java的web app都需要Model 2 (part II) (转)[@more@] 几乎所有基于的 app都需要Model 2 当Web容器从客户端接收到一个请求时,控制流开始运行. ...

  3. Java RESTful Web Service实战

    编者按: InfoQ开设栏目"品味书香",精选技术书籍的精彩章节,以及分享看完书留下的思考和收获,欢迎大家关注.本文节选自韩陆著<Java RESTful Web Servi ...

  4. 【译】①JWS之Java[tm] Web Start开发者指南目录

    为什么80%的码农都做不了架构师?>>>    Java[tm] Web Start开发者指南1.2版本. 这个开发者指南提供了怎么使用Java[tm] web start和jnlp ...

  5. Java开发web的几种开发模式

    Java开发web的几种开发模式 Java Web开发方案有多种可供选择,这里列举一些经典的开发模式进行横向比较,为Java Web的开发模式选择提供参考.除此之外还有好多方案(如Tapestry和W ...

  6. 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?

    2019独角兽企业重金招聘Python工程师标准>>> 今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制 ...

  7. 使用.net调用java的Web Services

    上周是悲剧的一周,尝试用C#调用一个java的Web services,一直未能成功. 因为该Web services的服务器环境设置为NLS_LANG=SIMPLIFIED CHINESE_CHIN ...

  8. JAVA 调用Web Service

    JAVA 调用Web Service的方法 1.使用HttpClient  用到的jar文件:commons-httpclient-3.1.jar  方法:  预先定义好Soap请求数据,可以借助于X ...

  9. Java EE WEB工程师培训-JDBC+Servlet+JSP整合开发之14.Servlet请求头信息

    –典型的请求头信息 –读取HTTP请求头 –使用表格显示所有请求头信息 –理解各种请求头的含义 –区分不同的浏览器类型 ##############Michael分割线################ ...

  10. java ee web高级,Java EE Web高级开发案例

    核心提示:Java EE Web高级开发案例 内容简介:<Java EE Web高级开发案例>充分体现了高等职业教育的特点,突出了理论和实践的紧密结合,以充分掌握基本技术技能和必要的基本知 ...

最新文章

  1. 汇编语言随笔(11)- int 指令(返回到应用程序的中断例程),实验13(编写、应用中断例程)
  2. python怎么用数据修改,如何更改数据框Python中的值
  3. python requests库作用_python Requests库入门
  4. 证明kruskal算法求解图的最小生成树具有贪心选择性质_将并查集应用在图论中的最小生成树算法——Kruskal...
  5. 字符串大小写字母转换c 语言,towlower()
  6. git clone 指定分支
  7. SpringBoot的Bean之@ConditionalOnBean与@ConditionalOnClass
  8. 获得Azure订阅LoadBalancer的脚本
  9. 线性代数-线性转化和矩阵
  10. 基于ssm的客户管理系统
  11. NSString+NSMutableString+NSValue+NSAraay用法汇总
  12. 新版edge浏览器换主题皮肤,使用Chrome浏览器的主题皮肤
  13. 怎么查违章?查违章哪个软件最好?交管12123处理电子眼不用再跑交警队!
  14. SCCM通过PXE部署系统蓝屏Recovery
  15. 【复盘】互联网老辛七月复盘-年中flag
  16. 微博官方自助服务一键批量取消微博全部关注方法
  17. Unity笔记-29-ARPG游戏项目-05-简易的战斗系统
  18. 什么样的程序员才算得上优秀,把导师曾对我说的话送给大家(比代码更重要的事)
  19. vue在创建项目时不小心选上代码校验选项(linter/ESlint)后,如何关掉?
  20. Python——递归:这帮小兔崽子、汉诺塔

热门文章

  1. 修改服务器的AJP监听地址,修改服务器的AJP监听地址
  2. 服务器维修解锁,云服务器解锁
  3. HttpURLConnection上传文件(图片)小试
  4. mysql 多表连接技巧_【Mysql进阶技巧(1)】 MySQL的多表关联与自连接
  5. OSChina 周日乱弹 ——不穿泳衣,我都不好意思上厕所
  6. 主动訪问用户数据的背后是品牌战略
  7. Centos 6.4 ossec批量安装部署客户端
  8. 从ajax获取的数据无法通过Jquery选择器来调用事件
  9. 把JS和CSS合并到1个文件
  10. 定义或修改本地屏幕元素的注释