Web应用中监听者的通知顺序按照DD中的定义顺序

Web应用中监听者的通知顺序按照DD中的定义顺序:

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>TestServlet1</servlet-name>
        <servlet-class>com.stono.servlet.listenerorder.TestServlet1</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>TestServlet1</servlet-name>
        <url-pattern>/a.do</url-pattern>
    </servlet-mapping>
    <listener>
        <listener-class>com.stono.servlet.listeners.MyHttpSessionListener2</listener-class>
        <listener-class>com.stono.servlet.listeners.MyHttpSessionAttributeListener</listener-class>
        <listener-class>com.stono.servlet.listeners.MyHttpSessionListener</listener-class>
    </listener>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

Listener:

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.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class MyHttpSessionListener2 implements HttpSessionListener {
    @Override
    public void sessionCreated(HttpSessionEvent arg0) {
        System.out.println("com.stono.servlet.listeners.MyHttpSessionListener2.sessionCreated(HttpSessionEvent)");
    }
    @Override
    public void sessionDestroyed(HttpSessionEvent arg0) {
        System.out.println("com.stono.servlet.listeners.MyHttpSessionListener2.sessionDestroyed(HttpSessionEvent)");
    }
}

Servlet:

package com.stono.servlet.listenerorder;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class TestServlet1 extends HttpServlet {
    private static final long serialVersionUID = 1L;
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession();
        session.setAttribute("a", "a");
        PrintWriter writer = resp.getWriter();
        writer.println("this is from com.stono.servlet.listenerorder.TestServlet1");
    }
}
时间: 2024-10-25 13:51:12

Web应用中监听者的通知顺序按照DD中的定义顺序的相关文章

监听者模式

监听者模式是观察者模式实现的一种,也属于Publish/Subscribe模式,被监听者触发某一事件后向监听者发送通知.在java中最常用的就是在编写GUI程序时,控件的事件监听了. 通常在编写java的GUI程序时,需要在控件上注册一个监听器,这个监听器需要开发人员自己编写,当控件被监听的事件触发后,监听器也会做出响应的反应. Frame frame = new Frame("java"); frame.setBounds(400, 300, 300, 200); frame.set

EntityFramework之监听者判断SQL性能指标

前言 当我们利用EF这个ORM框架时,我们可能会利用LINQ或者原生的SQL语句来进行数据操作,此时我们无法确定我们的代码是否会给数据库带来一定的负载,当给数据库带来一定的压力时,由于项目中对数据进行相应的操作实在是太多,我们无法准确的去进行定位,又或者我们不是专业的DBA,无法准确的去分析SQL性能的优劣,此时该怎么办呢?我们完全不需要DBA,我们可以通过相应的操作来判断一段SQL代码的好坏,这就是我们本节需要讲的内容,利用EF中监听者来判断SQL性能,在之前系列中也有提到,可以参考之前系列.

监听者

在web系统中,HttpServletRequest.HttpSession.ServletContext对象在web容器中遵循生成.运行.销毁这样的生命周期.当进行相关的监听配置后,web容器就会调用监听器上的方法,进行对应的事件处理. 1.监听接口和事件类 2.如何告诉容器有一个监听者 有两种方法可以进行监听者的配置,一种是在DD中配置,如果需要上下文初始化参数,也要在DD中配置: 在servlet 3.0中,可以利用注入的方式注入监听类(虽然监听器和过滤器不是servlet,但是它们都在同

web项目下的web.xml listener监听总结

监听域对象中属性的监听器 域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信息事件的监听器. 这三个监听器接口分别是ServletContextAttributeListener, HttpSessionAttributeListener 和ServletRequestAttributeListener,这三个接口中都定义了三个方法来处理被监听对象中的属性的增加,删除和替换的事件,同

获取元素样式对象 页面滚出 页面可是大小 添加监听事件 获取事件参数浏览器中位置 的兼容

/** * 获取浏览滚动出去的距离 * @returns {{scrollY: (Number|number), scrollX: (Number|number)}} */function scroll(){ return{ scrollY:window.scrollY||document.body.scrollTop||document.documentElement.scrollTop||0, scrollX:window.scrollX||document.body.scrollLeft|

【原】不定义Order属性,通过切面类的定义顺序来决定通知执行的先后顺序

[结论] 若不同切面类执行时,在没有定义“order属性”,而且切面类中触发增强通知的切入点都相同,则在切面类中的通知的执行顺序与该切面类在<aop:config>元素中“声明的顺序”相关,即先声明的切面类先执行,后声明的切面类后执行. [代码示例] 1 <aop:config> 2 <!-- 用户自定义的切面01,用于不同切面类执行顺序的测试 --> 3 <aop:aspect id="myMethod01Aspect" ref="

【Head First Servlets and JSP】笔记8:监听者

1.你不用了解所有监听者API,并不多,一共有8个.不过,你需要知道你能监听什么,以便在需要的时候可以查. 2.关于Session和Cookie.参见JavaWeb学习总结(十二)——Session by 孤傲苍狼 3.HttpSessionBindingListener 这是一个非常有用的监听者,为什么说它有用呢?因为它可以协助我们同步实际对象和数据库的信息.例如: package com.example; import javax.servlet.http.HttpSessionBindin

在Android应用程序中实现推送通知

几乎每一个应用程序的一个重要特性是支持推送通知的能力.使用推送通知,您可以更新用户,而不需要应用程序在任何时候运行或轮询服务器, 避免潜在的电池电量不足. 随着火力点云信息的介绍(FCM),谷歌使得在Android应用程序中实现推送通知变得容易了一点.FCM是谷歌云消息(GCM)的新版本和改进版本,您可以使用它将远程通知发送到客户机应用程序.对于将瞄准多个平台或需要利用先进的推操作(如分段推送)的应用程序,我们可以使用带有Azure通知集线器的FCM. 与GCM不同,FCM负责为您提供基本的消息

老男孩教育每日一题-2017年5月11-基础知识点: linux系统中监听端口概念是什么?

1.题目 老男孩教育每日一题-2017年5月11-基础知识点:linux系统中监听端口概念是什么? 2.参考答案 监听端口的概念涉及到网络概念与TCP状态集转化概念,可能比较复杂不便理解,可以按照下图简单进行理解? 将整个服务器操作系统比喻作为一个别墅 服务器上的每一个网卡比作是别墅中每间房间 服务器网卡上配置的IP地址比喻作为房间中每个人 而房间里面人的耳朵就好比是监听的端口 当默认采用监听0.0.0.0地址时,表示房间中的每个人都竖起耳朵等待别墅外面的人呼唤当别墅外面的用户向房间1的人呼喊时