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

|