servlet中的8个Listener:

Xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>TestBootWeb</display-name>
<servlet>
<servlet-name>TestServlet4</servlet-name>
<servlet-class>com.stono.servlet.TestServlet4</servlet-class>
<init-param>
<param-name>testServlet4ParamName</param-name>
<param-value>testServlet4ParamValue</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>TestServlet4</servlet-name>
<url-pattern>/test4.do</url-pattern>
</servlet-mapping>
<context-param>
<param-name>contextParamName</param-name>
<param-value>contextParamValue</param-value>
</context-param>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<listener>
<listener-class>com.stono.servlet.listeners.MyServletContextListener</listener-class>
<listener-class>com.stono.servlet.listeners.MyServletContextAttributeListener</listener-class>
<listener-class>com.stono.servlet.listeners.MyHttpSessionListener</listener-class>
<listener-class>com.stono.servlet.listeners.MyHttpSessionAttributeListener</listener-class>
<listener-class>com.stono.servlet.listeners.MyServletRequestListener</listener-class>
<listener-class>com.stono.servlet.listeners.MyServletRequestAttributeListener</listener-class>
<!-- 不知道这个Listener是否需要在这里面配置 -->
<listener-class>com.stono.servlet.listeners.MyHttpSessionActivationListener</listener-class>
</listener>
</web-app>

Listener:

package com.stono.servlet.listeners;
import javax.servlet.http.HttpSessionActivationListener;
import javax.servlet.http.HttpSessionEvent;
/* 文档中提到进行JVM迁移的时候才能激发此事件; */
public class MyHttpSessionActivationListener implements HttpSessionActivationListener {
@Override
public void sessionDidActivate(HttpSessionEvent arg0) {
System.out.println("com.stono.servlet.listeners.MyHttpSessionActivationListener.sessionDidActivate(HttpSessionEvent)");
}
@Override
public void sessionWillPassivate(HttpSessionEvent arg0) {
System.out.println("com.stono.servlet.listeners.MyHttpSessionActivationListener.sessionWillPassivate(HttpSessionEvent)");
}
}
package com.stono.servlet.listeners;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
public class MyHttpSessionAttributeListener implements HttpSessionAttributeListener {
@Override
/* 调用session.setAttribute的时候触发事件; */
public void attributeAdded(HttpSessionBindingEvent arg0) {
System.out.println("com.stono.servlet.listeners.MyHttpSessionAttributeListener.attributeAdded(HttpSessionBindingEvent)");
String name = arg0.getName();
Object value = arg0.getValue();
System.out.println("name:" + name + ";value:" + value);
}
@Override
/* 调用session.invalidate()方法之后触发这个事件; */
public void attributeRemoved(HttpSessionBindingEvent arg0) {
System.out.println("com.stono.servlet.listeners.MyHttpSessionAttributeListener.attributeRemoved(HttpSessionBindingEvent)");
String name = arg0.getName();
Object value = arg0.getValue();
System.out.println("name:" + name + ";value:" + value);
}
@Override
/* 第二次调用session.setAttribute的时候会触发此事件,但是arg0.getValue()还是返回之前的值 */
public void attributeReplaced(HttpSessionBindingEvent arg0) {
System.out.println("com.stono.servlet.listeners.MyHttpSessionAttributeListener.attributeReplaced(HttpSessionBindingEvent)");
String name = arg0.getName();
Object value = arg0.getValue();
System.out.println("name:" + name + ";value:" + value);
}
}
package com.stono.servlet.listeners;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
public class MyHttpSessionBindingListener implements HttpSessionBindingListener {
private String name;
private String value;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
@Override
/* 将此对象设置到session中的时候触发的事件; */
public void valueBound(HttpSessionBindingEvent arg0) {
System.out.println("com.stono.servlet.listeners.MyHttpSessionBindingListener.valueBound(HttpSessionBindingEvent)");
String name2 = arg0.getName();
Object value2 = arg0.getValue();
Object source = arg0.getSource();
System.out.println("name:" + name2 + ";value:" + value2 + ";source:" + source);
}
@Override
/* session.invalide()的时候触发的事件; */
public void valueUnbound(HttpSessionBindingEvent arg0) {
System.out.println("com.stono.servlet.listeners.MyHttpSessionBindingListener.valueUnbound(HttpSessionBindingEvent)");
String name2 = arg0.getName();
Object value2 = arg0.getValue();
Object source = arg0.getSource();
System.out.println("name:" + name2 + ";value:" + value2 + ";source:" + source);
}
}
package com.stono.servlet.listeners;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class MyHttpSessionListener implements HttpSessionListener {
@Override
/* 必须调用一下session.getAttributeNames();才可以激活这个事件; */
public void sessionCreated(HttpSessionEvent arg0) {
System.out.println("com.stono.servlet.listeners.MyHttpSessionListener.sessionCreated(HttpSessionEvent)");
}
@Override
/* 调用session.invalidate()的时候激活这个事件; */
public void sessionDestroyed(HttpSessionEvent arg0) {
System.out.println("com.stono.servlet.listeners.MyHttpSessionListener.sessionDestroyed(HttpSessionEvent)");
}
}
package com.stono.servlet.listeners;
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
public class MyServletContextAttributeListener implements ServletContextAttributeListener {
@Override
/* 进行context.setAttribute的时候调用 */
public void attributeAdded(ServletContextAttributeEvent arg0) {
System.out.println("com.stono.servlet.listeners.MyServletContextAttributeListener.attributeAdded(ServletContextAttributeEvent)");
String name = arg0.getName();
Object value = arg0.getValue();
System.out.println("name=" + name + ";value=" + value);
}
@Override
/* 进行context.removeAttribute的时候调用 */
public void attributeRemoved(ServletContextAttributeEvent arg0) {
System.out.println("com.stono.servlet.listeners.MyServletContextAttributeListener.attributeRemoved(ServletContextAttributeEvent)");
String name = arg0.getName();
Object value = arg0.getValue();
System.out.println("name=" + name + ";value=" + value);
}
@Override
/* 不知何时调用? */
public void attributeReplaced(ServletContextAttributeEvent arg0) {
System.out.println("com.stono.servlet.listeners.MyServletContextAttributeListener.attributeReplaced(ServletContextAttributeEvent)");
}
}
package com.stono.servlet.listeners;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class MyServletContextListener implements ServletContextListener {
@Override
/* tomcat自动重新Reload Context的时候会调用; */
public void contextDestroyed(ServletContextEvent arg0) {
String x = "com.stono.servlet.listeners.MyServletContextListener.contextDestroyed(javax.servlet.ServletContextEvent)";
System.out.println(x);
}
@Override
/* Context初始化的时候会调用; */
public void contextInitialized(ServletContextEvent arg0) {
String x = "com.stono.servlet.listeners.MyServletContextListener.contextInitialized(javax.servlet.ServletContextEvent)";
System.out.println(x);
}
}
package com.stono.servlet.listeners;
import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener;
public class MyServletRequestAttributeListener implements ServletRequestAttributeListener {
@Override
/* 在request.setAttribute()方法调用的时候触发; */
public void attributeAdded(ServletRequestAttributeEvent arg0) {
System.out.println("com.stono.servlet.listeners.MyServletRequestAttributeListener.attributeAdded(ServletRequestAttributeEvent)");
String name = arg0.getName();
Object value = arg0.getValue();
System.out.println("name:" + name + ";value:" + value);
}
@Override
/* 在request.removeAttribute()的时候触发; */
public void attributeRemoved(ServletRequestAttributeEvent arg0) {
System.out.println("com.stono.servlet.listeners.MyServletRequestAttributeListener.attributeRemoved(ServletRequestAttributeEvent)");
String name = arg0.getName();
Object value = arg0.getValue();
System.out.println("name:" + name + ";value:" + value);
}
@Override
/* 在第二次调用request.setAttribute()的时候触发此方法; */
public void attributeReplaced(ServletRequestAttributeEvent arg0) {
System.out.println("com.stono.servlet.listeners.MyServletRequestAttributeListener.attributeReplaced(ServletRequestAttributeEvent)");
String name = arg0.getName();
Object value = arg0.getValue();
System.out.println("name:" + name + ";value:" + value);
}
}
package com.stono.servlet.listeners;
import java.util.Enumeration;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
public class MyServletRequestListener implements ServletRequestListener {
@Override
/* 请求结束之后调用这个事件 */
public void requestDestroyed(ServletRequestEvent arg0) {
System.out.println("com.stono.servlet.listeners.MyServletRequestListener.requestDestroyed(ServletRequestEvent)");
}
@Override
/* 请求到来的时候调用这个事件 */
public void requestInitialized(ServletRequestEvent arg0) {
System.out.println("com.stono.servlet.listeners.MyServletRequestListener.requestInitialized(ServletRequestEvent)");
Enumeration<String> names = arg0.getServletRequest().getParameterNames();
while(names.hasMoreElements()){
System.out.println(names.nextElement());
}
}
}

Servlet:

package com.stono.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.stono.servlet.listeners.MyHttpSessionActivationListener;
import com.stono.servlet.listeners.MyHttpSessionBindingListener;
public class TestServlet4 extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext context = req.getServletContext();
Enumeration<String> names = getServletConfig().getInitParameterNames();
Enumeration<String> names2 = context.getInitParameterNames();
System.out.println("javax.servlet.ServletConfig.getInitParameterNames()");
while (names.hasMoreElements()) {
System.out.println(names.nextElement());
}
System.out.println("javax.servlet.ServletContext.getInitParameterNames()");
while (names2.hasMoreElements()) {
System.out.println(names2.nextElement());
}
context.setAttribute("contextSetAttributeFromSevlet4Name", "contextSetAttributeFromSevlet4Value");
context.setAttribute("contextParamName", "contextSetAttributeFromSevlet4Value2");
context.removeAttribute("contextParamName");
HttpSession session = req.getSession();
// session.getAttributeNames();
session.setAttribute("sessionAttrInTestServlet4", "sessionAttrInTestServlet4");
try {
// Servlet中可以使用这样的方式进行sleep,一个Servlet只有一个实例,多个线程;
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
session.setAttribute("sessionAttrInTestServlet4", "sessionAttrInTestServlet4_2");
session.invalidate();
try {
Thread.sleep(4000);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("just before request.setAttribute");
req.setAttribute("a", "a");
System.out.println("just after request.setAttribute");
try {
Thread.sleep(2000);
} catch (Exception e) {
e.printStackTrace();
}
req.setAttribute("a", "a2");
System.out.println("just after request.setAttribute second time");
try {
Thread.sleep(2000);
} catch (Exception e) {
e.printStackTrace();
}
req.removeAttribute("a");
System.out.println("just after request.removeAttribute");
session = req.getSession();
MyHttpSessionBindingListener obj = new MyHttpSessionBindingListener();
session.setAttribute("obj", obj);
obj.setName("namename");
obj.setValue("valuevalue");
System.out.println("set session object second time");
session.setAttribute("obj", obj);
session.invalidate();
System.out.println("MyHttpSessionActivationListener testing...");
MyHttpSessionActivationListener activationListener = new MyHttpSessionActivationListener();
session = req.getSession();
session.setAttribute("activation", activationListener);
PrintWriter writer = resp.getWriter();
writer.println("this is from TestServlet4");
}
}

servlet中的8个Listener的更多相关文章

  1. [web]Servlet中的Listener和Filter

    建议先看看 ——> Servlet工作原理 一.Listener 在Tomcat服务中,Listener的设计是基于观察者模式的,目前在Servlet中提供6中两类事件的观察者接口,它们分别是: ...

  2. Servlet中listener(监听器)和filter的总结

    Listener 我是这样理解他的,他是一种观察者模式的实现:我们在 web.xml 中配置 listener 的时候就是把一个被观察者放入的观察者的观察对象队列中,当被观察者触发了注册事件时观察者作 ...

  3. JSP/Servlet 中的事件处理

    写过AWT或Swing程序的人一定对桌面程序的事件处理机制印象深刻:通过实现Listener接口的类可以在特定事件(Event)发生时,呼叫特定的方法来对事件进行响应. 其实我们在编写JSP/Serv ...

  4. Servlet中Web.xml的配置详解

    1 定义头和根元素 部署描述符文件就像所有XML文件一样,必须以一个XML头开始.这个头声明可以使用的XML版本并给出文件的字符编码. DOCYTPE声明必须立即出现在此头之后.这个声明告诉服务器适用 ...

  5. Java第三阶段学习(十一、Servlet基础、servlet中的方法、servlet的配置、ServletContext对象)

    一.Servlet简介  1.什么是servlet: sun公司提供的一套规范(接口),用来处理客户端请求.响应给浏览器的动态资源.但servlet的实质就是java代码,通过java的API动态的向 ...

  6. Servlet中Web.xml配置详解(二)

    5.2 分配JSP初始化参数给JSP页面提供初始化参数在三个方面不同于给servlet提供初始化参数.1)使用jsp-file而不是servlet-class.因此,WEB-INF/web.xml文件 ...

  7. Spring管理Filter和Servlet(在servlet中注入spring容器中的bean)

    在使用spring容器的web应用中,业务对象间的依赖关系都可以用context.xml文件来配置,并且由spring容器来负责依赖对象 的创建.如果要在servlet中使用spring容器管理业务对 ...

  8. servlet中ServletContainerInitializer的简单说明

    根据官方文档到的说明 public interface ServletContainerInitializer Interface which allows a library/runtime to ...

  9. Servlet规范简介——web框架是如何注入到Servlet中的

    Servlet规范简介--web框架是如何注入到Servlet中的 引言 Web框架一般是通过一个Servlet提供统一的请求入口,将指定的资源映射到这个servlet,在这个servlet中进行框架 ...

随机推荐

  1. Java基于Socket文件传输示例

    http://www.blogjava.net/sterning/archive/2007/10/13/152508.html 最近需要进行网络传输大文件,于是对基于socket的文件传输作了一个初步 ...

  2. ZenCoding 个人理解和总结

    我的理解:ZenCoding是一个html简写的语法,可以最快速的生成html. 不少IDE应该都支持,我用的intellij idea是支持的. ZenCoding表示和CSS/JS有相通之处,比如 ...

  3. js删除最后一个字符串方法

    JS 删除字符串最后一个字符的几种方法 2010-12-02 08:18:35|  分类: 编程 |举报 |字号 订阅   字符串:string s = "1,2,3,4,5," ...

  4. head和tail命令-----得到头尾N行或者这去掉尾头N/N-1行

    [algo@localhost tmp]$ cat test  1 2 3 4 5 head得到头部2行,删掉尾部2行 [algo@localhost tmp]$ head -n +2 test  1 ...

  5. 系统管理员必须掌握的20个Linux监控工具

    需要监控Linux服务器系统性能吗?尝试下面这些系统内置或附件的工具吧.大多数Linux发行版本都装备了大量的监控工具.这些工具提供了能用 作取得相关信息和系统活动的量度指标.你能使用这些工具发现造成 ...

  6. 用于辅助在 bootstrap-dialog 中的表现:app-jquery-dialog.js

    // 用于通某个元素共享配置数据 $.extend($.fn, { formOption : function(showOpt) { var opt = $.data(this[0], "f ...

  7. 计算器之webservice实现

    以下是本人原创,如若转载和使用请注明转载地址.本博客信息切勿用于商业,可以个人使用,若喜欢我的博客,请关注我,谢谢!博客地址 一.根据我的上一篇博客 MyEclipse构建Web Service(Xf ...

  8. POJ3259负环判定

    题意:有n个顶点,m条边,然后有w个洞,过每个洞的时间为-ti,求是否会时光倒流 分析:就是求是否存在负圈,用Bellman-Floyd判定是否存在负圈即可,注意是无向图,所以路径是双向可达的 #in ...

  9. laravel安装excel功能

    原文安装链接:https://github.com/Maatwebsite/Laravel-Excel 代码如下: if ($rows = DB::connection('glist')->ta ...

  10. iOS开发者的福利 — — iOS9+Xcode7免越狱免证书直接调试

    苹果发布Xcode7后, 开放了普通的AppleID也能真机调试( 非$99 或 $299, 只要能上AppStore下载应用的AppleID就行),下面教你具体做法,很简单的. 1.运行Xcode, ...