码迷,mamicode.com
首页 > Web开发 > 详细

jsp 监听器

时间:2019-04-15 00:26:16      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:reac   session   override   foreach   ESS   ssi   har   bsp   mamicode   

  Servlet API提供了一系列的事件和事件监听接口。 上层的servlet/JSP应用能够通过调用这些API进行事件 驱动的开发。这里监听的所有事件都继承自 java.util.Event对象。监听器接口可以分为三类: ServletContext、HttpSession 和ServletRequest 。

一.监听器接口和注册

1. 监听器接口主要在 javax.servlet 和javax.servlet.http 的包中。有以下这些接口:

  • javax.servlet.ServletContextListener:它能够响应 ServletContext生命周期事件,它提供了 ServletContext创建之后和ServletContext关闭之前的 会被调用的方法。
  • javax.servlet.ServletContextAttributeListener:它能够 响应ServletContext范围的属性添加、删除、替换事 件。
  • javax.servlet.http.HttpSessionListener:它能够响应 HttpSession的创建、超时和失效事件
  • javax.servlet.http.HttpSessionAttributeListener:它能 响应HttpSession范围的属性添加、删除、替换事 件。
  • javax.servlet.http.HttpSessionActivationListener:它在 一个HttpSession激活或者失效时被调用。
  • javax.servlet.http.HttpSessionBindingListener:可以 实现这个接口来保存HttpSession范围的属性。当有 属性从HttpSession添加或删除时,
  • HttpSessionBindingListener 接口能够做出响应。
  • javax.servlet.ServletRequestListener:它能够响应一 个ServletRequest的创建或删除。
  • javax.servlet.ServletRequestAttributeListener:它能响 应ServletRequest范围的属性值添加、删除、修改事 件。
  • javax.servlet.AsyncListener:一个用于异步操作的监 听器,在第11章会进行更详细的介绍。

2. 编写一个监听器,只需要写一个Java类来实现对应 的监听器接口就可以了。在Servlet 3.0和Servlet 3.1中提 供了两种注册监听器的方法。

第一种是使用 WebListener注解。例如:

WebListener
public class ListenerClass implements ListenerInterface {
}

第二种方法是在部署描述文档中增加一个listener元 素。

</listener>
<listener-class>fully-qualified listener class</listener-cl
ass>
</listener>

   你可以在一个应用中添加多个监听器,这些监听器 是同步工作的。

二.Servlet Context 监听器

  ServletContext的监听器接口有两个: ServletContextListener和 ServletContextAttributeListener。

1. ServletContextListener

  ServletContextListener能对ServletContext的创建和 销毁做出响应。当ServletContext初始化时,容器会调用 所有注册的ServletContextListeners的contextInitialized 方 法。该方法如下:

void contextInitialized(ServletContextEvent event)

  当ServletContext将要销毁时,容器会调用所有注册 的ServletContextListeners的context Destroyed 方法。该 方法如下:

void contextDestroyed(ServletContextEvent event)

  contextInitialized 方法和contextDestroyed方法都会 从容器获取到一个 ServletContextEvent。 javax.servlet.ServletContextEvent是一个 java.util.EventObject的子类 ,它定义了一个访问 ServletContext的getServletContext 方法,通过这个方法能够轻松地获取到ServletContext。:

ServletContext getServletContext()

例:  AppListener类实现了ServletContextListener 接口,它在 ServletContext刚创建时,将一个保存国家编码和国家名 的Map放置到ServletContext中。

AppListener类

package listener;

import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

@WebListener
public class AppListener implements ServletContextListener{
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        
    }
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        ServletContext servletContext = sce.getServletContext();
        
        Map<String,String> countries = new HashMap<String,String>()    ;
        countries.put("ca", "Cannada");
        countries.put("us","United States");
        servletContext.setAttribute("countries",countries);
    }
}

  注意,contextInitialized 方法。它 通过调用getServletContext方法从容器获得了 ServletContext,然后创建了一个Map用于保存国家编码 和国家名,再将这个Map放置到ServletContext里。在实 际开发中,往往是把数据库里的数据放置到 ServletContext里。

countries.jsp用到了这个监听器。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c"  uri="http://java.sun.com/jsp/jstl/core"  %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Country list</title>
</head>
<body>
we operate in these countries:
<ul>
    <c:forEach items="${countries}"  var="country">
        <li>${country.value}</li>
    </c:forEach>
</ul>
</body>
</html>

结果(resulte)

技术图片

2.ServletContextAttributeListener

三. Session Listeners

四. ServletRequest Listeners

jsp 监听器

标签:reac   session   override   foreach   ESS   ssi   har   bsp   mamicode   

原文地址:https://www.cnblogs.com/jiangfeilong/p/10708169.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!