Servlet-监听器Listener

来源:互联网 发布:蔬菜交易软件 编辑:程序博客网 时间:2024/04/30 22:27

Servlet-监听器Listener

sf2gis@163.com

2015年9月17日

 

1 目标:监听Web应用的各种事件,如生命周期,属性变化等。

2 原理:特殊的Servlet,在应用中某些事件发生时发出消息。

3 流程:配置Listener,响应事件。

4 方法:web.xml配置Listener

4.1 配置:在<Listerner>标签中,设置listener-class指定实现类。

4.2 响应事件:实现不同的接口,以响应不同的事件。包括应用、请求、session。

4.3 示例:监听请求的生命周期。

//web.xml

<?xmlversion="1.0" encoding="ISO-8859-1"?>

<!--

  Licensed to the Apache Software Foundation(ASF) under one or more

  contributor license agreements.  See the NOTICE file distributed with

  this work for additional informationregarding copyright ownership.

  The ASF licenses this file to You under theApache License, Version 2.0

  (the "License"); you may not usethis file except in compliance with

  the License. You may obtain a copy of the License at

 

     http://www.apache.org/licenses/LICENSE-2.0

 

  Unless required by applicable law or agreedto in writing, software

  distributed under the License is distributedon an "AS IS" BASIS,

  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,either express or implied.

  See the License for the specific languagegoverning permissions and

  limitations under the License.

-->

<web-appxmlns="http://xmlns.jcp.org/xml/ns/javaee"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee

                     http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"

  version="3.1"

  metadata-complete="true">

  <listener>

      <listener-class>lee.ResponseListener</listener-class>

  </listener>

</web-app>

//ResponseListener.java

package lee;

 

importjavax.servlet.ServletRequestEvent;

importjavax.servlet.ServletRequestListener;

importjavax.servlet.annotation.WebListener;

 

/**

 * Application Lifecycle Listenerimplementation class ResponseListener

 *

 */

@WebListener

public class ResponseListenerimplements ServletRequestListener {

 

    /**

     * Default constructor.

     */

    public ResponseListener() {

        // TODO Auto-generated constructor stub

    }

 

      /**

     * @seeServletRequestListener#requestDestroyed(ServletRequestEvent)

     */

    public voidrequestDestroyed(ServletRequestEvent arg0) {

         // TODO Auto-generated method stub

      System.out.println("Finishreq="+arg0);

    }

 

      /**

     * @seeServletRequestListener#requestInitialized(ServletRequestEvent)

     */

    public voidrequestInitialized(ServletRequestEvent arg0) {

         // TODO Auto-generated method stub

      System.out.println("Startreq="+arg0);

    }

     

}

//catalina.out

Startreq=javax.servlet.ServletRequestEvent[source=org.apache.catalina.core.ApplicationContextFacade@23848630]

Finishreq=javax.servlet.ServletRequestEvent[source=org.apache.catalina.core.ApplicationContextFacade@23848630]

5  方法:注记配置Listener

目标:简化配置Listener。

原理:容器识别注记。

流程:在web.xml中启用注记。生成处理类。设置注记。

方法:增加@WebListener

示例:监听请求

//处理类:ResponseListener.java

package lee;

 

import java.util.Date;

 

importjavax.servlet.ServletRequestEvent;

importjavax.servlet.ServletRequestListener;

importjavax.servlet.annotation.WebListener;

importjavax.servlet.http.HttpSessionEvent;

importjavax.servlet.http.HttpSessionListener;

 

/**

 * Application Lifecycle Listenerimplementation class ResponseListener

 *

 */

@WebListener

public class ResponseListenerimplements ServletRequestListener {

 

    /**

     * Default constructor.

     */

    public ResponseListener() {

        // TODO Auto-generated constructor stub

    }

 

      /**

     * @seeServletRequestListener#requestDestroyed(ServletRequestEvent)

     */

    public voidrequestDestroyed(ServletRequestEvent arg0) {

         // TODO Auto-generated method stub

      System.out.println("Finishreq="+arg0);

    }

 

      /**

     * @seeServletRequestListener#requestInitialized(ServletRequestEvent)

     */

    public voidrequestInitialized(ServletRequestEvent arg0) {

         // TODO Auto-generated method stub

      System.out.println("Startreq="+arg0);

    }

}

 

//结果:a.jsp请求

 

0 0
原创粉丝点击