最近在学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的初学者,还望各位大虾指点指点。