简单的统计器

类别:Java 点击:0 评论:0 推荐:

    最近在学JSP。看了一下书,在网上看了别人写的一些简单计数器后,自己就开始动手写了一个,现在共享下。感觉还可以,对于初学者来说,应该是一个不错的学习例子,其中设计到了JAVABEAN,连接数据库和SESSION的一些简单问题,不过对于初学者来说可以加深对这些概念的理解。
    我做的简单统计器,主要实现了防刷新,记录来访IP,统计IP数目这些简单功能 首先先设计个数据库。我用了个简单的ACCESS(主要是方便好用),首先在ACCESS中设计两个表:1、counter表(包含两列:编号,counter)---这个表是用来记录访问数目的。
2、iptables表(包含两列:编号,IP)----这个表是用来记录来访者的IP地址。好了,数据库设计好了,下面只要在你的机子上注册下ODBC就可以拉,我这里注册的ODBC数据源是counter
好了,下面我把程序的代码贴出来:
//CounterBean.java
package yg;
import java.io.*;
import java.sql.*;

public class CounterBean extends Object {
  String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
  String sConnStr = "jdbc:odbc:count";
  private Connection conn = null;
  private Statement stmt = null;
  ResultSet rs = null;
//注册数据库驱动程序
  public CounterBean() {
    try {
      Class.forName(sDBDriver);
    }
    catch (java.lang.ClassNotFoundException e) {
      System.err.println("CounterBean():" + e.getMessage());
    }
  }

//建立数据库连接及定义数据查询
  public ResultSet executeQuery(String sql) {
    rs = null;
    try {
      conn = DriverManager.getConnection(sConnStr);
      stmt = conn.createStatement();
      rs = stmt.executeQuery(sql);
    }
    catch (SQLException e) {
      System.err.println("executeQuery:" + e.getMessage());
    }
    return rs;
  }

//定义数据操作
  public void executeUpdate(String sql) {
    stmt = null;
    rs = null;
    try {
      conn = DriverManager.getConnection(sConnStr);
      stmt = conn.createStatement();
      stmt.executeUpdate(sql);
      stmt.close();
      conn.close();
    }
    catch (SQLException ex) {
      System.err.println("executeUpdate:" + ex.getMessage());
    }
  }

//关闭数据库
  public void closeStmt() {
    try {
      stmt.close();
    }
    catch (SQLException e) {
      e.printStackTrace();
    }
  }

  public void closeConn() {
    try {
      conn.close();
    }
    catch (SQLException e) {
      e.printStackTrace();
    }
  }
//同步更新计数器
 public synchronized int getcount(){
 int count=0;
 rs=null;
 try{
 executeUpdate("update counter set counter=counter+1");
 rs=executeQuery("select counter from counter");
 rs.next();
 count=rs.getInt("counter");
 stmt.close();
 conn.close();
 }
 catch (SQLException e) {
 }
 return count;
 }
}


//counter.jsp
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="yg.CounterBean" %>
<%@ page import="java.io.*" %>
<%@ page import="java.sql.*" %>
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<META NAME="GENERATOR" CONTENT="Oracle JDeveloper">
<TITLE>
计数器演示程序
</TITLE>
</HEAD>
<BODY>
<!--创建并调用bean(counter)-->
<jsp:useBean id="counter" class="yg.CounterBean" scope="request">
</jsp:useBean>
<%
String cont=new String();
String ips=new String();
int ipnum=0;
ResultSet rs;
rs=null;
if (session.isNew()){
cont =String.valueOf(counter.getcount());
session.putValue("count",cont);
ips =request.getRemoteAddr();
rs =counter.executeQuery("select ip from iptables where ip='"+ips+"'");
if (!rs.next())
counter.executeUpdate("insert into iptables (ip) values('"+ips+"')");
}
rs =counter.executeQuery("select ip from iptables");
while (rs.next()){
ipnum=ipnum+1;
}
counter.closeStmt();
counter.closeConn();
session.putValue("ipnum",String.valueOf(ipnum));
%>
您是第<font color="red"><%=session.getValue("count")%></font>位访问者
<p>
您的IP地址为:<%=request.getRemoteAddr()%>
<p>
目前共有<%=session.getValue("ipnum")%>个不同的IP访问过
<p>
</BODY>
</HTML>
好了,完了,就这些拉。偶是个菜鸟,一个JAVA的初学者,还望各位大虾指点指点。

本文地址:http://com.8s8s.com/it/it12630.htm