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>
java程序设计的更多相关文章
- 《Java程序设计》 课程教学
<Java程序设计> 课程教学 给学生 考核方式 100分构成 翻转课堂考核12次(5*12 = 60):每次考试20-30道题目,考试成绩规格化成5分(比如总分20分就除以4) 注意:不 ...
- 2016-2017-2 《Java程序设计》教学进程
2016-2017-2 <Java程序设计>教学进程 目录 考核方式 课前准备 教学进程 第00周学习任务和要求 第01周学习任务和要求 第02周学习任务和要求 第03周学习任务和要求 第 ...
- 2016-2017-2 《Java程序设计》预备作业2总结
2016-2017-2 <Java程序设计>预备作业2总结 古希腊学者普罗塔戈说过:「头脑不是一个要被填满的容器,而是一束需要被点燃的火把.」 在对计算机系的学生情况的调查中,我说: 最近 ...
- 2016-2017-2 《Java程序设计》预备作业1 总结
2016-2017-2 <Java程序设计>预备作业1 总结 预备作业01:你期望的师生关系是什么见https://edu.cnblogs.com/campus/besti/2016-20 ...
- 2016-2017-2 《Java程序设计》课程学生博客和代码托管链接
2016-2017-2 <Java程序设计>课程学生博客和代码托管链接 博客 1552 20155201 李卓雯 20155202 张 旭 20155203 杜可欣 20155204 王 ...
- 《Java程序设计与数据结构教程(第二版)》学习指导
<Java程序设计与数据结构教程(第二版)>学习指导 欢迎关注"rocedu"微信公众号(手机上长按二维码) 做中教,做中学,实践中共同进步! 原文地址:http:// ...
- 20145208 《Java程序设计》第0周学习总结
20145208 <Java程序设计>第0周学习总结 阅读心得 读了老师推荐的几个文章,虽然第四个文章"为什么一定要自学"报告资源不存在而无法阅读,其他的三篇文章都言之 ...
- # 2015-2016-2 《Java程序设计》课程总结
2015-2016-2 <Java程序设计>课程总结
- 积极主动敲代码,使用Junit学习Java程序设计
积极主动敲代码,使用JUnit学习Java 早起看到周筠老师在知乎的回答软件专业成绩很好但是实际能力很差怎么办?,很有感触. 从读大学算起,我敲过不下100本程序设计图书的代码,我的学习经验带来我的程 ...
- 20145205《Java程序设计》课程总结
每周读书笔记链接汇总 20145205 <Java程序设计>第1周学习总结 20145205<Java程序设计>第2周学习总结 20145205 <Java程序设计> ...
随机推荐
- Unicode和UTF的关系
目录结构: contents structure [+] 什么是USC UCS的编码方式 Unicode的来源 为什么需要Unicode Unicode的方式 Unicode和UTF UTF和Unic ...
- JavaScript三种方式改变标签css
原文地址:https://www.cnblogs.com/xiangru0921/p/6514225.html <body> <div id="div">这 ...
- kafka中处理超大消息的一些处理
Kafka设计的初衷是迅速处理短小的消息,一般10K大小的消息吞吐性能最好(可参见LinkedIn的kafka性能测试).但有时候,我们需要处理更大的消息,比如XML文档或JSON内容,一个消息 ...
- 第2章 Python基础-字符编码&数据类型 字符编码&字符串 练习题
1.简述位.字节的关系 位(bit)是计算机中最小的表示单元,数据传输是以“位”为单位的,1bit缩写为1b 字节(Byte)是计算机中最小的存储单位,1Byte缩写为1B 8bit = 1Byte ...
- 温故而知新 监听 XMLHttpRequest 发起请求
window.XMLHttpRequest.prototype.open 可以监听 XMLHttpRequest .但不能监听fetch请求. <!DOCTYPE html> <ht ...
- Windows Mobile入门
转自 http://www.cnblogs.com/peterzb/archive/2009/05/12/1455256.html [准备篇] 最近安排做手机视频监控方面开发,这个对我来 ...
- 【Android教程】Android用户系统管理
原文:http://android.eoe.cn/topic/android_sdk Android用户迷恋于在自己的设备上安装他们所喜欢的应用.让您的应用受用户喜欢的一种方法就是让它个性化.Andr ...
- 第一个UG练习
- vivado 调用UE
- vivado 的调试工具ILA抓到的波形可以保存
Vivado下debug后的波形通过图形化界面并不能保存抓取到波形,保存按钮只是保存波形配置,如果需要保存波形需要通过TCL命令来实现: write_hw_ila_data0730_ila_1 [up ...