在Servlet API中有这样一个ServletContextListener接口,他能过监听servletContext的生命周期,也就是web应用的生命周期。 servletContextListener接口中定义了两个方法,分别用于监听web应用的创建和销毁,利用这两个方法可以完成对网站访问人数进行统计。 下面用一个实例来说明: 首先建一个InitListener.java,用来监听每一web应用的创建,其原理是这样的,每有一个用户访问该网站(jsp),服务器必定会启动一个web应用,可以通过继承servletContextListener来监听web的启动,从而统计来访人数。 InitListener.java:
.. code:: java
package com.listener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class InitListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent sce){
System.out.println("application is Initialized.");
//获取ServletContext对象
ServletContext context=sce.getServletContext();
try{
//从文件中读取计数器的数值
BufferedReader reader=new BufferedReader(
new InputStreamReader(context.getResourceAsStream("/count.txt")));
int count=Integer.parseInt(reader.readLine());
System.out.println(count);
reader.close();
//把计数器对象保存到Web应用范围
context.setAttribute("counter",count);
}catch(IOException e){
e.printStackTrace();
}
}
public void contextDestroyed(ServletContextEvent sce){
System.out.println("application is Destroyed.");
//获取ServletContext对象
ServletContext context=sce.getServletContext();
//从Web应用范围获得计数器对象
int counter=(Integer)context.getAttribute("counter");
if(counter != 0){
try{
//把计数器的数值写到count.txt文件中,这里最好把路径输出一下,网站运行时的物理路径
String filepath=context.getRealPath("");
filepath=filepath+"/count.txt";
System.out.println(filepath);
PrintWriter pw=new PrintWriter(filepath);
counter++;//统计数量累加
System.out.println(counter);
pw.println(counter);
pw.close();
} catch(IOException e) {
e.printStackTrace();
}
}
}
}
配置web.xml文件:
::
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:javaee="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<listener>
<listener-class>com.listener.InitListener</listener-class>
</listener>
</web-app>
建一个index.jsp页面:
::
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
我是打酱油的
<body>
</body>
</html>
这样每次启动系统都会读取counter.txt文件中的数字,然后在web应用关闭的时候进行加一,存储。其实这些数据存储在数据库中更方便一点。这个就自由发挥了。
ServletContextListener的运用有很多,比如说缓存的创建等等。
扩展阅读: 运用ServletContextListener在服务器启动和关闭时创建和关闭缓存 <http://www.qqgb.com/Program/Java/JavaBlog/Program_145756.html>
_
----EOF-----
微信公众号:Python程序员杂谈
微信公众号:Python程序员杂谈