`

j2ee20:servlet04监听器(监听四大web域)(用于访问人数的统计)、mvc模式的引入

    博客分类:
  • j2ee
 
阅读更多

第一:概念

1.监听器listener:一个对象去监听另外一个对象的变化(监听器的目的在于掌握什么时候监听,知道在什么时候监听之后就可以在这个方法里写一些代码了)
2.在四大web域中好多对象都不用程序员自己创建,因此这些对象的生命周期都不由程序员控制。但是由于不受程序员控制,因此需要通过监听器来监听这些内置对象。
3.监听器类监听session对象的创建和销毁,实现HttpSessionListener接口实现监听session的创建和销毁。
创建监听器类之后就要创建该对象,在web.xml中配置之后就可以让配置文件去创建。(web.xml是在启动服务器的时候加载的,因此写在web.xml中的监听器就会被加载执行了,去执行的先是构造函数,然后这个监听器类此时处于等待状态,等待监听session 的变化)
4.常用的监听器:
 ----1. 实现 HttpSessionListener接口:监听session对象的创建和销毁(也就是监听session的声明周期)。
把启动服务器就需要执行的代码放在构造函数中,因为构造函数会在启动服务器的时候就会执行。把统计人数的代码写在sessionCreated这个方法中,因为该方法在每次创建session的时候会被执行。
----2.实现HttpSessionAttributeListener接口:监听session对象的状态(属性)的变化(也就是监听该对象封装的值的变化:添加、删除、替换)
---3.实现ServletContextListener接口:监听application对象的声明周期
application在启动服务器的时候被创建,因此在启动服务器的时候就会执行监听器的init初始化方法。
application对象就是上下文对象,翻译过来就是这个意思
---4.实现ServeltContextAttributeListener接口
---5.实现ServletRequestListener接口:监听request对象
---6.实现ServletRequestAttributeListener接口:监听request属性的变化
5.访问人数的统计(不是在线人数的统计):区别在于访问人数的统计可以关闭客户端,在线人数的统计必须每个客户端都开着。
把关于访问人数的统计放在session的声明周期这个监听器里。当每次创建一个session对象的时候就在application中保存一个数并每次加1。
之所以要把数放在application对象中,是因为application对象在关闭服务器的时候才销毁,这样即使关闭浏览器(session销毁)也不会影响。
6.程序的开发模式:
javaBean:一个可以被重复使用的组件。servlet调用javabean(相当于是dao,任何类都是javabean(普通的java类),但是在这里只的是dao)
model1:mv模式,请求由jsp接收,由jsp响应。代码处理和页面显示都由jsp处理。
model2:mvc模式:对程序的处理都放在了servlet中了,对页面的显示交给了jsp。model:访问层是个javaBean(包括entity和dao,entity是数据bean,dao是数据访问bean)  view:数据显示层(视图)  control:控制层(接收、处理(调用javaBean)、响应)


总结:过滤器是对四大web域的过滤,先对请求进行过滤,过滤通过才能请求servlet
监听器是监听四大web域,监听四大web域对象的状态的变化。

 

 

第二:代码实现

1.配置web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" version="2.5"><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list><listener><listener-class>com.comm.SessionListener</listener-class></listener><listener><listener-class>com.comm.SessionAttributeListener</listener-class></listener><listener><listener-class>com.comm.RequestListener</listener-class></listener><listener><listener-class>com.comm.ApplicationListener</listener-class></listener><servlet><servlet-name>exitServlet</servlet-name><servlet-class>com.action.ExitServlet</servlet-class></servlet><servlet-mapping><servlet-name>exitServlet</servlet-name><url-pattern>/exitServlet</url-pattern></servlet-mapping></web-app>

 

 

2.编写session监听器类,监听登录人数的统计

package com.comm;import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
/**
 * HttpSessionListener:
 *  监听session对象的创建和销毁
 * HttpSessionAttributeListener
 *  监听session状态的变化
 *
 *
 * ServletContextListener
 * ServletContextAttributeListener
 *
 * ServletRequestListener
 * ServletRequestAttributeListener
 * **/

public class SessionListener implements HttpSessionListener {
 public SessionListener()
 {
  System.out.println("-------------SessionListener");
 }
 @Override
 public void sessionCreated(HttpSessionEvent hse) {
  // TODO Auto-generated method stub
  
  //System.out.println("--------------sessionCreated");
  /**
   * 统计已访问多系统的人数
   * **/
  int num=1;
  ServletContext application = hse.getSession().getServletContext();
  
  Object obj = application.getAttribute("num");
  if(obj!=null)
  {
   num=(Integer)obj;
   num++;
  }
  application.setAttribute("num", num);
  
 }
 @Override
 public void sessionDestroyed(HttpSessionEvent hse) {
  System.out.println("--------------sessionDestroyed");
  
 }}

 

3.监听session对象的属性变化

package com.comm;import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
public class SessionAttributeListener implements HttpSessionAttributeListener { public SessionAttributeListener()
 {
  System.out.println("------------------SessionAttributeListener");
 }
 @Override
 public void attributeAdded(HttpSessionBindingEvent hsbe) {
  // TODO Auto-generated method stub
  System.out.println("------------------attributeAdded");
 }
 @Override
 public void attributeRemoved(HttpSessionBindingEvent hsbe) {
  // TODO Auto-generated method stub
  System.out.println("------------------attributeRemoved");
 }
 @Override
 public void attributeReplaced(HttpSessionBindingEvent hsbe) {
  // TODO Auto-generated method stub
  System.out.println("------------------attributeReplaced");
 }
}

 

4.监听application对象的创建和销毁

package com.comm;import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class ApplicationListener implements ServletContextListener { public ApplicationListener()
 {
  System.out.println("================ApplicationListener");
 }
 @Override
 public void contextDestroyed(ServletContextEvent sce) {
  // TODO Auto-generated method stub
  System.out.println("===============contextDestroyed");
 }
 @Override
 public void contextInitialized(ServletContextEvent sce) {
  // TODO Auto-generated method stub
  //sce.getServletContext().setAttribute(arg0, arg1)
  System.out.println("===============contextInitialized");
 }}

 

5.监听request对象的创建和销毁

package com.comm;import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
public class RequestListener implements ServletRequestListener { public RequestListener()
 {
  System.out.println("***********RequestListener");
 }
 @Override
 public void requestDestroyed(ServletRequestEvent arg0) {
  // TODO Auto-generated method stub
  System.out.println("***********requestDestroyed");
 }
 @Override
 public void requestInitialized(ServletRequestEvent arg0) {
  // TODO Auto-generated method stub
  System.out.println("***********requestInitialized");
 }}

分享到:
评论

相关推荐

    J2EE Servlet 2.5中文文档

    9. **MVC模式支持**:虽然Servlet本身并不直接支持MVC(Model-View-Controller)模式,但开发者可以通过Servlet处理请求,搭配JSP(JavaServer Pages)作为视图,以及自定义模型类来实现这一模式。 10. **国际化与...

    jsp ssh mvc java web j2ee网络商城+论文+源码 购物系统网页设计

    2. SSH(Spring、Struts、Hibernate):SSH是Java Web开发中的一个经典框架组合,Spring提供了依赖注入和面向切面编程,Struts是MVC模式的应用框架,而Hibernate则是一个对象关系映射(ORM)工具,用于简化数据库...

    J2EE中Servlet技术帮助文档(超详细和易懂)

    在web.xml文件中,我们通过&lt;Servlet&gt;、&lt;Servlet-Mapping&gt;等元素来配置Servlet,指定Servlet的类名、URL模式等。 四、Servlet生命周期 1. 加载与初始化:当Servlet容器首次接收到对Servlet的请求时,会加载Servlet类...

    韩顺平.j2ee视频实战教程servlet迅雷地址

    根据提供的信息,我们可以了解到这是一套由韩顺平老师教授的J2EE视频实战教程,主要聚焦于Servlet技术。接下来,我们将对这一课程的主要知识点进行详细的解析与介绍。 ### J2EE简介 J2EE(Java 2 Platform, ...

    j2ee技术web层servlet和jsp.zip

    此外,书中可能还会讨论如何使用Servlet过滤器和监听器来增强功能,以及如何利用JSP标签库(JSTL)和自定义标签来简化视图层的开发。 "epasser.aydc.com.cn.txt"可能是一个日志文件或者包含了一些学习资源的链接,...

    J2EE核心模式

    ### J2EE核心模式知识点详解 #### 一、J2EE概述 J2EE(Java 2 Platform, Enterprise Edition)是Sun Microsystems公司推出的一种企业级应用开发平台标准,旨在简化大型分布式系统的开发工作。J2EE的核心优势在于其...

    5 j2ee体验之Web建立、发布与运行.rar

    3. **配置**:在部署描述符web.xml中,可以配置应用的初始化参数、过滤器、监听器等,以定制应用的行为。 四、Web应用的运行 1. **启动应用**:启动应用服务器后,用户可以通过浏览器访问应用的URL,例如...

    J2EE应用小程序

    7. **部署描述符**:在J2EE应用中,部署描述符(如web.xml)定义了应用的配置信息,如Servlet、过滤器、监听器的映射,以及安全和会话配置等。 8. **EJB(Enterprise JavaBeans)**:虽然描述中没有明确提及,但...

    servlet_src源代码

    8. **监听器(Listener)**:监听器如`ServletContextListener`、`ServletRequestListener`等,可以在特定事件(如Web应用启动、Servlet上下文创建等)发生时执行自定义逻辑。 9. **MVC模式**:Servlet常与Model-...

    非常简单的J2EE购物车

    8. **过滤器和监听器**:在J2EE应用中,过滤器(Filter)可以用来拦截和修改请求或响应,监听器(Listener)用于监听特定事件,如会话的创建和销毁。这些组件可以用来实现功能,如登录验证、权限控制和会话超时提醒...

    j2ee 1.6 帮助文档

    6. **JSP/Servlet**:Web层的主要技术,JSP用于视图,Servlet用于控制逻辑。 7. **JNDI(Java Naming and Directory Interface)**:查找和管理资源,如数据库连接池。 8. **JAF(JavaBeans Activation Framework...

    J2EE课程设计报告

    - **Model II**:基于MVC的架构,使用Servlet作为控制器,JSP作为视图,JavaBeans作为模型,适合复杂的应用程序。 #### 五、串口通信 - **定义**:串行通信接口(Serial Communication Interface)是指数据一位一位...

    MVC模式的简介资料

    Java中MVC模式的应用尤为突出,比如在SUN的PetStore示例应用中就使用了MVC模式,这使得MVC成为Web应用程序开发的标准模式之一。 #### 三、MVC模式的关键概念与实现 MVC模式的关键在于将应用逻辑分解为三个互不干扰...

    简单的J2EE项目

    7. **部署描述符**:如`web.xml`文件,这是Web应用的配置文件,定义了Servlet、过滤器、监听器等组件及其行为。在J2EE项目中,部署描述符对于理解和配置应用至关重要。 8. **版本管理**:项目可能使用版本控制系统...

    j2ee web端知识及案例

    综上所述,J2EE Web端知识涵盖了Web容器、Servlet、JSP、MVC框架、标签库、过滤器与监听器、会话管理、安全性、Ajax与jQuery、RESTful API等多个层面。通过深入学习和实践这些知识点,你可以构建高效、稳定的Java ...

    简单的j2ee项目

    10. **Web.xml配置**:每个J2EE应用都有一个web.xml文件,它是应用的部署描述符,定义了Servlet、过滤器、监听器等组件。 11. **MVC(Model-View-Controller)模式**:在J2EE项目中,理解如何实现MVC架构对于组织...

    实用J2EE设计模式编程指南

    - **观察者模式**:J2EE中的事件驱动模型就应用了观察者模式,例如JSF(JavaServer Faces)中的组件和监听器。 **3. EJB设计模式** - **会话bean和消息驱动bean**:会话bean用于客户端交互,而消息驱动bean用于处理...

    J2EE WEB开发的学习ppt

    4. **过滤器与监听器**:Filter用于在请求到达Servlet之前或之后进行预处理和后处理,Listener可以监听Web应用中的特定事件,如session的创建和销毁。 5. **会话管理**:理解HTTP协议无状态的特点,学习如何使用...

    J2EE 经典实例详解(1-100)

    实例可能涵盖了Servlet的生命周期、请求处理、会话管理、过滤器和监听器等内容。 2. **JSP开发**:JSP是用于生成动态网页的技术,它结合了HTML和Java代码。实例可能包含JSP脚本元素、表达式语言(EL)、自定义标签...

Global site tag (gtag.js) - Google Analytics