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>
时间: 2024-11-05 14:54:20

java程序设计的相关文章

201671010110 2016-2017-2《java程序设计》

第四周的java学习也已经过去了,这学期新的编程语言老师翻转课堂新的教学方法都是一种全新的挑战与学习的过程.四周时间也学了四个章节的内容,前三章内容和c语言有很多的相似之处,经过上学期对c的学习理解前三章内容不是很难,第四章的类与对象是一个很重要的章节当然也有一定的难度,老师在周四周五的课堂上也对前四章内容做了复习,讲了很多习题.周末对第五章的内容通过幻灯片有了一定的学习了解. 继承它是用已有类来构建新类的一种机制.当定义了一个新类继承了一个类时,它继承了这个类的方法和域,同时在新类中添加了新的

20155208徐子涵 2016-2017-2 《Java程序设计》第6周学习总结

20155208徐子涵 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 10.1.1 1.Java将输入/输出抽象化为串流,数据有来源及目的地,衔接两者的是串流对象. 2.若要将数据从来源中取出,可以使用输入串流:若要将数据写入目的地,可以使用输出串流.在java中,输入串流代表对象为java.in.InputStream的实例:输出串流代表对象为java.io.Outputstream的实例. 3.read()方法每次尝试读取数据,并返回实际读入的,只要不是负一

20155336 2016-2017-2《JAVA程序设计》第一周学习总结

# 20155336  2016-2017-2<JAVA程序设计>第1周学习总结 ## 教材学习内容总结 开学的第一周,带着些许的欣喜和好奇,听完了老师的第一堂课.说心里话学习JAVA仿佛观看一部英文影视作品一样头疼, 因为总会有许许多多相似的名字让你记得晕头转向.JAVA也是一样,什么JVM啊JRE啊JDK啊 (/(ㄒoㄒ)/~~)  等等一系列 的英文缩写,让人心神意乱~~但总体上对JAVA有了一个初步的了解.通过课上老师的介绍以及课下对JAVA书第一章的浏览, 我简单的了解了JAVA艰辛

20155335俞昆《java程序设计》第十周总结

学号 2016-2017-2 <Java程序设计>第十周学习总结 ## 事实上网络编程,我们可以简单的理解为两台计算机相互通讯数据而已,对于程序员而言,掌握一种编程接口并使用一种编程模型相对而言就简单多了,javaSDK提供了一些相对简单的Api来完成12这些工作,Socket就是其中之一,对于java而言,Api的存在和java.net包里面.因此只要导入这个包就可以准备网络编程了. 客户机到服务机的模型就是网络编程的基本模型,简单的说就是引进这两个进程之间的相互通信,其中一个必须提供固定的

20155208徐子涵 2016-2017-2 《Java程序设计》第5周学习总结

20155208徐子涵 2016-2017-2 <Java程序设计>第5周学习总结 教材学习内容总结 第八章 异常处理 8.1 语法与继承结构 Java中所有错误都会被打包为对象,运用try.catch,可以在错误发生时显示友好的错误信息.如: import java.util.*; public class Average2 { public static void main(String[] args) { try { Scanner console = new Scanner(Syste

20145207《Java程序设计》第三周学习总结

20145207<Java程序设计>第三周学习总结 教材学习内容总结 这部分可能要扒一些课本而上的东西了.在第三章中,知道了Java可区分为基本类型和类类型两大类型系统,其中类类型也称为参考类型.在这一周主要学习了类类型. 对象(Object):存在的具体实体,具有明确的状态和行为 类(Class):具有相同属性和行为的一组对象的集合,用于组合各个对象所共有操作和属性的一种机制. 简单来说,类是对象的设计图,对象是类的实例. 要深刻理解对象的含义,例如Clothes c1 = new Clot

20155336 2016-2017-2《JAVA程序设计》第二周学习总结

20155336 2016-2017-2 <JAVA 程序设计>第二周学习总结 教材学习内容 1: GIT版本检测 2: JAVA中基本类型 整数 字节 浮点数 字符 布尔(▲) 通过API可以得知各个类型可存储的数值范围 public class Range {public static void main(String[] args){ //byte.short.int.long的范围 System.out.printf("%d~%d%n", Byte.MIN_VALU

JAVA程序设计心得001

JAVA程序设计心得001:java语言之所以能够跨平台,是因为java程序并不运行在操作系统中,而是运行在java虚拟机上.java虚拟机并不是硬件方面的东西,而是用于运行java程序的软件平台.JVM是分时操作系统的版本,例如运行在Windows中的jvm,当运行java程序时,虚拟机会吧该程序解析成window能够识别的代码,而java程序转移在linux系统中的JVM后,则就解析成Linux能够识别的代码.

20145225《Java程序设计》 2015—2016年学期课程总结

20145225<Java程序设计> 2015—2016年学期课程总结 读书笔记链接汇总 1.2016年2月25日 <Java程序设计>课程准备之问卷调查 摘要: 一.你对自己的未来有什么规划?做了哪些准备? 答:未来就是找个好工作,在保证自己与父母生活条件良好的基础上,进一步的提高精神上的需求...... 2.2016年3月6日 <Java程序设计>第1周学习总结——小试牛刀 摘要: 教材学习内容总结 1.java语言概述:一门高级编程语言. 2.java语言的三种技

20145331《Java程序设计》课程总结

20145331<Java程序设计>课程总结 每周读书笔记链接汇总 •20145331<Java程序设计>第一周学习总结 •20145331<Java程序设计>第二周学习总结 •20145331<Java程序设计>第三周学习总结 •20145331<Java程序设计>第四周学习总结 •20145331<Java程序设计>第五周学习总结 •20145331<Java程序设计>第六周学习总结 •20145331<Java