jsp页面用session记录当日浏览量和总浏览量
2013-12-26
我用的是MySql数据库,建表用Navicat for MySQl
建表如下:
名 | 类型 | 长度 | 十进制 | 允许空? | 主键 |
id | int | 11 | 0 | NO | YES |
vdate | date | 0 | 0 | NO | |
vnum | int | 11 | 0 | NO | |
vtotal_num | int | 11 | 0 | NO |
注意:这里的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今日浏览量和总浏览量的统计。鼓掌鼓掌!!!!