首页 > 学院 > 开发设计 > 正文

java程序设计

2019-11-14 22:49:47
字体:
来源:转载
供稿:网友
java程序设计

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.*" %><jsp:useBean id="mycount" class="com.count.Online.CountOnline"/><jsp:useBean id="mydb" class="com.count.Online.DB"/><%  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();%><html>  <head>    <title>记录用户IP地址的计数器</title>     <link rel="stylesheet" type="text/CSS" href="css/style.css">  </head>  <body>    <center>      <table height="90" width="400" border="1" bordercolor="black" bordercolorlight="black" bordercolordark="white" cellspacing="0" style="margin-top:200">        <tr bgcolor="lightgrey">         <td align="center">第N位访问者</td>         <td align="center">访问者IP地址</td>         <td align="center">访问时间</td>        </tr>        <%           while(rs.next()){        %>        <tr>          <td align="center"><%=rs.getInt("user_order")%></td>          <td align="center"><%=rs.getString("user_ip")%></td>          <td align="center"><%=rs.getString("user_time")%></td>        </tr>        <%           }           mycount.dbclose();        %>        <tr>         <td align="center" colspan="3">           您是第<%=max+1%>位访问者!           <br>           您的IP为:<%=ip%>           <br>           您访问的时间为:<%=nowdate%>         </td>        </tr>      </table>    </center>  </body></html>

本程序使用的是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.*" %><jsp:useBean id="mycount" class="com.count.Online.CountOnline"/><%  String ip=request.getRemoteAddr();  mycount.setUserip(ip);  ResultSet rs=mycount.checkuser();  rs.last();  int num=rs.getRow();%><html>  <head>    <title>只对新用户计数的计数器</title>     <link rel="stylesheet" type="text/css" href="css/style.css">  </head>  <body>    <center>      <table height="90" width="200" border="1" bordercolor="black" bordercolorlight="black" bordercolordark="white" cellspacing="0" style="margin-top:200">        <tr bgcolor="lightgrey">         <td align="center">访问者IP地址</td>         <td align="center">访问次数</td>        </tr>        <%           rs.beforeFirst();           while(rs.next()){        %>        <tr>          <td align="center"><%=rs.getString("user_ip")%></td>          <td align="center"><%=rs.getInt("user_times")%></td>        </tr>        <%           }        %>        <tr>         <td align="center" colspan="2">           您的IP为:<%=ip%>           <br>           您的访问次数为:<%=mycount.getTimes()%>次           <br>           共有 <%=num%> 个新用户访问过本页         </td>        </tr>      </table>      <%        mycount.dbclose();      %>    </center>  </body></html>

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表