jsp页面用session记录当日浏览量和总浏览量



 2013-12-26
我用的是MySql数据库,建表用Navicat for MySQl
建表如下:

类型长度十进制允许空?主键
idint110NO YES
vdatedate00NO 
vnumint110NO 
vtotal_numint110NO 









注意:这里的id在表中设置为自增

 第一步:数据库的连接 jdbcUtil
 1 package com.yunshidai.zhm.jdbc.util;
 2 
 3 import java.sql.Connection;
 4 import java.sql.DriverManager;
 5 import java.sql.PreparedStatement;
 6 import java.sql.ResultSet;
 7 import java.sql.SQLException;
 8 import java.sql.Statement;
 9 public class jdbcUtil {
10 public static Connection getConnection(){
11       String url = "jdbc:mysql://localhost:3306/a?useUnicode=true&characterEncoding=UTF-8";
12       String user = "root";
13       String password = "********" ;
14       try {
15         Class.forName("com.mysql.jdbc.Driver");
16     } catch (ClassNotFoundException e) {
17         // TODO Auto-generated catch block
18         e.printStackTrace();
19     }
20       Connection connection = null ;
21       try {
22         connection = (Connection) DriverManager.getConnection(url,user,password);
23     } catch (SQLException e) {
24         // TODO Auto-generated catch block
25         e.printStackTrace();
26     }
27     return connection;
28   }
29   public static  void close(Connection connection ,PreparedStatement pStatement ,Statement statement,ResultSet resultSet){
30       
31         try {
32             if (resultSet!=null) {
33              resultSet.close();
34             } 
35             if (pStatement!=null) {
36               pStatement.close();    
37             }
38             if (statement!=null) {
39                 statement.close();
40             }
41             if (connection!=null) {
42                 connection.close();
43             }
44         }
45             catch (SQLException e) {
46             // TODO Auto-generated catch block
47             e.printStackTrace();
48         }
49       
50   }
51 }





 第二步:VisitorCount.java

  1 package com.yunshidai.zhm;
  2 
  3 import java.sql.Connection;
  4 import java.sql.PreparedStatement;
  5 import java.sql.ResultSet;
  6 import java.text.SimpleDateFormat;
  7 import java.util.Date;
  8 import com.yunshidai.zhm.jdbc.util.jdbcUtil;
  9 public class VisitorCount {
 10    private final static String TABLE_NAME ="visitorcounter";
 11    private static String today = null ;
 12    private static long today_num = 0 ;
 13    private static long total_num = 0 ;
 14  //加载访问量
 15    public static void loadNum(){
 16     if(total_num<1)
 17      loadTotalNum();
 18     if(today_num<1)
 19      loadToadyNum();
 20    }
 21    //加载今日访问量
 22    private static void loadToadyNum() {
 23     // TODO Auto-generated method stub
 24        Connection connection = jdbcUtil.getConnection();
 25         PreparedStatement ps = null;
 26         ResultSet rs = null ;
 27        if(today==null)
 28         today = getTodayDate();
 29       //  System.out.println(today);
 30         String sql = "select vnum from "+TABLE_NAME+" where vdate='"+today+"'" ;
 31      //   System.out.println(sql);
 32     try {
 33         ps = connection.prepareStatement(sql.toString());
 34         rs = ps.executeQuery(sql);
 35      //   System.out.println(rs);
 36         if(rs.next()){
 37         today_num = rs.getLong("vnum");
 38     //    System.out.println(today_num);
 39           }
 40         else
 41        {   
 42         sql = "insert into "+TABLE_NAME+"(vdate,vnum,vtotal_num) values('"+today+"',0,0)";
 43     //    System.out.println(sql);
 44         ps.executeUpdate(sql);
 45         today_num = 0;
 46      }
 47      } catch (Exception e) {
 48      // TODO: handle exception
 49      today_num = 0;
 50     }
 51    }
 52    //加载总访问量
 53    private static void loadTotalNum() {
 54        Connection connection = jdbcUtil.getConnection();
 55         PreparedStatement ps = null;
 56         ResultSet rs = null ;
 57     if(today==null)
 58       today = getTodayDate();
 59      String sql = "select sum(vnum) from "+TABLE_NAME+" ";
 60      System.out.println(sql);
 61     try {
 62      ps = connection.prepareStatement(sql.toString());
 63      rs = ps.executeQuery(sql);
 64      System.out.println(rs);
 65      if(rs.next()){
 66       total_num = rs.getLong(1);
 67       System.out.println(today_num+"12314");
 68      }
 69      else
 70      {
 71       total_num = 0;
 72      }
 73     } catch (Exception e) {
 74      // TODO: handle exception
 75      total_num = 0;
 76     }
 77    }
 78   //增加总的访问量
 79    public static int incTotalCounter(){
 80     int k = 0;
 81     Connection connection = jdbcUtil.getConnection();
 82           PreparedStatement ps = null;
 83     loadNum(); 
 84     total_num = total_num+1;
 85     String sql = "update "+TABLE_NAME+" set vtotal_num="+total_num+" where vdate='"+today+"'";
 86     System.out.println(sql);
 87     try {
 88      ps = connection.prepareStatement(sql);
 89      k = ps.executeUpdate(sql);
 90     } catch (Exception e) {
 91      // TODO: handle exception
 92         System.out.println(e);
 93     }
 94     return k;
 95    }
 96    //增加今日的访问量
 97    public static int incTodayCounter(){
 98     int k  = 0;
 99     Connection connection = jdbcUtil.getConnection();
100      PreparedStatement ps = null;
101     ResultSet rs = null ;
102     loadNum(); 
103     today_num += 1;
104    String sql= "update "+TABLE_NAME+" set vnum="+today_num+" where vdate='"+today+"'";
105     try {
106          ps = connection.prepareStatement(sql);
107          k = ps.executeUpdate(sql);
108      if(k > 0)
109       incTotalCounter();
110     } catch (Exception e) {
111      // TODO: handle exception
112     
113     }
114     return k;
115    }
116    //获得今天的日期
117    private static String getTodayDate(){
118     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
119     return sdf.format(new Date());
120    }
121    ///获得今日访问量
122    public static long getTodayNum(){
123     loadNum();
124     return today_num;
125    }
126    //获得总的访问量
127    public static long getTotalNum(){
128     loadNum();
129     return total_num;
130    } 
131  }
 
  

第三步:jsp界面的编写


 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>Insert title here</title>
 8 </head>
 9 <jsp:useBean id="VisitorCount" class="com.yunshidai.zhm.VisitorCount">
10 </jsp:useBean>
11 <body>
12   <% if(session.isNew())
13        {
14           VisitorCount.incTodayCounter();
15        }
16       %>
17       今日访问量:<%=VisitorCount.getTodayNum() %><br/>
18       总的访问量: <%=VisitorCount.getTotalNum() %>
19 </body>
20 </html>

 

 

最后总结:这里使用session内置对象的作用域来记录。 session的作用域是在一次会话范围中,无论何种跳转(客户端/服务器端)都可以使用,所以刷新页面是不会增加浏览量的。

而且这里实现了数据库里浏览量的记录,这样可以很方便的实现管理员后台数据的处理。

 

 



经过2天的研究,今天终于算完成了jsp今日浏览量和总浏览量的统计。鼓掌鼓掌!!!!















 

转载于:https://www.cnblogs.com/hongmeijiejie/p/3493111.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值