监听器Listener

一、监听器

监听器是web应用程序事件模型的一部分,当web应用中的某些状态发生改变时,会产生相应的事件,监听器可以接收这些事件,并可以在事件发生时做相应的处理。

二、监听器常用的接口

2.1、javax.servlet.ServletContextListener

实现该接口可以在servlet上下文对象初始化或者销毁时得到通知

2.2、javax.servlet.ServletContextAttributeListener

实现该接口,可以 在servlet上下文的属性列表发生变化时得到通知

2.3、javax.servlet.http.HttpSessionListener

实现该接口可以在创建session后或者失效前得到通知

2.4、javax.servlet.http.HttpSessionActivationListener

实现该接口的对象,如果绑定到session中,当serssion被钝化或者激活时,servlet容器将通知该对象。

2.5、javax.servlet.http.HttpSessionAttributeListener

实现该接口,可以 在servlet上下文的属性列表发生变化时得到通知

2.6、javax.servlethttp.HttpSessionBindListener

实现该接口,可以使一个对象在绑定serssion或者从serssion中删除时得到通知。

2.7、javax.servlet.servletRequest

实现该接口,可以在请求对象初始化时或者被销毁时得到通知。

2.8、javax.servlet.ServletRequestAttributeListener

实现该接口,可以在请求对象中的属性发生变化是得到通知。

三、监听器的应用

3.1、HttpSessionBindingListener接口

定义实现HttpSessionBindingListener接口,当有session创建是在线人数+1,当session销毁时在线人数-1.

package demo.web.listener;

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

public class UserListener implements HttpSessionBindingListener {

	public void valueBound(HttpSessionBindingEvent arg0) {
		Constants.ONLINE_USER_COUNT ++;

	}

	public void valueUnbound(HttpSessionBindingEvent arg0) {
		Constants.ONLINE_USER_COUNT --;

	}

}

在web.xml中的简单配置

<listener>
  	<listener-class>demo.web.listener.UserListener</listener-class>
  </listener>

3.2、利用servletContextListener接口

在系统服务启动时,加载DataSource对象,获取数据库连接。

  1. 编写监听器,实现实用JNDI查找数据源。
  2. 将查找到的数据源保存在servletContext上下文中。
  3. 编写一个servlet,读取上下文,并从中查找到数据源。
  4. 在web.xml文件中配置监听器及servlet
public class DataSourceListener implements ServletContextListener{
  public void ContextInitialized(ServletContextEnvent e){
    ServletContext sc = e.getServletContext();
       Context cxt = new InitialContext();// 初始化上下文
       // 获取与逻辑名相关的数据源对象
       DataSource ds  =(DtaSource)cxt.lookup("java:comp/env/jdbc/news");
        // 将dataSource保存到servletContext上下文中
       sc.serAttribute("DS",ds);
    }
}

  servlet相关代码:

package demo.web.servlet;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyServlet3 extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
	   DataSource ds = (DataSource)getServletContext().getAttribute("DS");
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		super.doPost(req, resp);
	}

	@Override
	protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
			throws ServletException, IOException {
		super.service(arg0, arg1);
	}
}

  web.xml中的配置:

<servlet>
  	<servlet-name>myServlet</servlet-name>
  	<servlet-class>demo.web.servlet.MyServlet3</servlet-class>
  	<init-param>
  		<param-name>charSerContent</param-name>
  		<param-value>utf-8</param-value>
  	</init-param>
  </servlet>
  <servlet-mapping>
  	<servlet-name>myServlet</servlet-name>
  	<url-pattern>/demo/myServlet</url-pattern>
  </servlet-mapping>
<listener>
  	<listener-class>demo.web.listener.UserListener</listener-class>
</listener>

  

时间: 2024-10-21 00:41:33

监听器Listener的相关文章

javaweb学习总结(四十七)——监听器(Listener)在开发中的应用

监听器在JavaWeb开发中用得比较多,下面说一下监听器(Listener)在开发中的常见应用 一.统计当前在线人数 在JavaWeb应用开发中,有时候我们需要统计当前在线的用户数,此时就可以使用监听器技术来实现这个功能了. 1 package me.gacl.web.listener; 2 3 import javax.servlet.ServletContext; 4 import javax.servlet.http.HttpSessionEvent; 5 import javax.ser

servlet监听器Listener(理论+例子)

Listener采用了观察者模式(24种模式之一),Listener是servlet的监听器,他可以监听客户端的请求.服务器端的操作等, 通过监听器,可以自动激发一些操作.比如:监听在线用户数量 当增加一个HttpSession时,就会激发sessinCreated(HttpSessionEvent sce)方法,这样就可以给在线人数+1了. 常见的监听器接口: ServletContextAttributeListener 监听对servletContext属性的操作,比如删除.增加.修改属性

JavaWeb开发——servlet监听器 listener

一.Servlet监听器的概念 Servlet监听器是Servlet规范中定义的一种特殊类,用于监听ServletContext.HttpSession和ServletRequest等域对象的创建与销毁事件, 以及监听这些域对象中属性发生修改的事件. 监听对象: 1.ServletContext:application,整个应用只存在一个 2.HttpSession:session,针对每一个对话 3.ServletRequest:request,针对每一个客户请求 监听内容:创建.销毁.属性改

Javaweb基础---&gt;监听器listener(转发)

JavaWeb中的监听器 1.基本概念 JavaWeb中的监听器是Servlet规范中定义的一种特殊类,它用于监听web应用程序中的ServletContext, HttpSession和 ServletRequest等域对象的创建与销毁事件,以及监听这些域对象中的属性发生修改的事件. 2.Servlet监听器的分类 在Servlet规范中定义了多种类型的监听器,它们用于监听的事件源分别为ServletContext,HttpSession和ServletRequest这三个域对象 Servle

Servlet3.0学习总结(四)——使用注解标注监听器(Listener)

Servlet3.0学习总结(四)——使用注解标注监听器(Listener) Servlet3.0提供@WebListener注解将一个实现了特定监听器接口的类定义为监听器,这样我们在web应用中使用监听器时,也不再需要在web.xml文件中配置监听器的相关描述信息了. 下面我们来创建一个监听器,体验一下使用@WebListener注解标注监听器,如下所示: 监听器的代码如下: 1 package me.gacl.web.listener; 2 3 import javax.servlet.Se

Oracle故障排除—Oracle监听器listener不认数据库

1.启动Oracle数据库监听器执行su –oracle lsnrctl start后,执行lsnrctl status查看当前监听器状态,发现: 说明数据库的listener监听器已经启动起来了.但是没有显示Instance "LINXI", status READY,说明数据库监听器没有认到数据库. 2.具体处理办法就是重新注册一下,方法如图: 3.然后重新进行数据库监听器listener状态查询,显示:显示Instance "LINXI", status RE

Servlet监听器Listener

Listener实在servlet2.3中加入的,主要用于对Session,request,context等进行监控. 使用Listener需要实现响应的接口.触发Listener事件的时候,tomcat会自动调用Listener的方法. 在web.xml中配置标签,一般要配置在<servlet>标签前面,可配置多个,同一种类型也可配置多个 <listener> <listener-class>com.xxx.xxx.ImplementListener</list

过滤器(Filter)、拦截器(Interceptor)、监听器(Listener)

一.Filter 过滤器 1.简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能.例如实现URL级别的权限访问控制.过滤敏感词汇.压缩响应信息等一些高级功能. 它主要用于对用户请求进行预处理,也可以对HttpServletResponse 进行后处理.使用Filter 的完整流程:Filter 对用户请求

JavaWeb-18 (JDBC之分页与监听器listener)

JavaWeb-18 JDBC之分页与监听器listener 一.分页 1.分页概述:分页的结果就是要让指定的记录加载到内存 2.原因: 1.人的习惯 2.内存的限度(核心问题) 3.屏幕的限度 3.如何分页: 不同的环境方式不一样 3.1.数据库层面: select * from acount limit startIndex,size;//只是针对MySql而言(startIndex从0开始,size:共查询多少条记录) select * from acount limit 0,3; 第一页

【Listener】利用监听器Listener以MVC的思想通过JSP+Servlet+JDBC完成在线用户列表的输出

Servlet,监听器Listener与<[Filter]拦截器Filter>(点击打开链接)是JSP的三大核心组件,实际上监听器Listener相当于数据库里面的触发器,一旦用户触发了某种行为,则可以通过相关的Java文件执行相应的程序.用户在浏览网页的过程中,主要有打开浏览器的动作,对应的行为是Session的创建,可是,用户关闭浏览器的动作,并不是对应Session的消失,因此对于Session的消失我们意义不大:访问任意网页的动作,对应的行为是request请求的创建,request的