`

servlet监听器功能讲解及代码案例

    博客分类:
  • java
阅读更多
servlet监听器功能讲解及代码案例


监听器的功能很强大,但是往往一些初级工程师会忽略她,那么今天就对servlet的监听器很久域对象做一个分析及代码演示,分类如下图


那么我们分为三部分来讲解(案例按着 后面的来,还有一些监听器接口由于不经常用就不做分析例如 session的绑定 钝化活化 等):
一、application的监听  一般用来启动定时任务、初始化数据、加载配置文件
二、session的监听  --一般用来统计在线人数等
三、request的监听  --一般用来统计网站请求人数等

action
一、对application的监听
  application在我们服务器中只会出现一次,是在项目启动的时候,那么我们这时候想可不可以给他加个监听那么在项目启动的时候我们就可以处理一些自己的事情  比如项目启动的时候我们初始化一下数据、启动一些定时任务 那么这样我们就不用再去操心这几个功能了,因为在项目启动的时候已经帮我们完成了
   一般监听器都是一个普通的类然后实现了一节监听器的接口,那么我们接下里接写个项目启动监听到application的案例

监听器代码
public class ContextLinstener implements ServletContextListener{

	@Override
	public void contextInitialized(ServletContextEvent sce) {//初始化项目启动  application产生 则触发该方法
		System.out.println("====开始初始化----区县---数据======");
		CacheData.getCitys();//实现类里面是静态f方法
		System.out.println("==========初始化数据----区县---结束,开始初始化省市数据==========");
		CacheData.getProvinces();
		System.out.println("============初始化数据----省市---结束========");
		//启动任务
		System.out.println("=============启动定时任务读取用户生日数据==========");
		TimeTask.timer4();//调用定时任务
	}
	@Override
	public void contextDestroyed(ServletContextEvent sce) {//关闭
		// TODO Auto-generated method stub
		//项目关闭的时候触发
	}
}

CacheData类里面的代码

public class CacheData {
	public static List<CityModel> cms=new ArrayList<>();
	//静态变量是全局的  使用静态缓存的数据时   写CacheData.cms就行了
	public static List<ProvinceModel> pms=new ArrayList<>();
	
	public static void getCitys(){
		CityService cs=new CityService();
		cms=cs.doGetCitys();
		System.out.println("区县总共"+cms.size()+"条数据");
	}
    public static void getProvinces(){
    	ProvinceService ps=new ProvinceService();
    	pms=ps.doGetProvinces();
    	System.out.println("省市总共"+pms.size()+"条数据");
	}
}


TimeTask类里面的代码
public class TimeTask {
	    public static void main(String[] args) {  
	        //timer1();  
	        //timer2();  
	        //timer3();  
	        timer4();  
	    }  
	    // 第一种方法:设定指定任务task在指定时间time执行 schedule(TimerTask task, Date time)  
	    public static void timer1() {  
	        Timer timer = new Timer();  
	        timer.schedule(new TimerTask() {  
	            public void run() {  
	                System.out.println("-------设定要指定任务--------");  
	            }  
	        }, 2000);// 设定指定的时间time,此处为2000毫秒  
	    }  
	  
	    // 第二种方法:设定指定任务task在指定延迟delay后进行固定延迟peroid的执行  
	    // schedule(TimerTask task, long delay, long period)  
	    public static void timer2() {  
	        Timer timer = new Timer();  
	        timer.schedule(new TimerTask() {  
	            public void run() {  
	                System.out.println("-------设定要指定任务--------");  
	            }  
	        }, 1000, 1000);  
	    }  
	  
	    // 第三种方法:设定指定任务task在指定延迟delay后进行固定频率peroid的执行。  
	    // scheduleAtFixedRate(TimerTask task, long delay, long period)  
	    public static void timer3() {  
	        Timer timer = new Timer();  
	        timer.scheduleAtFixedRate(new TimerTask() {  
	            public void run() {  
	                System.out.println("-------设定要指定任务--------");  
	            }  
	        }, 1000, 2000);  
	    }  
	     
	    // 第四种方法:安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行.  
	    // Timer.scheduleAtFixedRate(TimerTask task,Date firstTime,long period)  
	    public static void timer4() {  
	        Calendar calendar = Calendar.getInstance();  
	        calendar.set(Calendar.HOUR_OF_DAY, 16); // 控制时  
	        calendar.set(Calendar.MINUTE, 9);       // 控制分  
	        calendar.set(Calendar.SECOND, 0);       // 控制秒  
	  
	        Date time = calendar.getTime();         // 得出执行任务的时间,此处为今天的1点
	  
	       // System.out.println(time);
	        Timer timer = new Timer();  
	        timer.scheduleAtFixedRate(new TimerTask() {  
	            public void run() {  
	                System.out.println("-------开始跑批,查询今日过生日的人--------");  
	                //跑批,得出有谁今天谁生日  
	                //发短信  或者邮件
	            }  
	        }, time, 1000 * 60 * 60 * 24);// 这里设定将延时每天固定执行  
	    }  
	}  



第二类监听器 session监听器
我们都知道session在用户访问的时候会产生那么这个时候我们写一个session的监听只要有用户访问都能知道,这个时候我们在applicationcontest中记录一下,当saeeion过时了 那么就把我们刚才记录
的数据减去就好了

session监听器代码如下

public class SessionLinstener implements HttpSessionListener {

	//要实现session监听的接口 只有这样当有用户访问产生sessiion时才能触发//sessionCreated
    public void sessionCreated(HttpSessionEvent se) {
        // TODO Auto-generated method stub
    	System.out.println("session已经创建");
    	ServletContext context = se.getSession().getServletContext();
        Integer count = (Integer) context.getAttribute("peopleOnline");
        if (count == null) {
            count = 1;
        } else {
            count++;
        }
        context.setAttribute("peopleOnline", count);
    }
	/**
     * @see HttpSessionListener#sessionDestroyed(HttpSessionEvent)
     */
    public void sessionDestroyed(HttpSessionEvent se) {
        // TODO Auto-generated method stub
    	 System.out.println("session正在被销毁");
    	 ServletContext context = se.getSession().getServletContext();
         Integer count = (Integer) context.getAttribute("peopleOnline");
         count--;
         context.setAttribute("peopleOnline", count);
    }
}

//那么我们记录的这个在线用户信息怎么打印或显示出来呢?
//可以在jsp中这样写   当前在线人数为:${applicationScope.peopleOnline }


第三类监听 可以坚挺到request的创建和销毁,什么是request就是用户访问我们的网站任何一次请求都是requset,那么我们可以利用这一特性去记录我们网站的访问量
那么具体代码是怎么实现的呢?
public class RequestLinstener implements ServletRequestListener {

	/**
     * @see ServletRequestListener#requestInitialized(ServletRequestEvent)
     */
 //同样的只用我们实现了ServletRequestListener接口在有请求的时候才能触发这个方法
    public void requestInitialized(ServletRequestEvent sre) {
        // TODO Auto-generated method stub
    	System.out.println("request被创建");
    	//统计网站访问量
    	ServletContext context = sre.getServletRequest().getServletContext();
        Integer count = (Integer) context.getAttribute("requestCount");
        if (count == null) {
            count = 1;
        } else {
            count++;
        }
        context.setAttribute("requestCount", count);
    }
	/**
     * @see ServletRequestListener#requestDestroyed(ServletRequestEvent)
     */
    public void requestDestroyed(ServletRequestEvent sre) {
        // TODO Auto-generated method stub
    	System.out.println("request正在销毁");
    }
}
那么这个数据我在页面上怎么显示出来呢?
访问量:${applicationScope.requestCount }


分享到:
评论

相关推荐

    servlet--listener 各种接口的简单例子

    在Java的Web开发中,Servlet和Listener是两个非常重要的组件,它们构成了动态Web应用程序的核心部分。...这个"Servlet--Listener 各种接口的简单例子"是一个很好的起点,它将引导你一步步探索Servlet监听器的强大功能。

    j2ee源代码 案例代码

    7. **CH8:过滤器和监听器** - 阐述Servlet Filter和Listener的概念,它们用于拦截请求,实现用户会话管理和应用程序事件监听。 8. **CH10:MVC(Model-View-Controller)设计模式** - 可能涉及到JSP和Servlet在...

    Servlet培训课件(中软国际)

    接下来,"Servlet_2.PPT"可能涉及Servlet的高级特性,如Servlet过滤器和监听器。过滤器允许在请求到达Servlet之前进行预处理,或在响应离开Servlet之后进行后处理,可以用于实现登录检查、内容编码转换等功能。而...

    java监听器学习 统计在线人数

    在Java Web开发中,监听器(Listeners)是用于监听特定事件的重要组件,它们可以扩展应用程序的功能,无需修改现有的代码。本教程将深入讲解如何利用Java的监听器机制来统计在线人数,具体涉及到...

    深入Java Servlet网络编程

    Java Servlet是Java Web开发中的核心组件之一,它主要用于构建动态Web应用程序。..."深入Java Servlet网络编程"这本书或资料可能包含这些实践案例和详细讲解,帮助读者深入理解和掌握Java Servlet在网络编程中的应用。

    达内培训课件-Servlet

    6. **Servlet的高级特性**:如多线程处理、过滤器(Filter)、监听器(Listener)等。 在学习过程中,建议动手实践,编写自己的Servlet,结合实际项目理解Servlet的工作流程,这将有助于巩固理论知识,并提高编程...

    深入Java Servlet 网络编程阅读器Part3

    监听器扩展了Servlet的功能,可以实现更精细的控制。 7. **MVC设计模式**: - Model-View-Controller模式常用于Servlet应用中,将业务逻辑、数据展示和用户交互分离,提高代码的可维护性和复用性。 8. **JSP与...

    java web整合开发王者归来光盘代码-第七章 servlet章节 (JSP+Servlet+Struts+Hibernate+Spring)

    在这个特定的案例中,我们关注的是第七章关于Servlet的内容,结合了JSP(JavaServer Pages)、Servlet、Struts、Hibernate以及Spring这五种技术。以下是这些技术的相关知识点: 1. **Servlet**:Servlet是Java平台...

    servlet和jsp学习指南

    - 探索Servlet的过滤器(Filter)和监听器(Listener)机制,以及它们在应用中的实际应用场景。 2. JSP技术的原理和应用 - JSP是一种易于使用的模板技术,其文件扩展名通常为.jsp,可以看作是Servlet的一种简化...

    JavaWeb项目案例1.zip

    - **部署描述符(web.xml)**:配置文件,定义Servlet、过滤器、监听器等组件及其配置。 - **容器**:如Tomcat、Jetty等,它们提供运行JavaWeb应用的环境,管理Servlet的生命周期。 4. **动态网页开发**: - **...

    Servlet学习资料,包含ppt等内容(JAVA)

    5. Filter和Listener:讲解Servlet容器中的过滤器(Filter)和监听器(Listener)的概念,以及它们在实际应用中的作用,如登录验证、日志记录等。 6. MVC模式与Servlet:讨论Servlet如何与Model(模型)和View(视图...

    servlet_filter_listener

    `chapter02.docx`可能包含的是关于Servlet、Filter和Listener的第二章内容,详细讲解了这三个组件的实现细节、配置方法以及实际应用案例。而`myblog_v2`可能是一个示例项目,展示了如何在实际的博客系统中运用这些...

    韩顺平servlet教程视屏

    - **监听器(Listener)**:了解监听器的作用及其实现方式,如监听应用程序启动和关闭事件等。 - **会话管理(Session Management)**:讲解如何利用HttpSession对象管理用户的会话状态。 ### 学习建议 - **动手实践**...

    Servlet与JSP核心编程 (第二版)_

    书中还可能涵盖过滤器(Filter)和监听器(Listener)的概念,它们是Servlet容器的重要扩展机制。过滤器可以对请求和响应进行拦截处理,例如实现权限控制、字符编码转换等功能;监听器则可以监控Web应用程序中的特定...

    servlet青鸟源码(1)

    Web应用的部署描述符`web.xml`用于配置Servlet、Filter和监听器,定义它们的映射关系和初始化参数。 9. **动态部署** 在现代的Java EE环境中,Servlet可以实现热部署,即修改源代码后无需重启服务器即可看到更新...

    Core Servlet ppt

    "Core Servlet ppt"是一个关于Servlet技术的详细讲解资料,适合初学者和有一定基础的开发者进行深入学习。这份资料通过PPT的形式,将Servlet的核心概念、工作原理和实际应用进行了清晰的阐述。 1. **Servlet概述** ...

    JavaWeb开发技术_教材案例源代码.rar

    总的来说,这个压缩包提供了一个全面的JavaWeb教学平台,通过实际案例代码,让学习者能够动手实践,加深对理论知识的理解,提高编程能力。无论是初学者还是有一定基础的开发者,都可以从中受益,提升自己的JavaWeb...

    j2ee技术web层servlet和jsp.zip

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

    动力节点老杜servlet学习笔记.zip

    这是Servlet配置的主要方式,定义了Servlet的URL映射、初始化参数、过滤器和监听器等。例如: ```xml &lt;servlet&gt; &lt;servlet-name&gt;MyServlet&lt;/servlet-name&gt; &lt;servlet-class&gt;com.example.MyServlet&lt;/servlet-class&gt; ...

Global site tag (gtag.js) - Google Analytics