Struts2 全局变量统计 (点击率 、访问量...)

Servlet监听器主要有三种,在ServletContext(上下文对象)、Session(会话)和request(请求)这三对象上进行监听,可以监听对象的创建、销毁、添加属性、删除属性、属性值的改变等。ServletContext对象的作用域在整个WEB应用程序,类似于Static属性;Session的作用域在一个会话,一个会话可以理解为一个从一个浏览器发出请求到服务器开始,一直到浏览器关闭(但通常我们可以设置会话的生命期,防止那些获得连接后却长时间没有再向服务器发出请求的情况),相当于类的成员变量;request的作用域仅在一次请求,即浏览器发送一次请求到服务器处理该请求并发回响应就结束了,相当于局部变量。

   要实现统计网站的历史访问量就要利用ServletContext的全局属性的特点了,为了在服务器停止后,之前的访问量不会消失,我们就应该在服务器关闭前将当前的访问量存放到文件里面,以便下一次重启服务器后,可以继续使用。在ServletContext上面创建监听器,监听上下文对象的销毁和创建,并同时在创建上下文的时候从文件读取历史数据,在上下文销毁的时候将当前访问量写入到文件保存起来。以后每当创建一个会话(Session)的时候,就将当前的计数值加一。在线人数的统计是利用在创建会话的时候,将在线人数之加一,在会话对象销毁的时候,将在线人数值减一。因为两种人数统计都是被所有用户共享的信息,所以使用ServletContext的setAttribute()和getAttribut()方法来对总人数和在线人数进行管理。

创建上下文监听器:

 

 

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;

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

public class UserCounterListener implementsServletContextListener
{
 public void contextDestroyed(ServletContextEventarg0)
 {
  ServletContext sc =arg0.getServletContext();
  Integer count = (Integer)sc.getAttribute("AccessCount");
  try
  {
   PrintWriterout = new PrintWriter(new FileWriter(
     "E:\\db\\count.txt"));//将人数保存到文本文件
   System.out.println("count:"+ count);
   out.print(count);
   out.flush();
   out.close();
  }
  catch (IOException e)
  {
   e.printStackTrace();
  }
 }

 public voidcontextInitialized(ServletContextEvent arg0)
 {
  Integer count = 0;
  ServletContext sc =arg0.getServletContext();

  try
  {
   Scanner in =new Scanner(new FileReader("E:\\db\\count.txt"));

   // 读取已经产生的人数信息,然后进行累加
   count =in.nextInt();
   in.close();
  }
  catch (FileNotFoundExceptione)
  {
   e.printStackTrace();
  }
  sc.setAttribute("AccessCount",count);
 }
}

在web.xml文件里面进行设置
<listener>
 <listener-class>
  文件的位置也就是包名.ApplicationListener
 </listener-class>
</listener>

 

再在web.xml设置设定所有HTTP会话的"超时"时间,这里设定为30分钟

 <session-config>
  <session-timeout>1</session-timeout>
 </session-config>
最后在JSP页面中加入以下代码即可实现:

访问总数:
          <%
           ServletContextsc = ServletActionContext.getServletContext();
  
           Integercounter = (Integer) sc.getAttribute("AccessCount")+1;
           out.print(counter);
           sc.setAttribute("AccessCount",counter);
          %>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值