JSP/Servlet 中的事件处理写过AWT或Swing程序的人一定对桌面程序的事件处理机制印象深刻:通过实现Listener接口的类可以在特定事件(Event)发生时,呼叫特定的方法来对事件进行响应。
其实我们在编写JSP/Servle程序时,也有类似的事件处理机制,所不同的是在JSP/Servlet中是在web.xml中注册Listener,由Container在特定事件发生时呼叫特定的实现Listener的类。
1. Servlet中的Listener和Event:
在JSP 2.0/Servlet 2.4中,共有八个Listener接口,六个Event类别。
ServletContextListener接口
[接口方法] contextInitialized()与 contextDestroyed()
[接收事件] ServletContextEvent
[触发场景] 在Container加载Web应用程序时(例如启动 Container之后),会呼叫contextInitialized(),而当容器移除Web应用程序时,会呼叫contextDestroyed ()方法。
ServletContextAttributeListener
[接口方法] attributeAdded()、 attributeReplaced()、attributeRemoved()
[接收事件] ServletContextAttributeEvent
[触发场景] 若有对象加入为application(ServletContext)对象的属性,则会呼叫attributeAdded(),同理在置换属性与移除属性时,会分别呼叫attributeReplaced()、attributeRemoved()。
HttpSessionListener
[接口方法] sessionCreated()与sessionDestroyed ()
[接收事件] HttpSessionEvent
[触发场景] 在session (HttpSession)对象建立或被消灭时,会分别呼叫这两个方法。
HttpSessionAttributeListener
[接口方法] attributeAdded()、 attributeReplaced()、attributeRemoved()
[接收事件] HttpSessionBindingEvent
[触发场景] 若有对象加入为session(HttpSession)对象的属性,则会呼叫attributeAdded(),同理在置换属性与移除属性时,会分别呼叫attributeReplaced()、 attributeRemoved()。
HttpSessionActivationListener
[接口方法] sessionDidActivate()与 sessionWillPassivate()
[接收事件] HttpSessionEvent
[触发场景] Activate与Passivate是用于置换对象的动作,当session对象为了资源利用或负载平衡等原因而必须暂时储存至硬盘或其它储存器时(透过对象序列化),所作的动作称之为Passivate,而硬盘或储存器上的session对象重新加载JVM时所采的动作称之为Activate,所以容易理解的,sessionDidActivate()与 sessionWillPassivate()分别于Activeate后与将Passivate前呼叫。
ServletRequestListener
[接口方法] requestInitialized()与 requestDestroyed()
[接收事件] RequestEvent
[触发场景] 在request(HttpServletRequest)对象建立或被消灭时,会分别呼叫这两个方法。
ServletRequestAttributeListener
[接口方法] attributeAdded()、 attributeReplaced()、attributeRemoved()
[接收事件] HttpSessionBindingEvent
[触发场景] 若有对象加入为request(HttpServletRequest)对象的属性,则会呼叫attributeAdded(),同理在置换属性与移除属性时,会分别呼叫attributeReplaced()、 attributeRemoved()。
HttpSessionBindingListener
[接口方法] valueBound()与valueUnbound()
[接收事件] HttpSessionBindingEvent
[触发场景] 实现HttpSessionBindingListener接口的类别,其实例如果被加入至session(HttpSession)对象的属性中,则会呼叫 valueBound(),如果被从session(HttpSession)对象的属性中移除,则会呼叫valueUnbound(),实现HttpSessionBindingListener接口的类别不需在web.xml中设定。
2. 如何注册Servlet中的事件
实现上面这几个接口的类别,除了HttpSessionBindingListener外,必须在web.xml中向容器注册,容器才会在对应的事件发生时呼叫对应的类别,如:
< listener >
< listener-class > demo.servlet.listener.CustomServletContextListener
3. Servlet事件的应用实例
看到这里,你也许会有疑问: 了解这些 listener和event 有什么用呢?我平时开发没有用到这些,一样也能完成任务啊.
不错,在日常的开发中很少用到这些事件处理的方面,但是在某些情况下使用事件处理机制却可以达到事半功倍的效果,例如下面两个例子:
4.Java类实例
==========
//侦听启动和关闭
import javax.servlet.ServletContextListener;
import javax.servlet.*;
public class TigerListen implements ServletContextListener {
public void contextInitialized(ServletContextEvent sce)
{
System.out.print("Init") ;
}
public void contextDestroyed(ServletContextEvent sce)
{
System.out.print("Destroved") ;
}
}
对应的web.xml是
============
<!----><listener></listener>
<listener-class></listener-class> TigerListen
============
分享到:
相关推荐
总结,"Servlet中文帮助文档"覆盖了Servlet的基础概念、API使用、配置方式以及高级特性,对于学习和使用Servlet进行Web开发具有极大的参考价值。通过深入学习和实践,开发者能够熟练地构建高效、动态的Web应用程序。
5. **Servlet配置**:Servlet的配置通常在web.xml文件中进行,包括Servlet的注册、映射URL、设置初始化参数等。例如,`<servlet>`、`<servlet-mapping>`标签用于定义Servlet及其映射。 6. **Servlet上下文**:...
Servlet是Java Web开发中的一种核心组件,用于处理来自客户端(如浏览器)的请求并返回响应。Servlet API文档主要定义了Servlet接口和相关的支持类,如GenericServlet,帮助开发者创建可扩展的、跨平台的网络应用...
Servlet是Java Web开发中的核心组件,它用于扩展服务器的功能,处理来自客户端(通常是Web浏览器)的请求,并向客户端发送响应。这个"Servlet中文帮助文档CHM格式"提供了一个全面的指南,帮助开发者理解和掌握...
大部分Servlet开发都是基于这个类,因为它提供了处理GET和POST请求的默认行为。 3. `javax.servlet.ServletRequest`:这个接口代表了来自客户端的请求,包含了请求的所有信息,如请求参数、头信息和请求体。通过`...
servlet中文帮助文档 servlet中文帮助文档 servlet中文帮助文档
Servlet中文API文档 Servlet中文API文档Servlet中文API文档
ServletAPI是Java Web开发中的核心组件,主要用于处理HTTP请求并生成HTTP响应。它定义了一组接口和类,供开发者创建Web应用程序,特别是服务器端的Java应用程序。本资源为"ServletAPI 中文 chm版",提供了方便中国...
在web应用的web.xml文件中,可以通过`<servlet>`和`<servlet-mapping>`元素来配置Servlet。`<servlet-name>`定义Servlet的别名,`<servlet-class>`指定Servlet类全名,`<url-pattern>`用于映射Servlet处理的URL路径...
Servlet接口定义了Servlet生命周期中的主要方法: 1. `void init(ServletConfig config) throws ServletException`: 这个方法在Servlet被加载并准备服务之前由Servlet容器调用一次。它用来初始化Servlet,通常用于...
java servlet 中文说明手册,适合新手学习java servlet
相比之下,Servlet运行在Java虚拟机(JVM)之上,每个请求通过轻量级的Java线程来处理,极大地提高了处理效率和资源利用率。 #### 二、Servlet的特点: 1. **与CGI的对比**: - **相同点**:Servlet和CGI都是运行...
Servlet API是Java Web开发中的核心组件,主要用于构建动态web应用程序。这个中文版文档是为了帮助那些在英语学习上有困难的朋友更好地理解和应用Servlet技术。在本文中,我们将深入探讨Servlet API的关键概念、功能...
Servlet是Java Web开发中的核心组件,它用于处理...掌握这些概念有助于理解Web应用的工作原理,以及如何在实际项目中有效地使用Servlet和容器提供的功能。通过深入学习和实践,开发者可以构建出高效、可靠的Web服务。
Servlet3.0是Java Web开发中的一个重要里程碑,它在Servlet2.5的基础上引入了许多新特性,极大地提高了开发效率和灵活性。这份"Servlet3.0参考手册"无疑为开发者提供了全面的API参考和实用指南。 首先,Servlet3.0...
- 在传统的Java Web项目中,通常将`javax.servlet.jar`和`javax.servlet.jsp.jar`添加到项目的类路径中,这可以通过在`WEB-INF/lib`目录下放置这两个jar包实现。 - 使用Maven或Gradle等构建工具时,可以在pom.xml...
综上所述,Servlet作为一种重要的服务器端编程技术,在Web开发中占有重要地位。理解其基础知识、接口定义、生命周期管理以及具体的实现方式对于开发高性能的Web应用程序至关重要。同时,掌握`GenericServlet`和`...
9. **监听器Listener**:Listener是Servlet API中的事件监听接口,如ServletContextListener、ServletRequestListener等,它们可以在特定的Servlet事件发生时接收通知,如Web应用启动、Servlet初始化等。 10. **URL...
Servlet API 中文参考 chm,涉及Servet资料资料、API介绍,讲述Servlets概论、生命周期、解析和载入、初始化、 Servlet处理请求、多线程和映射、Servlet的卸载、Servlet映射技术、通... Servlet API 中文参考 chm,...