博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java程序设计
阅读量:6041 次
发布时间:2019-06-20

本文共 6821 字,大约阅读时间需要 22 分钟。

IP地址计数器

原理:获取用户的IP地址,然后存入数据库,当再次访问时查询数据库是否存在该条数据,即可完成此程序

设计过程

创建一个连接数据库类:DB.java

package com.count.Online;import java.sql.*;public class DB {    private Connection con;    private Statement stm;    private ResultSet rs;    private final static String url = "jdbc:mysql://localhost:3306/oumyye";    private final static String dbDriver = "com.mysql.jdbc.Driver";    // 通过构造方法加载数据库驱动    static {        try {            Class.forName(dbDriver).newInstance();        } catch (Exception ex) {            System.out.println("数据库加载失败");        }    }    // 创建数据库连接    public Connection getCon() {        try {            con = DriverManager.getConnection(url,"root","root");            System.out.println(con);            con.setAutoCommit(true);                    } catch (SQLException e) {            System.out.println(e.getMessage());            System.out.println("creatConnectionError!");        }        return con;    }    public Statement getStm(){        try{           con=getCon();           stm=con.createStatement();        }catch(Exception e){e.printStackTrace(System.err);}         return stm;      }      public Statement getStmed(){        try{           con=getCon();           stm=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);        }catch(Exception e){e.printStackTrace(System.err);}        return stm;    }    public ResultSet search(String sql){        getStm();        try{            rs=stm.executeQuery(sql);        }catch(Exception e){e.printStackTrace();}        return rs;    }    public int dosql(String sql){        System.out.println(sql);        int i=-1;        getStm();        try{            i=stm.executeUpdate(sql);        }catch(Exception e){e.printStackTrace();}        return i;    }    public void closed(){        try{            if(rs!=null)rs.close();        }        catch(Exception e){e.printStackTrace();}                try{            if(stm!=null)stm.close();        }        catch(Exception e){e.printStackTrace();}                try{            if(con!=null)con.close();        }        catch(Exception e){e.printStackTrace();}            }}

创建一个核心操作类CountOnline.java

package com.count.Online;import java.sql.*;public class CountOnline {    private String userip;    private String nowdate;    private int times;    private DB db=new DB();    public CountOnline(){}    public void setUserip(String userip){        this.userip=userip;    }    public String getUserip(){        return this.userip;    }    public void setNowdate(String nowdate){        this.nowdate=nowdate;    }    public String getNowdate(){        return this.nowdate;    }    public void setTimes(int times){        this.times=times;    }    public int getTimes(){        return this.times;    }    public ResultSet adduser(){        ResultSet rs=null;        String sql="insert into tb_IPcount values("+this.times+",'"+this.userip+"','"+this.nowdate+"')";        try{            db.dosql(sql);            rs=db.search("select * from tb_IPcount");        }catch(Exception e){e.printStackTrace();}        return rs;    }    public void dbclose(){        db.closed();    }}

用户访问的页面index.jsp

<%@ page contentType="text/html;charset=GBK"%><%@ page import="java.util.Date,java.text.*,java.sql.*" %>
<% SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String sql="select MAX(user_order) from tb_IPcount as max"; ResultSet rs=mydb.search(sql); rs.next(); int max=rs.getInt(1); mydb.closed(); mycount.setTimes(max+1); String ip=request.getRemoteAddr(); mycount.setUserip(ip); String nowdate=format.format(new Date()); mycount.setNowdate(nowdate); rs=mycount.adduser();%> 记录用户IP地址的计数器
<% while(rs.next()){ %>
<% } mycount.dbclose(); %>
第N位访问者 访问者IP地址 访问时间
<%=rs.getInt("user_order")%> <%=rs.getString("user_ip")%> <%=rs.getString("user_time")%>
您是第<%=max+1%>位访问者!
您的IP为:<%=ip%>
您访问的时间为:<%=nowdate%>

本程序使用的是mysql数据库,需导入mysql驱动包

数据库表结构

CREATE TABLE `tb_ipcount` (  `user_order` int(10) DEFAULT NULL,  `user_ip` varchar(20) DEFAULT NULL,  `user_time` varchar(20) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

对于此程序还可以添加一个新功能

计算出总共多少ip地址,每个ip地址的访问次数。

实例二

数据库连接代码如上

CountOnline.java

package com.count.Online;import java.sql.*;public class CountOnline {    private String userip;    private String nowdate;    private int times;    private DB db=new DB();    public CountOnline(){}    public void setUserip(String userip){        this.userip=userip;    }    public String getUserip(){        return this.userip;    }    public void setNowdate(String nowdate){        this.nowdate=nowdate;    }    public String getNowdate(){        return this.nowdate;    }    public void setTimes(int times){        this.times=times;    }    public int getTimes(){        return this.times;    }    public ResultSet checkuser(){        String sql="select * from tb_newusercount where user_ip='"+this.userip+"'";        ResultSet rs=null;        try{            rs=db.search(sql);            if(rs.next()){                this.times=rs.getInt("user_times")+1;                sql="update tb_newusercount set user_times="+this.times+" where user_ip='"+this.userip+"'";                db.dosql(sql);            }            else{                this.times=1;                sql="insert into tb_newusercount values('"+this.userip+"',1)";                db.dosql(sql);            }            rs=db.search("select * from tb_newusercount");        }catch(Exception e){e.printStackTrace();}        return rs;    }    public void dbclose(){        db.closed();    }}

界面代码index.jsp

<%@ page contentType="text/html;charset=GBK"%><%@ page import="java.sql.*" %>
<% String ip=request.getRemoteAddr(); mycount.setUserip(ip); ResultSet rs=mycount.checkuser(); rs.last(); int num=rs.getRow();%> 只对新用户计数的计数器
<% rs.beforeFirst(); while(rs.next()){ %>
<% } %>
访问者IP地址 访问次数
<%=rs.getString("user_ip")%> <%=rs.getInt("user_times")%>
您的IP为:<%=ip%>
您的访问次数为:<%=mycount.getTimes()%>次
共有 <%=num%> 个新用户访问过本页
<% mycount.dbclose(); %>

转载地址:http://gcrhx.baihongyu.com/

你可能感兴趣的文章
AD集成库元件简写中英文对照表
查看>>
C#Ftp的下载实例
查看>>
HDU4335 What is N? [数论(欧拉函数)]
查看>>
会声会影字幕制作
查看>>
电商网站中添加商品到购物车功能模块2017.12.8
查看>>
由支付宝当面付引发的NatApp方便调试回调
查看>>
享受LINQ:判断一组文字是否在字符串中同时出现的最简单方法
查看>>
UVA1437 String painter
查看>>
poj 1671 Rhyme Schemes
查看>>
HDU 2639 Bone Collector II DP
查看>>
uni-app 通过本地经纬度获取详细地理位置
查看>>
扩展欧几里得学习小记
查看>>
Linux useradd 添加用户
查看>>
poj3427
查看>>
android 模拟器 hardWare 属性说明
查看>>
GM11灰色模型
查看>>
六款值得推荐的android(安卓)开源框架简介
查看>>
HT for Web可视化QuadTree四叉树碰撞检测
查看>>
http之get与post
查看>>
max_element( )
查看>>