JSPIP查询工具课程方案设计书.docx
《JSPIP查询工具课程方案设计书.docx》由会员分享,可在线阅读,更多相关《JSPIP查询工具课程方案设计书.docx(17页珍藏版)》请在冰豆网上搜索。
JSPIP查询工具课程方案设计书
封面
作者:
PanHongliang
仅供个人学习
攀枝花学院
学生课程设计(论文)
题目:
JSPIP查询工具
所在院(系):
计算机
专业:
计算机科学与技术
班级:
09计算机科学与技术1班
指导教师:
罗学刚职称:
讲师
2012年5月31日
攀枝花学院教务处制
攀枝花学院本科学生课程设计任务书
题 目
JSPIP查询工具
1、课程设计的目的
通过本课程设计使学生能够较全面的掌握面向对象程序设计的有关概念和开发方法,以便能较全面地理解、掌握和综合运用所学的知识,提高自身的编程能力。
2、课程设计的内容和要求(包括原始数据、技术要求、工作要求等)
利用jsp技术,设计开发IP查询的工具
提供IP查询页面,完成IP地址的查询,并显示IP位置
3、主要参考文献
[1]朱福喜.《Java语言程序设计》(第二版).科学出版社
[2]陈国君等.《Java程序设计基础》(第二版).清华大学出版社
[3]Deitel.《Java大学基础教程》(第六版).电子工业出版社
[4]MaryCampione.《Java语言导学》(第四版).机械工业出版社
[5]Y.DanielLiang.《Java语言程序设计基础篇》(第六版).机械工业出版社
[6]KathySierra.《HeadFirstJava》(第二版).东南大学出版社
4、课程设计工作进度计划
序号
时间(天)
内容安排
备注
1
1
分析设计准备
周一
2
2
编程调试阶段
周二至周三
3
1
编写课程设计报告
周四
4
1
考核
周五
总计
5(天)
指导教师(签字)
日期
年月日
教研室意见:
年月日
学生(签字):
接受任务时间:
年月日
注:
任务书由指导教师填写。
课程设计(论文)指导教师成绩评定表
题目名称
评分工程
分值
得分
评价内涵
工作
表现
20%
01
学习态度
6
遵守各项纪律,工作刻苦努力,具有良好的科学工作态度。
02
科学实践、调研
7
通过实验、实验、查阅文献、深入生产实践等渠道获取与课程设计有关的材料。
03
课题工作量
7
按期圆满完成规定的任务,工作量饱满。
能力
水平
35%
04
综合运用知识的能力
10
能运用所学知识和技能去发现与解决实际问题,能正确处理实验数据,能对课题进行理论分析,得出有价值的结论。
05
应用文献的能力
5
能独立查阅相关文献和从事其他调研;能提出并较好地论述课题的实施方案;有收集、加工各种信息及获取新知识的能力。
06
设计(实验)能力,方案的设计能力
5
能正确设计实验方案,独立进行装置安装、调试、操作等实验工作,数据正确、可靠;研究思路清晰、完整。
07
计算及计算机应用能力
5
具有较强的数据运算与处理能力;能运用计算机进行资料搜集、加工、处理和辅助设计等。
08
对计算或实验结果的分析能力(综合分析能力、技术经济分析能力)
10
具有较强的数据收集、分析、处理、综合的能力。
成果
质量
45%
09
插图(或图纸)质量、篇幅、设计(论文)规范化程度
5
符合本专业相关规范或规定要求;规范化符合本文件第五条要求。
10
设计说明书(论文)质量
30
综述简练完整,有见解;立论正确,论述充分,结论严谨合理;实验正确,分析处理科学。
11
创新
10
对前人工作有改进或突破,或有独特见解。
成绩
指导教师评语
指导教师签名:
年 月 日
目录
摘要2
1前言4
1.1IP数据库的必要4
1.2IP数据库的制作4
1.3JSP查询IP4
2工程分析5
2.1需求分析5
2.2开发工具和环境5
2.3查询流程5
3相关技术分析6
3.1数据库分析6
3.2IP查询核心算法6
3.3jsp页面的设计7
4设计与实现8
4.1jsp页面的设计8
4.1.1用户自定义IP查询归属8
4.1.2查询本机IP归属9
4.2ip整型的转化10
4.3数据库的连接11
4.4ip整型查找地址12
结论14
附录1:
参考文献15
附录2:
java程序代码16
摘要
随着现在互联网技术的飞速发展,冲浪成了大众生活中重要的一部分,并出现了各式各样的网络文化。
从以前的上网找资料,看新闻,到现在越来越丰富的网络生活,如微博,博客,空间,论坛等。
这些都有来自各个地方具有相同兴趣爱好的人们聚集起来,分享着大家兴趣的东西,并且相互留言,讨论等。
留言板就扮演着一个重要的角色,可以记录来客的留言,日期,还可以有地址,同样论坛中也是如此。
我们可以关注别人的地址,考虑交个朋友什么的。
这就是现在要讨论的JSPIP查询技术。
通过获取访问者的IP,查询到对方的所在地。
关键字JSP,IP查询,地址,IP
1前言
1.1IP数据库的必要
现在网络上很多地方都用到了IP查询的功能,有专门的IP查询的网站,也有些留言板上有记录地址的功能,这种技术非常人性化,应用也越来越广泛。
这里就来讨论jspIP查询的技术。
也是现在主要用到的IP查询技术。
这个过程中要用到IP数据库,里面记录了很多ip网段和对应的实际地址。
另外有种方法是其他网站提供了一个IP查询的接口,自己不需要ip数据库,这个就要依赖别人的数据库和服务器。
也许很多人会认为不靠谱,所以还是要拥有自己的IP数据库。
1.2IP数据库的制作
IP数据库的查找还不是一个容易的事情,为了找到一个记录比较完整和准确的IP数据库花了这次课程的很多时间。
刚才网上找到了qq纯真IP数据库,这个是课程设计前几天更新的,包含43万条记录,包含了所有网址,详细重点在中国。
部分记录了运营商,楼号,网吧等详细地址,是目前最好最完整的IP数据库。
但是这个数据库导出来是文本型的,要转换成jsp所用的mysql数据库文件,这个比较复杂的过程。
简述一下,先用了一个EditPlus软件把多大于一个空格的连续空格都替换成一个空格,然后把文本文件导到access中,以空格为分割。
但是为了实现查询,还要将ip通过一个算法转化成无符号长整型,这里用的是双精浮点型。
为了把ip通过一个算法转化成双精浮点型,个人用delphi编写了一个转换软件,依次将每条记录中的两个ip转换成两个整数放到每条记录后面。
花费半个小时完成了整个数据库的转换制作。
1.3JSP查询IP
现在就是用jsp技术查询数据库了。
用同样的算法把访问者的IP转换成整型后,拿到数据库中去查找。
由于IP数据库中的记录是一个网段存在的,所以获取到的IP地址不能单纯的直接拿到数据库中去查找,必须通过一个算法处理后才能查找,这个算法后面会详细介绍。
2工程分析
2.1需求分析
用记需要一个简单快捷的IP归属查询,输入IP地址,即可得到该IP的归属地。
如果用户要查询自己的IP地址,不用自行输入用户的IP地址,直接就能显示用户的归属。
2.2开发工具和环境
Windowsxp操作系统。
Javajdk7.1。
EclipesJavaEE。
apache-tomcat-6.0.33。
Mysql。
NavicatforMySQL。
2.3查询流程
3相关技术分析
3.1数据库分析
图1
数据库一角:
图2
ID:
为主键,也是每条记录的序号。
ip1:
网段的起始ip。
Ip2:
网段的结束ip。
Addr:
网段的所属地址。
Ad1:
ip1的整型表示。
Ad2:
ip2的整型表示.
3.2IP查询核心算法
查询一个ip地址,IP地址4位,中间有"."隔开,用正则表达式把ip按"."分割字符串,分别存在字符串数组中。
如list[]存放了分割好的字符串。
Ad=list[0]*256^3+list[1]*256^2+list[2]*256+list[3]。
//假设list[]已经转化成整型
Ad就是ip到整型的转换。
通过这个ip到整型的转换后,就可以在在数据库中轻松的查找地址。
直接查找ad>=ad1andad<=ad2的记录就能准确的找出要查询的地址。
只要保证了ad前面这个条件,就确定ip一定在这条记录的IP网段中!
3.3jsp页面的设计
为了方便的查询,要设计出友好的查询界面,用户只需要输入欲查询的ip地址即可一键查询。
如果用户要查询自己的ip地址,也可以直接点击查询本机ip即可。
查询本机ip时,获取远程访问者的ip,进行查找。
用户要控制输入合法的ip,否则出错无法查询。
数据库涵盖了所有的ip,已经精确到最后一位,所以用户需要输入完成的ip地址才能准确查找到ip所属地址。
使用HTML标记语言写编辑框,按钮和表格。
4设计与实现
4.1jsp页面的设计
输入IP:
本机IP:
<%=IP%>
<%=ipstr%>//结果显示
<%=addr%>
图3
4.1.1用户自定义IP查询归属
用户输入一个合法的IP地址,然后点击查询,即可显示相应的结果,如下图:
图4
Stringipstr=request.getParameter("ipstr")。
//ipstr为获取的ip字符串
IPip=newIP()。
longID=ip.Dot2LongIP(ipstr)。
//IP的整型转化
Mdaoid=newMdao()。
Stringaddr=id.Serachadd(ID)。
//IP整型转化后在数据库中查询,返回归属地
System.out.println(addr)。
session.setAttribute("addr",addr)。
session.setAttribute("ipstr",ipstr)。
response.sendRedirect("massage.jsp")。
此过程调用了两个个方法,非常方便直接显示了程序的流程。
4.1.2查询本机IP归属
用户点击查询本机IP,即可显示相应的结果,如下图:
图5
Stringipstr=request.getRemoteAddr()。
//获取本机ip
IPip=newIP()。
longID=ip.Dot2LongIP(ipstr)。
//IP的整型转化
Mdaoid=newMdao()。
Stringaddr=id.Serachadd(ID)。
//IP整型转化后在数据库中查询,返回归属地
System.out.println(addr)。
session.setAttribute("addr",addr)。
session.setAttribute("ipstr",ipstr)。
response.sendRedirect("massage.jsp")。
此过程调用了两个个方法,非常方便直接显示了程序的流程。
4.2ip整型的转化
前面已经分析过ip整型转化的必要性和核心算法的简述,这里用一个类负责IP整型的转化工作.
packagecn.pzhu.mc_196。
publicclassIP{
publicstaticvoidmain(String[]args){
}
publiclongDot2LongIP(StringdotIP){
Stringstr=dotIP。
System.out.println(str)。
longip。
String[]subIP=str.split("\\.")。
//分割ip到字符串数组中
ip=256*256*256*Long.parseLong(subIP[0])+256*256*Long.parseLong(subIP[1])+256*Long.parseLong(subIP[2])+Long.parseLong(subIP[3])。
returnip。
}
}
Dot2LongIP方法获取IP字符串,返回整型转化后的无符号长整型。
4.3数据库的连接
这里连接到mysql数据库:
publicclassMdao{
publicfinalstaticStringDB_URL="jdbc:
mysql:
//localhost:
3306/mc_196?
useUnicode=true&characterEncoding=UTF-8&user=root&password=******"。
static{
try{
Class.forName("com.mysql.jdbc.Driver")。
}catch(ClassNotFoundExceptione){
e.printStackTrace()。
}
}
这里指定了数据库的名称和连接密码,密码已省略。
然后指定使用mysql的数据库的驱动,并注意抓取连接失败的异常。
4.4ip整型查找地址
返回的整型IP用于在数据库中查询
publicStringSerachadd(longid){
StringbRs=""。
Stringsql="select*from123okwheread1<=?
andad2>=?
"。
//数据库查询代码
ResultSetrs=null。
Connectionconn=null。
PreparedStatementpst=null。
System.out.println(id)。
try{
conn=getConnection()。
pst=conn.prepareStatement(sql)。
pst.setLong(1,id)。
//将整型IP放在sql语句中第一个"?
"处
pst.setLong(2,id)。
//将整型IP放在sql语句中第二个"?
"处
//即“select*from123okwheread1<=idandad2>=id”
rs=pst.executeQuery()。
//执行代码
if(rs.next()){
bRs=rs.getString("Addr")。
}
}catch(SQLExceptione){
e.printStackTrace()。
}finally{
try{
pst.close()。
conn.close()。
}catch(SQLExceptione){
System.out.println("错误")。
}
}
returnbRs。
//查询后返回的结果
}
此处将对处理好的整型IP转换成字符串,嵌入到sql语句中去查询IP归属地。
查询sql语句为:
select*from123okwheread1<=idandad2>=id
123ok为IP数据库,id为整型IP。
只要这个id在两个ad1和ad2之间,就能确定这个IP在所查询的网段内。
其中注意抓取执行sql语句的异常。
结论
这次课程设计遇到了诸多问题,期间主要通过搜索引擎,如XX进行求解,也有和其它同学一起讨论,共同解决。
开始是数据库的设计,这个根据算法的需要,能够很好的设计出数据库,但是数据库里面的大量ip数据只能从网上寻找,发现了很多数据库有bug,数据少,不准,不全。
最后找到的纯真数据库比较完美,但是要转换成能用的mysql数据库比较困难和复杂,其中经常遇到ip的整型表示问题,至少要用无符号长整型,但是数据库是有符号长整型,所以最终换成了双精浮点型才完整放入数据库中。
然后jsp技术中主要运用了表单,这个比较简便。
Java代码中设计了一个类,专门做ip的整型转化,另一个类负责数据库的连接和ip地址的查询。
通过这次课程设计,学习了java编程的基本思想,面向对象的编程方式。
熟悉了集成开发工具eclipes的使用,环境的配置等。
同时也掌握了数据库的转化方法,收益甚多。
此工程未作错误处理,不具健状性,非法IP输入会出错。
由于时间紧迫,没有完善此工程
附录1:
参考文献
[1]朱福喜.《Java语言程序设计》(第二版).科学出版社
[2]陈国君等.《Java程序设计基础》(第二版).清华大学出版社
[3]Deitel.《Java大学基础教程》(第六版).电子工业出版社
[4]MaryCampione.《Java语言导学》(第四版).机械工业出版社
[5]Y.DanielLiang.《Java语言程序设计基础篇》(第六版).机械工业出版社
[6]KathySierra.《HeadFirstJava》(第二版).东南大学出版社
附录2:
java程序代码
packagecn.pzhu.mc_196。
importjava.sql.*。
publicclassMdao{
publicfinalstaticStringDB_URL="jdbc:
mysql:
//localhost:
3306/mc_196?
useUnicode=true&characterEncoding=UTF-8&user=root&password=607382"。
static{
try{
Class.forName("com.mysql.jdbc.Driver")。
}catch(ClassNotFoundExceptione){
e.printStackTrace()。
}
}
publicStringSerachadd(longid){
StringbRs=""。
Stringsql="select*from123okwheread1<=?
andad2>=?
"。
ResultSetrs=null。
Connectionconn=null。
PreparedStatementpst=null。
System.out.println(id)。
try{
conn=getConnection()。
pst=conn.prepareStatement(sql)。
pst.setLong(1,id)。
pst.setLong(2,id)。
rs=pst.executeQuery()。
if(rs.next()){
bRs=rs.getString("Addr")。
}
}catch(SQLExceptione){
e.printStackTrace()。
}finally{
try{
pst.close()。
conn.close()。
}catch(SQLExceptione){
System.out.println("错误")。
}
}
returnbRs。
}
privateConnectiongetConnection()throwsSQLException{
Connectionconn=null。
conn=DriverManager.getConnection(DB_URL)。
returnconn。
}
}
packagecn.pzhu.mc_196。
publicclassIP{
publicstaticvoidmain(String[]args){
}
publiclongDot2LongIP(StringdotIP){
Stringstr=dotIP。
System.out.println(str)。
longip。
String[]subIP=str.split("\\.")。
//分割ip到字符串数组中
ip=256*256*256*Long.parseLong(subIP[0])+256*256*Long.parseLong(subIP[1])+256*Long.parseLong(subIP[2])+Long.parseLong(subIP[3])。
returnip。
}
}
用户自定义IP查询JSP页面:
request.setCharacterEncoding("UTF-8")。
Stringipstr=request.getParameter("ipstr")。
IPip=newIP()。
longID=ip.Dot2LongIP(ipstr)。
Mdaoid=newMdao()。
Stringaddr=id.Serachadd(ID)。
System.out.println(addr)。
session.setAttribute("addr",addr)。
session.setAttribute("ipstr",ipstr)。
response.sendRedirect("massage.jsp")。
本机IP查询JSP页面:
request.setCharacterEncoding("UTF-8")。
Stringipstr=request.getRemoteAddr()。
//获取本机ip
IPip=newIP()。
longID=ip.Dot2LongIP(ipstr)。
Mdaoid=newMdao()。
Stringaddr=id.Serachadd(ID)。
System.out.println(addr)。
session.setAttribute("addr",addr)。
session.setAttribute("ipstr",ipstr)。
response.sendRedirect("massage.jsp")。
数据库下载:
纯真IP数据库2012-5-25.mdb
JSP工程文件下载
此工程未作错误处理,不具健状性,非法IP输入会出错。
由于时间紧迫,没有完善此工程
版权申明
本文部分内容,包括文字、图片、以及设计等