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 </ listener-class >
</ listener >
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是
============
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee
"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd
">
<listener>
<listener-class>TigerListen</listener-class>
</listener>
</web-app>
分享到:
相关推荐
### ServletListener大全 #### 概述 在Java Web开发中,`ServletListener`是一类特殊的设计模式,主要用于监听容器中的事件。例如,当一个HTTP会话被创建或销毁时,或者当请求开始或结束时,这些监听器可以执行特定...
关于filter、servlet在web.xml配置及加载顺序
### 关于Servlet监视器(Listener)的详细解析 在Java Web开发中,Servlet技术一直扮演着重要的角色。其中,Servlet监听器(Listener)是Servlet容器提供的一个非常实用的功能,它能够帮助开发者监听某些特定事件的...
这个接口提供了两个方法:`contextInitialized()`和`contextDestroyed()`,分别在Servlet容器启动和关闭时被调用。 ```java @WebListener public class FirstListener implements ServletContextListener { @...
在提供的压缩文件"servletlistener"中,可能包含了示例代码、配置文件以及相关的JSP页面,这些资源可以帮助你更好地理解和实践Servlet监听器的使用。通过分析和运行这些示例,你可以直观地看到监听器如何响应特定的...
2. **Servlet-API 2.3**:发布于2000年,这个版本引入了Servlet Filter和Servlet Listener的概念。Servlet Filter允许开发者在请求到达目标Servlet之前或之后对其进行拦截和处理,用于实现如日志记录、性能监控、...
2. Servlet Listener:Servlet Listener 是一种特殊的 Servlet,可以对客户端的请求进行监听和处理。 在编写 Servlet 程序时,需要注意以下几点: 1. 需要继承 javax.servlet.http.HttpServlet 接口。 2. 需要重写...
通过`servletListener`这个文件名,我们可以推测这是一个关于Servlet监听器技术的示例代码或教程。可能包含如何创建监听器类,如何实现各种接口方法,以及如何在项目中部署和使用监听器等内容。深入学习这部分知识,...
在Java Web开发中,Servlet监听器(Servlet Listener)扮演着重要的角色,它是Servlet规范的一部分,允许开发者对Web应用程序中的特定事件进行监听和响应。在这个范例中,我们将深入探讨如何利用监听器来统计在线...
@ServletComponentScan // 扫描filter servlet listener @MapperScan("cn.springBoot.dao") // mybatis 扫描,没有这个不能注入 @SpringBootApplication public class Application { // TRACE 日志文件级别 public ...
在Java的Web开发中,Servlet和Listener是两个非常重要的组件,它们构成了动态Web应用程序的核心部分。Servlet主要负责处理客户端的请求并返回响应,而Listener则用于监听和响应各种Web应用程序中的事件。本教程将...
Servlet、Filter、Listener 详解 Servlet 是运行在服务器上的小程序,它可以使任何 Java 应用程序、浏览器或任何设备。Servlet 的客户端可以提出请求并获得该请求的响应。Servlet 在初始化后即驻留内存中,因此每次...
此外,为了更好地组织代码和实现模块化,可能会使用到Servlet Filter和Servlet Listener等高级特性。 在开发过程中,开发者可能使用了Eclipse、IntelliJ IDEA等IDE,配合Tomcat、Jetty等应用服务器进行部署和测试。...
6. Servlet Filter和Servlet Listener:实现请求拦截和监听器功能,如登录检查、日志记录等。 通过这个项目,学生可以深入理解Web应用开发的基本流程,掌握JSP、Servlet和MySQL的综合运用,同时了解如何组织和设计...
8. **Servlet Filter和Servlet Listener**:如何利用Filter拦截请求和响应,以及监听应用事件。 9. **Web应用部署**:介绍如何在Tomcat或其他应用服务器上部署JSP和Servlet应用。 学习这些内容对于理解J2EE Web开发...
Servlet Listener则可以监听特定事件,如Session创建、销毁,应用启动、关闭等,实现相应功能。 7. **异常处理**:良好的异常处理机制可以确保系统的稳定性和用户体验。在Servlet中,可以使用try-catch-finally结构...
4. Servlet Listener:Servlet Listener是一种监听器,用于监听Servlet的方法调用或属性改变。 5. MySQL:MySQL是一种关系型数据库管理系统,用于存储和管理数据。 6. JSP:JSP是一种使软件开发者可以响应客户端请求...
此外,书中可能还会涉及Servlet Filter和Servlet Listener,它们是Servlet容器中的重要组件,可用于拦截请求、监听事件,实现诸如登录验证、日志记录等功能。 对于JSP,书中会介绍EL(Expression Language)和JSTL...
- 学习Servlet Filter和Servlet Listener,它们可以拦截请求、修改响应或监听Web应用的事件。 10. **部署和运行**: - 使用Tomcat或其他Web服务器部署和运行Servlet和JSP应用。 在学习过程中,实践非常重要,...
本项目"ListenerDemo01"演示了如何结合JSP、Servlet以及Listener来实现用户登录、退出和注册功能,并通过监听器来追踪在线用户数量和列表。 首先,我们要理解什么是`Servlet Listener`。Servlet监听器是实现了...