jsp/servlet之监听器

1,什么是监听器?

   其主要的功能就是监听Web的各种操作,当相关的操作触发后将产生的事件,并对此事件进行处理;

2,对application监听!

   对application监听,实际上就是对ServletContext(Servlet上下文)监听,主要使用ServletContextListener和ServletContextAttributeListener两个接口;

  • ServletContext状态监听:ServletContextListener接口;

对Servlet上下文状态监听可以使用javax.servlet.ServletContextListener接口,此接口的方法如下:

No方法类型描述
1public void contextInitialized(ServletContextEvent sce)普通容器启动时触发
2public void contextDestoryed(ServletContextEvent sce)普通容器销毁时触发

在ServletContext监听操作中,一旦触发了ServletContextListener接口中定义的事件后,可以通过ServletContextEvent进行事件的处理,此事件定义的方法如下:

No
方法
类型
描述
1
public ServletContext getServletContext()
普通
取得ServletContext对象

可以通过getServletContext()方法取得一个ServletContext对象的实例,

一个简单的ServletContextListenerDemo:

package com.keith.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class ServletContextListenerDemo implements ServletContextListener {

	/**
	 * context销毁时触发
	 */
	public void contextDestroyed(ServletContextEvent event) {
		System.out.println("容器销毁时触发--->"+event.getServletContext().getContextPath());
	}

	/**
	 * context加载的时候触发
	 */
	public void contextInitialized(ServletContextEvent event) {
		System.out.println("容器初始化---> "
				+ event.getServletContext().getContextPath());
	}

}

在web.xml里这样配置:

<listener>
      <listener-class>com.keith.listener.ServletContextListenerDemo</listener-class>
 </listener>
 

在web服务器关闭或者重启的时候会输出:容器初始化---> /jsp(jsp是我的工程名);信息;

  • ServletContext属性监听:ServletContextAttributeListener接口

对Servlet上下文属性操作监听,可以使用javax.servlet.ServletContextAttributeListener接口,对此接口定义的方法:

No方法类型描述
1public void attributeAdded(ServletContextAttribute Event scab)普通增加属性时触发
2public void attributeRemoved(ServletContextAttribute Event scab)普通删除属性时触发
3public void attributeReplaced(ServletContextAttribute Event scab)普通替换属性(重复设置)时触发

在上下文属性监听中,一旦触发了SerlvetContextAttributeListener接口中定义的事件后,可以通过ServletContextAttributeEvent进行事件的处理,此事件定义的方法如下:

No方法类型描述
1public String getName()普通取得设置的属性名称
2public Object getValue()普通取得设置的属性内容

 

对ServletContext属性的监听例子:ServletContextAttributeListenerDemo:

package com.keith.listener;

import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;

public class ServletContextAttributeListenerDemo implements
		ServletContextAttributeListener {

	/**
	 * 增加属性时触发
	 */
	public void attributeAdded(ServletContextAttributeEvent event) {
		System.out.println("---增加属性时--》属性名称:"+event.getName()+", 属性内容:"+event.getValue());
	}

	/**
	 * 移除属性时触发
	 */
	public void attributeRemoved(ServletContextAttributeEvent event) {
		System.out.println("---移除属性时--》属性名称:"+event.getName()+", 属性内容:"+event.getValue());
	}

	/**
	 * 替换属性时触发
	 */
	public void attributeReplaced(ServletContextAttributeEvent event) {
		System.out.println("---替换属性时--》属性名称:"+event.getName()+", 属性内容:"+event.getValue());
	}

}

 web.xml:

<listener>
      <listener-class>com.keith.listener.ServletContextAttributeListenerDemo</listener-class>
 </listener>

 在页面我们可以这样测试,观察控制台:

<%
       this.getServletContext().setAttribute("time:","2011年");
 %>
<%
       this.getServletContext().removeAttribute("time");
 %>

 3,对session监听

   在监听器中,针对于session的监听操作主要使用HttpSessionListener,HttpSessionAttributeListener和HttpSessionBindingListener接口:

  • session状态监听:HttpSessionListener接口:

当需要对创建或销毁session的操作进行监听时,可以试想javax.servlet.http.HttpSessionListener接口,此接口定义的方法如下:

No方法类型描述
1public void sessionCreated(HttpSessionEvent se)普通session创建时调用
2public void sessionDestoryed(HttpSessionEvent se)普通session销毁时调用

当session创建或销毁后,将产生HttpSessionEvent事件,此事件定义的方法如下:

No方法类型描述
1public HttpSession getSession()普通取得当前的session

session状态监听:

package com.keith.listener;

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class HttpSessionListenerDemo implements HttpSessionListener {

	/**
	 * session创建时触发
	 */
	public void sessionCreated(HttpSessionEvent event) {
		System.out.println("Session创建,SESSION ID == "+event.getSession().getId());
	}

	/**
	 * session销毁时触发
	 */
	public void sessionDestroyed(HttpSessionEvent event) {
		System.out.println("session销毁,SESSION ID == "+event.getSession().getId());
	}

}

web.xml:

<listener>
      <listener-class>com.keith.listener.HttpSessionListenerDemo</listener-class>
</listener>

 当访问一个动态页面的时候,观察后台!、

session的销毁操作:

当一个新用户打开一个新的动态页面时,服务器会为新用户分配一个session,并且触发HttpSessionListener接口中的sessionCreated()事件,但是在session有2种销毁方法:

1,调用HttpSession接口中的invalidate()方法,让一个session失效;

2,配置session的时间,在web.xml中这样配置的session的有效时间:

<session-config>
    <session-timeout>5</session-timeout>
</session-config>

session在5分钟后失效;默认的时间是30分钟;

  • session属性监听:HttpSessionAttributeListener接口;

在session监听中也可以对session的属性进行监听,这一点与监听servletContext属性的道理一样,要对session的属性操作监听,可以使用javax.servlet.http.HttpSessionAttribute Listener接口完成;此接口的定义方法如下:

No方法类型描述
1public void attributeAdded(HttpSessionBindingEvent se)普通增加属性时触发
2public void attributeRemoved(HttpSessionBindingEvent se)普通删除属性时触发
3public void attributeReplaced(HttpSessionBindingEvent se)普通替换属性时触发

当进行属性操作时,将根据属性的操作触发HttpSessionAttributeListener接口中的方法,每个操作方法都将产生HttpSessionbindingEvent事件,此事件定义的方法如下:

No方法类型描述
1public HttpSession getSession()普通取得session
2public String getName()普通取得属性名称
3public Object getValue()普通取得属性的内容

对session的属性操作监听:HttpSessionAttributeListenerDemo:

package com.keith.listener;

import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;

public class HttpSessionAttributeListenerDemo implements HttpSessionAttributeListener{
	
	/**
	 * 属性增加时触发
	 */
	public void attributeAdded(HttpSessionBindingEvent event) {
		System.out.println(event.getSession().getId()+",增加了属性---》属性名称:"+event.getName()+",属性内容:"+event.getValue());
	}

	/**
	 * 属性移除时触发
	 */
	public void attributeRemoved(HttpSessionBindingEvent event) {
		System.out.println(event.getSession().getId()+",移除了属性---》属性名称:"+event.getName()+",属性内容:"+event.getValue());
	}

	/**
	 * 属性替换时触发
	 */
	public void attributeReplaced(HttpSessionBindingEvent event) {
		System.out.println(event.getSession().getId()+",替换了属性---》属性名称:"+event.getName()+",属性内容:"+event.getValue());
	}

}

 web.xml:

<listener>
      <listener-class>com.keith.listener.HttpSessionAttributeListenerDemo</listener-class>
</listener>

 在页面中对session的setAttribute()/removeAttribute()进行测试;

  • session属性监听:HttpSessionBindingListener接口,以上的session监听接口都需要在web.xml文件中配置后才起作用,但是在Web中也提供了一个javax.servlet.http.HttpSessionBindingListener接口,通过此接口实现的监听程序可以不用配置直接使用,此接口定义的方法如下:
No方法类型描述
1public void valueBound(HttpSessionBindingEvent event)类型绑定对象到session时触发
2public void valueUnbound(httpSessionBindingEvent event)类型从session中移除对象时触发

以上的2个方法都将产生HttpSessionBindingEvent事件,下面通过此接口实现一个用户登陆信息监听的操作:

LoginUser:

package com.keith.listener;

import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;

public class LoginUser implements HttpSessionBindingListener {
	private String name;

	public LoginUser() {

	}

	public LoginUser(String name) {
		this.setName(name);
	}

	/**
	 * 在session中绑定
	 */
	public void valueBound(HttpSessionBindingEvent event) {
		System.out.println("---在session中保存LoginUser对象(name = "+this.getName()+"),session id = "+event.getSession().getId());
	}

	/**
	 * 在session中移除
	 */
	public void valueUnbound(HttpSessionBindingEvent event) {
		System.out.println("---从session中移除LoginUser对象(name = "+this.getName()+"),session id = "+event.getSession().getId());
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}

 在session.jsp中:

<%
      LoginUser user = new LoginUser("keith");
      session.setAttribute("info",user);
%>

 访问session.jsp时,看控制台的输出(统一方法测试下移除session时控制台的输出);

4,对request监听

   对request操作监听,主要使用ServletRequestListener和ServletRequestAttributeListener两个接口;

  • 请求状态监听:ServletRequestListener接口:

   当需要对用户的每次请求进行监听时,可以使用javax.servlet.ServletRequestListener接口,此接口的定义方法如下:

No方法类型描述
1public void requestInitalized(ServletRequestEvent sre)普通请求开始时调用
2public void requestDestroyed(ServletRequestEvent sre)普通请求结束时调用

ServletRequestListener接口一旦监听到事件后,将产生ServletRequestEvent的事件处理对象,此事件定义的方法如下:

No方法类型描述
1public ServletRequest getServletRequest()普通取得ServletRequest对象
2public ServletContext getServletContext()普通取得ServletContext对象

对用户的request进行监听:ServlteRequestListenerDemo:

package com.keith.listener;

import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;

public class ServlteRequestListenerDemo implements ServletRequestListener{
	
	/**
	 * request初始化时触发
	 */
	public void requestDestroyed(ServletRequestEvent event) {
		System.out.println("request初始化。http://"+event.getServletRequest().getRemoteAddr()+event.getServletContext().getContextPath());
	}

	/**
	 * request销毁时触发
	 */
	public void requestInitialized(ServletRequestEvent event) {
		System.out.println("request销毁。http://"+event.getServletRequest().getRemoteAddr()+event.getServletContext().getContextPath());
	}

}

 web.xml:

<listener>
      <listener-class>com.keith.listener.ServlteRequestListenerDemo</listener-class>
</listener>

 当我们访问工程的时候,看下控制台的输出!

  • request属性监听:ServletRequestAttributeListener接口

对request范围属性的监听可以使用javax.servlet.ServletRequestAttributeListener接口,此接口定义的方法如下:

 

No方法类型描述
1public void attributeAdded(ServletRequestAttributeEvent srae)普通属性增加时触发
2public void attributeReplaced(ServletRequestAttributeEvent srae)普通属性替换时触发
3public void attributeRemoved(ServletRequestAttributeEvent srae)普通属性删除时触发

加入监听器后,request属性的操作都会产生ServletRequestAttributeEvent事件,此事件定义的方法如下:

No方法类型描述
1public String getName()普通取得设置的属性名称
2public Object getValue()普通取得设置的属性内容

监听器request属性操作---ServletRequestAttributeListenerDemo

package com.keith.listener;

import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener;

public class ServletRequestAttributeListenerDemo implements
		ServletRequestAttributeListener {

	/**
	 * 增加属性时触发
	 */
	public void attributeAdded(ServletRequestAttributeEvent event) {
		System.out.println("---增加request属性--》属性名称:"+event.getName()+",属性内容:"+event.getValue());
	}

	/**
	 * 属性移除时触发
	 */
	public void attributeRemoved(ServletRequestAttributeEvent event) {
		System.out.println("---删除request属性--》属性名称:"+event.getName()+",属性内容:"+event.getValue());
	}

	/**
	 * 替换属性时触发
	 */
	public void attributeReplaced(ServletRequestAttributeEvent event) {
		System.out.println("---替换request属性--》属性名称:"+event.getName()+",属性内容:"+event.getValue());
	}

}

 web.xml:

<listener>
      <listener-class>com.keith.listener.ServletRequestAttributeListenerDemo</listener-class>
</listener>

 request.jsp:

<% 
      request.setAttribute("name","keith"); 
      request.setAttribute("date",new Date()); 
%>

 看下控制台的输出!

 

 

 

 

JSP——监听器篇 一、什么是监听器 监听器是Servlet规范中定义的一种特殊类,用于监听ServletContext、HttpSession和ServletRequest等域对象的创建和销毁事件 阅读详情

相关推荐

BMC的风扇控制 (Fan speed control)

这篇文章是我刚开始做风扇功能的时候写的,因为那时候都找不到主管要我报告的内容,所以报告完就顺便整理一下,最近因为在修控制学,之后应该会再补一篇和控制学相关的内容 (如果有空的话) BMC的风扇控制算一个蛮重要的功能,那这个功能包含了"TACH"和"PWM"这两个常用讯号怎么解读,还有最常用的控制演算法"PID(closed loop)"和"Stepwise(openloop)",而另外的Error control ,因为每家做法不同,就不会在这边作介绍 ##实作程式码是来自Facebook的openBM

yeiris的博客 1万+

JSP学习之过滤器与监听

【监听】 1. jsp页面: "index.jsp"                       "doindex.jsp":   String name=request.getParameter("name") ; User user=new User(); user.setId(1); user.setName(name); session.s

caibaozi0521的博客 268

保姆级教程:用MATLAB复现格拉斯哥大学FMCW雷达数据集多普勒谱(附完整代码与避坑指南)

本文提供了一份详细的MATLAB教程,指导如何复现格拉斯哥大学FMCW雷达数据集的多普勒谱分析。从环境准备、数据获取到距离压缩、MTI滤波、时频分析(STFT)以及结果后处理,涵盖了完整流程,并附有优化代码和避坑指南,特别适合雷达信号处理研究者和工程师。

weixin_28720767的博客 116

JSP详细篇——Servlet监听器

Servlet监听器

yaguanzhou2014的专栏 731

最邻近点对问题(Closest-Pair Problem):二维的分治解法详解

低维时,最邻近点对问题可以利用分治求解。但是网络上相关资料良莠不齐,对于3维甚至难有有价值的参考。最近恰巧梳理了123维最邻近点对问题的相关知识,故在此分享。这是该系列的第二篇,介绍二维情况的分治解法。

Carl_Rabbit的博客 1万+

A算法的蒙特卡洛树搜索

A*算法的蒙特卡洛树搜索 作者:禅与计算机程序设计艺术 1. 背景介绍 在人工智能和游戏开发领域,搜索算法是一个非常重要的研究方向。其中A算法和蒙特卡洛树搜索是两种广泛应用的经典算法。A算法是一种启发式搜索算法,通过评估各个节点到目标节点的启发式代价来引导搜索方向,在

AI天才研究院 1739

JSP页面实现servlet过滤器与servlet监听器(JSP中级技术)

JSP页面实现servlet过滤器与servlet监听器(JSP中级技术) 一、servlet过滤器 我们将会探讨…. 1、什么是servlet过滤器 2、servlet过滤器的开发步骤 3、实例 1、什么是servlet过滤器 •    servlet 过滤器(Filter )是小型的Web 组件,它们拦截请求和响应,以便查看、提取或以某种方式操作正在客户机和服务器之间交换的数据。

ljheee的博客 2758

FLUENT Meshing Watertight Geometry工作流入门 - 4 局部加密区域

总结一下本课程中学到的内容:我们了解了如何使用模型中特定兴趣区域的BOI和FOI局部尺寸控制来加密网格。然后,了解了如何使用Box类型的局部细化区域。最后,学习了Ansys Fluent Meshing Watertight Geometry Workflow的Offset Surface类型创建局部细化区域任务。

B_etter_Man的博客 6642

Servlet/jsp之监听器

1、所有的事件类均源自java.util.Event,并且监听器在以下三个不同级别中均可用:ServletContext、HttpSession、ServletRequest。监听器接口和注册 创建监听器的监听器接口属于javax.servlet和javax.servlet.http包的一部分。 注册监听器: 方法一: @WebListener public c

SOCODE的博客 306

Win7/10/11文件拖拽导致资源管理器闪退问题

最近老是遇到把文件从资源管理器拖动到微信或者浏览器时,资源管理器直接闪退的问题,一开始在公司遇到了还以为是电脑配置太低,直到被封闭在家办公,发现自己的高级电脑也有这个问题,那就来了解了解问题是出在什么地方把。

Nicer_feng's blog 1万+

机器人全局路线规划导读

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对全局路线规划导读做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容。

qq_35635374的博客 1504

[Servlet&JSP] 监听器的使用

在Servlet/JSP中除了ServletContextListener外,还有ServletRequestListener、HttpSessionListener等监听器,可以监听请求、会话对象生命周期;ServletRequestAttributeListener、HttpSessionAttributeListener、ServletContextAttributeListener可以监听

楚兴 1644

25 - GRACE Mascon数据缺失月份数据插值

本篇基于文章的相关内容和文章公开的奇异谱分析(SSA)插值算法程序包,对grace Mascon数据种缺失的月份进行 插值 ,总结了使用程序包的相关过程,可以将该程序应用到其他数据处理插值计算中。

weixin_43339605的博客 1843

05_JSP/Servlet技术

程序架构:C/S架构(客户端Client/服务器Server)&gt;B/S架构(浏览器Browser/服务器) B/S架构:请求/响应交互(浏览器&lt;&gt;服务器-应用服务器&lt;&gt;数据库服务器) 统一资源定位符URL(协议/主机/资源位置/参数)-资源描述符URI(Http请求)     http://localhost:8080(主机端口)/myweb(网站)/test....

Ftmyと博客 571

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

servlet/jsp

1.servlet基础 (1)什么是servlet? servlet就是sun公司用来扩展web服务器功能的组件规范,因为web服务器它通常只能够处理一些静态资源的请求,在生活中我们会需要到很多的需要加载动态资源的请求,而servlet刚好满足了它的这点要求,它是用来加载动态资源的。 (2)如何写一个servlet? 1.通常我们是先新建一个java类,新建的这个java类实现servlet这个接口或者继承HttpServlet这个抽象类,通常情况下我们都是用这个类来继承HttpServlet。 2.编译

行动之前 1064

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

JSP & Java 期末复习整理

page指令Cookie是Web服务器保存在客户端的一系列文本信息Cookie的作用对特定对象的追踪统计网页浏览次数简化登录安全性能容易信息泄露一个会话就是游览器与服务器之间的一次通话,包含游览器与服务器之间的多次请求,响应过程算数运算符关系运算符 (P13 符号等价关系)条件运算符Servlet 是一个 Java 程序,式服务器上运行以处理客户端请求并做响应的程序javac:Java编译器java:Java解释器jdb:Java调试器变量是在程序的执行过程中,其值可以改变的量。

2401_83703893的博客 1105

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Jsp/Servlet复习笔记-----第5章 过滤器和事件监听器

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34185320的博客 108

后端开发基础——JavaWeb(Servlet)

系统架构包括什么形式?C/S架构B/S架构C/S架构?Client / Server(客户端 / 服务器)C/S架构的软件或者说系统有哪些呢?QQ(先去腾讯官网下载一个QQ软件,几十MB,然后把这个客户端软件安装上去,然后输入QQ号以及密码,登录之后,就可以和你的朋友聊天了,就可以使用这个软件了。C/S架构的特点:需要安装特定的客户端软件。C/S架构的系统优点和缺点分别是什么?

2303_79357053的博客 1268

servlet与JSP期末复习考点梳理 42问42答

jsp 与 servlet的知识点梳理

Charlesix59的博客 803

Jsp/Servlet-----------第5章 过滤器和事件监听器

5.1.1 概念 过滤器(filter)是能够对请求和响应的头属性(header)和能容体(body)进行操作的特殊Web构件。与一般Web构件(如servlet,JSP)不同的是,过滤器自身并不直接生成Web响应,若干个过滤器可以依次对一个Web资源的请求和响应进行作用。 过滤器取代了早先的Servlet链接的功能。更主要的是,过滤器是Servlet2.3版本之后的标准Web构件。它的使用方法比

塞外游侠的专栏 3554

JavaWEB之Jsp基础知识总结_慕课手记

理论 第一章 javaWEB基础 1、桌面应用程序一般分为两种 B/S(Browser/Server)客户端浏览器和服务器 C/S(Client/Server)客户端和服务器端 2、WEB开发指的是 开发部署在远程服务器上的应用程序,该应用程序可以用浏览器访问 WEB应用是基于HTTP(Hyper text transfer protcol ,超...

dhhccsb16357的博客 323

servlet中过滤器和监听器的使用

过滤器和监听器过滤器拦截请求的方式:监听器的概念生命周期的对象和绑定数据监听 过滤器 概念:过滤器时servlet的一个组件,可以插入或者移除,可以拦截servlet的请求request和响应response,针对用户需要访问的数据或者资源做一些预处理的干预。 拦截请求的方式: 1. /login.jsp --表示拦截login.jsp的请求 2. /test/* --表示拦截当前目录下/test子目录的所有资源 3. *.jsp --表示拦截所有以jsp后缀的文件请求 4. / *

qq_41954201的博客 264

jsp中的web.xml(详细的)

1 <?xml version="1.0" encoding="ISO-8859-1"?> 2 <!-- 3 Licensed to the Apache Software Foundation (ASF) under one or more 4 contributor license agreements. See the NOTICE ...

weixin_30908941的博客 294
上一篇: jsp/servlet之过滤器
下一篇: javaWeb之表达式语言---初始EL
keithJava
博客等级 码龄16年 2粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值