版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.学号:课程设计题目学院专业网络爬虫搜索引擎管理学院信息管理与信息系统班级姓名指导教师王新.武汉理工大学java 语言课程设计201年7月4日课程设计任务书学生姓名:指导教师:王新工作单位:信息管理与信息系统系题目:网络爬虫搜索引擎初始条件:合理应用 Java 相关知识与编程技能,结合UML 面向对象设计,解决信息管理领域的实际问题, 如学生成绩管理、 学籍管理、图书借阅管理、 自动存取款机、通信录管理、商品销售管理、医院门诊管理、火车订票管理、影院自动售票、世界杯足球比赛管理、人力资源管理、酒店前台管理、房产中介管理、停车收费管理等。要求完成的主要任务 : (包括课程设计工作量及其技术要求,
2、以及说明书撰写等具体要求)1进行需求分析,撰写需求文档,绘制用例图。2识别需求文档中的类,建模类,初步绘制类图(之后逐渐完善)。3确定、建模类的实例变量。4确定、建模类的方法。5若有需要,在系统中加入继承与多态。6将 UML 图转换成 Java 代码框架。7设计算法,若有复杂的数据结构需求,使用相应集合框架。8设计数据访问层,若有数据持久化需求,使用数据库/ 文件。- 2 -武汉理工大学java 语言课程设计9添加表示层,若程序运行在桌面,使用图形用户界面。10实现完整的系统,最终Java 源代码至少在 300 行以上。11进行测试,并给出相应结果。课程设计报告中要求详细描述思路、步骤、方法、
3、实现、问题及解决过程、操作说明、测试及结果。时间安排:12014 年 6月 23日 课程设计选题、查阅资料22014 年 6月 24日25 日 UML 面向对象设计32014年 6月 26日7 月 1 日 Java 程序设计与代码调试42014年 7月 2日 改进、完善、测试系统52014年 7月 3日 7 月 4 日上午 撰写、提交课程设计报告62014年 7月 4日下午 课程设计答辩指导教师签名:年月日系主任(或责任教师)签名:年月日网络爬虫搜索引擎项目介绍1.1 开发背景该项目软件开发的意图是开发出一款网络爬虫软件。应用目标为搜集网络信息,便于查询使用。在如今的BIG DATA 时代,网
4、络信息庞大而又复杂,用户很- 3 -武汉理工大学java 语言课程设计难直接从中获得需要的信息。 网络爬虫软件就是将这些信息收集并整理,当用户发起搜索请求时,该系统可将用户最需要的信息反馈给用户。1.2 用户的特点本软件为免费软件, 可供所有可使用互联网的用户使用。最终用户只需掌握基本的上网技术即可, 操作人员的主要工作是启动和关闭服务器,只需掌握基本的电脑使用方法即可。维护人员需要专业的程序员,懂得Java 的网络编程以及计算机网络基础,教育水平在专科以上。软件的预期工作时间为24h/ 日。组织结构图及用户角色如图表1-1 所示:1.3 需求分析各子模块功能的描述本系统共分为三大模块:爬虫模
5、块、数据库模块和搜索模块,也就是后台、前台和数据库。 每一个模块有各自的分工, 最后三大模块集合在一起构成一个完整的网络爬虫系统。各个子模块的详细功能如下:爬虫模块第一个模块为爬虫模块。 爬虫模块的主要任务是负责寻找网页,并将网页内的 URL和关键字提取出来。此模块又详细分为两大模块:服务器模块和正则引擎模块,这两个模块分别负责上述的两个功能。- 4 -武汉理工大学java 语言课程设计服务器模块向某个种子URL 发送请求,或得其页面内容;正则引擎模块将服务器获取的页面用正则表达式对其进行分析,截取其中的URL和关键字,然后再将 URL传递给服务器模块。系统按照这样的方式不断的抓取网页并进行分
6、析,最后将结果存进数据库。搜索模块第二个模块是搜索模块, 用户在搜索界面输入关键字, 然后系统在数据库中搜索对应的关键字,最后将结果返回给用户。此模块又分为搜索界面和结果界面。搜索界面是首页, 用户在此界面中输入想要搜索的关键词, 这些关键词将被此页面记录下来传递到数据中进行搜素。结果页面是数据库结果的接受者,当数据库完成搜素后会将结果传递给次页面,然后结果页面会将结果呈现给用户。数据库模块数据库模块在整个系统中起到存储和桥梁作用。爬虫模块将搜索的结果整理完成后存入数据库,搜索模块从数据库中获取需要的信息并呈现给用户。1.4 对非功能性的需求精度该系统的输入为一个字符串,里面包含了一个或多个关
7、键字,长度在38 个汉字以内,超过的部分将被直接舍弃。输出的数据要求包括网站的URL和页面简介,按照页面内容与搜索内容的匹配程度来排序。时间特性要求响应时间 0.01s更新处理时间 0.1- 5 -武汉理工大学java 语言课程设计数据的转换和传送时间 0.1s灵活性该系统运用的主要语言是Java,由于 Java 是一门跨平台的语言,所以本系统的兼容性比较强,只要配置了 Java 环境就可以运行。当该系统与数据库MySQL的接口发生变化时,系统在重新加载了新的驱动后要能够正常运行。输人输出要求输入:由用户输入搜索关键字,关键字类型为合法字符。输出:显示结果列表或提示信息,包含页面地址、页面标题
8、、页面描述的条目列表或字符串提示信息。故障处理要求出错输出信息:根据不同的错误提供不同的错误提示信息。例如无网络连接、无法检索到结果。出错处理对策: 1)一般错误:显示错误信息,提示用户重新操作2)严重错误:重新启动,必要时启用备份恢复数据其他专门要求如用户单位对安全保密的要求, 对使用方便的要求, 对可维护性、可补充性、易读性、可靠性、运行环境可转换性的特殊要求等。健壮性:如果用户在发送搜索请求后与服务器连接中断,在用户重新连接后并重新请求时,系统应快速将信息反馈给用户。可维护性:新的管理员应该可以在 10 分钟以内掌握关闭和开启服务器等基本操作。- 6 -武汉理工大学java 语言课程设计
9、3)运行环境可转换行:任何装有浏览器的系统都应该可以访问服务器。当服务器更换操作系统时,在部署好Java 环境后应可以马上运行。程序设计2.1 总体设计思想本软件通过客户端浏览器,用户设置自己的爱好,并通过http 传给服务器,服务器接收信息执行响应操作。2.3 程序设计总体框图系统功能层次模块图如图1-2 所示图表 1-1系统层次模块图2.4 程序详细设计1) RecordDAOProxy 类 UML 设计- 7 -武汉理工大学java 语言课程设计2) IRecordDAO 类设计说明3) DatabaseConnection 类设计说明(4)RecordDAOImpl 类设计说明(5)R
10、ecord类设计说明- 8 -武汉理工大学java 语言课程设计6) HtmlHelper 类设计说明7) SpiderThread 类设计说明8) DAOFactory 类设计说明9) Page 类 UML 设计( 10)测试类 UML 设计- 9 -武汉理工大学java 语言课程设计( 7)主体程序 UML 类图源代码部分:RecordDAOProxy.java 代码/*author*/public class ResultController private ResultController ()private static ResultController resultControll
11、er;-10-武汉理工大学java 语言课程设计/* return ResultController*/Public static synchronized ResultController getResultController() if(resultController = null)resultController = new ResultController();return resultController;/*param keyWordreturn Recordthrows Exception*/public ArrayList queryResult(String keyWord
12、) throws ExceptionString keyWords = keyWord.split(s);ArrayList list = new ArrayList();RecordDAOProxy recordDao =null;for(int i=0; ikeyWords.length;+i)keyWord = keyWordsi;recordDao = new RecordDAOProxy();list.addAll(recordDao.getRecord(WHERE recordTitle LIKE % +keyWord + %);recordDao = new RecordDAOP
13、roxy(); list.addAll(recordDao.getRecord(WHERE recordContent LIKE% + keyWord + %);-11-武汉理工大学java 语言课程设计return list;User.java 代码public class User implements Serializableprivate static final long serialVersionUID = 00L;private String no;private String name;private Integer age;private String sex;private
14、 String phone;private String imagePath;public String getNo() return no;public void setNo(String no) this.no = no;public String getName() return name;public void setName(String name) -12-武汉理工大学java 语言课程设计 = name;public Integer getAge() return age;public void setAge(Integer age) this.age = age;public
15、String getSex() return sex;public void setSex(String sex) this.sex = sex;public String getPhone() return phone;public void setPhone(String phone) this.phone = phone;public String getImagePath() return imagePath;-13-武汉理工大学java 语言课程设计public void setImagePath(String imagePath) this.imagePath = imagePat
16、h;BusinessObject.java 代码importpublic class BusinessObject int currentPos;User users;PropertiesUtil proutil;public BusinessObject()currentPos = 0;proutil = new PropertiesUtil(config/telephone.dat);users = getAllUsers();public User getAllUsers() -14-武汉理工大学java 语言课程设计List list = proutil.getUsers();User
17、 users2 = new Userlist.size();for (int i =0;i0)currentPos -;return userscurrentPos;-15-武汉理工大学java 语言课程设计public User next() if(currentPos users.length - 1)currentPos +;return userscurrentPos;public User last() currentPos = users.length - 1;return userscurrentPos;public void saveUser(User user) prouti
18、l.save(user);users = getAllUsers();currentPos = Integer. parseInt(user.getNo() - 1;PropertiesUtil.java 代码-16-武汉理工大学java 语言课程设计public class PropertiesUtil private ObjectInputStream ois = null;private ObjectOutputStream oos = null;private List lstUsers = new ArrayList();private String fileName = null;
19、public PropertiesUtil(String fileName)this.fileName = fileName;-17-武汉理工大学java 语言课程设计SuppressWarnings(unchecked)publicList getUsers()try ois = new ObjectInputStream(new FileInputStream(fileName);lstUsers =(ArrayList)ois.readObject();ois.close();catch(FileNotFoundException e)intRecord(); catch (ClassN
20、otFoundException e) e.printStackTrace(); catch (IOException e) e.printStackTrace();return lstUsers;public void save(User user)try oos=newObjectOutputStream(newFileOutputStream(config/telephone.dat);int i;-18-武汉理工大学java 语言课程设计for( i = 0;i = lstUsers.size()lstUsers.add(user);/ 新增oos.writeObject(lstUse
21、rs);oos.flush();oos.close(); catch (IOException e) e.printStackTrace();/*若记录文件不存在 ,则初始化记录文件*/private void intRecord()创建文件-19-武汉理工大学java 语言课程设计File f = new File(config/telephone.dat);try f.createNewFile(); catch (IOException e1) e1.printStackTrace();新建一条记录User u = new User();u.setNo(1);u.setName();u.
22、setAge(0);u.setSex(F);u.setPhone();u.setImagePath();try oos=newObjectOutputStream(newFileOutputStream(config/telephone.dat);lstUsers.add(u);oos.writeObject(lstUsers);oos.close();JOptionPane.showMessageDialog(null, 请重启本程序 );-20-武汉理工大学java 语言课程设计System.exit(0); catch (FileNotFoundException e1) e1.prin
23、tStackTrace(); catch (IOException e1) e1.printStackTrace();Test.java 代码public class Test private ObjectOutputStream oos = null;private List lstUsers = new ArrayList();User u1 = null;-21-武汉理工大学java 语言课程设计User u2 = null;User u3 = null;public Test() try oos=newObjectOutputStream(newFileOutputStream(con
24、fig/telephone.dat);u1 = new User();u1.setNo(1);u1.setName(人物 1);u1.setSex(M);u1.setAge(11);u1.setPhone(111);u1.setImagePath(config/demo8.jpg);lstUsers.add(u1);u2 = new User();u2.setNo(2);u2.setName(人物 2);u2.setSex(F);u2.setAge(22);u2.setPhone(222);u2.setImagePath(config/demo4.jpg);lstUsers.add(u2);-
25、22-武汉理工大学java 语言课程设计u3 = new User();u3.setNo(3);u3.setName(人物 3);u3.setSex(F);u3.setAge(33);u3.setPhone(333);u3.setImagePath(config/demo2.jpg);lstUsers.add(u3); catch (FileNotFoundException e) e.printStackTrace(); catch (IOException e) e.printStackTrace();public static void main(String args) Test t
26、= new Test();try catch (IOException e) -23-武汉理工大学java 语言课程设计e.printStackTrace();public class Result private String recordLink; private String recordTitle;private String recordAbstractContent; private String keywordTimes;public String getRecordLink() return recordLink;public void setRecordLink(String
27、 recordLink) this .recordLink = recordLink;public String getRecordTitle() return recordTitle;public void setRecordTitle(String recordTitle) this .recordTitle = recordTitle;-24-武汉理工大学java 语言课程设计public String getRecordAbstractContent() return recordAbstractContent;public void setRecordAbstractContent(
28、String recordAbstractContent) this .recordAbstractContent = recordAbstractContent;public String getKeywordTimes() return keywordTimes;public void setKeywordTimes(String keywordTimes) this .keywordTimes = keywordTimes;public class DatabaseConnection private Connection con= null ;private static final
29、StringURL=jdbc:mysql:/localhost:3306/webengine?useUnicode=true&characterEncoding=utf-8;private static final String USER=root;-25-武汉理工大学java 语言课程设计private static final String PASS=1234;public DatabaseConnection() throws ExceptionClassforName. (DRIVER);con=DriverManager. getConnection (URL, USER, PASS
30、);public Connection getConnection()throws Exceptionreturn con;public void close() throws Exceptionif(con!= null )con.close();-26-武汉理工大学java 语言课程设计public class SetCharacterEncodingFilter implementsFilter private String encoding;Overridepublic void init(FilterConfig filterConfig)throws ServletExceptio
31、n / TODO Auto-generated method stubthis .encoding = filterConfig.getInitParameter(encoding);Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException TODO Auto-generated method stub request.setCharacterEncoding( this .encodi
32、ng); chain.doFilter(request, response);Overridepublic void destroy() TODO Auto-generated method stub this .encoding= null ;-27-武汉理工大学java 语言课程设计importimportpublic class RecordDAOImpl implementsIRecordDAO SuppressWarnings(unused)private Connection con =null ;SuppressWarnings(unused)private PreparedSt
33、atement stat = null ;public RecordDAOImpl(Connection con) this .con = con;Overridepublic boolean insertRecord(Record record) throws Exception int i = 0;String sql = insert into Result(recordTitle,recordContent,recordLink)values(?,?,?);-28-武汉理工大学java 语言课程设计try PreparedStatement preStmt = con.prepareS
34、tatement(sql);preStmt.setString(1, record.getRecordTitle();preStmt.setString(2, record.getRecordContent();preStmt.setString(3, record.getRecordLink();i = preStmt.executeUpdate(); catch (SQLException e) e.printStackTrace();if (i = 1) return true ;/ else return false ;Overridepublic boolean clearAll()
35、 throws Exception Connection conn;boolean flag = false;String sql;try conn = con;-29-武汉理工大学java 语言课程设计sql = delete * from Result;flag = stat.execute(sql); catch (Exception ex) System.out .println(Error : + ex.toString();if (flag) return true ; else return false ;Overridepublic ArrayList getRecord(St
36、ring condition)throws Exception ArrayList records =new ArrayList();String sql = select recordLink,recordTitle,recordContent from Result +condition;try ResultSet rs=con.createStatement().executeQuery(sql);while (rs.next()Record record= new Record();-30-武汉理工大学java 语言课程设计record.setRecordLink(rs.getStri
37、ng(recordLink);record.setRecordTitle(rs.getString(recordTitle);String content= rs.getString(recordContent);if(content.length()=400)content = content.substring(0,400)+.;record.setRecordContent(content);records.add(record);catch (SQLException e) e.printStackTrace();return records;public ArrayList getR
38、ecord(String where,int number)throws Exception ArrayList records =new ArrayList();String sql = select recordLink,recordTitle,recordContent from Resultwhere +where + limit + Integer.toString (number);try ResultSet rs=con.createStatement().executeQuery(sql);-31-武汉理工大学java 语言课程设计while (rs.next()Record
39、record= new Record();record.setRecordLink(rs.getString(recordLink);record.setRecordTitle(rs.getString(recordTitle);String content= rs.getString(recordContent);if(content.length()=400)content = content.substring(0,400)+.;record.setRecordContent(content);records.add(record);catch (SQLException e) e.pr
40、intStackTrace();return records;importimportimport-32-武汉理工大学java 语言课程设计importimportimportimportimportimportimportpublic class GetResultAction extends Action public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) throwsException Ge
41、tResultForm getResultForm = (GetResultForm) form;String keyWord = getResultForm.getKeyWord();if(keyWord =null |keyWord.equals()keyWord = (String) request.getSession().getAttribute(keyWord);ResultController resultController = ResultController.getResultController ();String str = request.getParameter(P
42、ageIndex);-33-武汉理工大学java 语言课程设计if(str= null )str = 1;int currentPageIndex = Integer. parseInt(str);PageController pc = (PageController)request.getAttribute(pc);if(pc= null )pc = new PageController();ArrayList list = resultController.queryResult(keyWord);pc.setBigList(list);request.getSession().setAt
43、tribute(pc, pc);request.getSession().setAttribute(keyWord, keyWord);pc.setCurentPageIndex(currentPageIndex);return new ActionForward(/Result.jsp);调试过程-34-武汉理工大学java 语言课程设计( 1)进入界面( 2)搜索武汉理工大学招生信息网,出来以下界面(3 )点击搜索首页或者页面最下方的首页或返回搜索首页都可以回到开始的界面总结这次的程序实设计实验是对我们进入大学以来学习程序设计语言结果的一-35-武汉理工大学java 语言课程设计次大检验。自己动手,自己发现和解决问题。发现了自
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024酒水购销合同模板
- 2024三方运输合同的范本
- 2024购销水泥合同范文
- 标准房屋转让协议样本
- 2024房屋拆迁合同范本
- 2024机械设备购销合同范本
- 建筑材料销售合同模板:建筑材料买卖合同参考
- 2024居室装饰装修施工合同范本
- 2024年民事调解协议书参考范本
- 标准服务合同范例大全
- 工厂改造施工方案
- 初中英语新课程标准词汇表
- 《春节的文化与习俗》课件
- 手机棋牌平台网络游戏商业计划书
- 学校体育与社区体育融合发展的研究
- 医疗机构高警示药品风险管理规范(2023版)
- 一年级体质健康数据
- 八年级物理(上)期中考试分析与教学反思
- 国家开放大学《财政与金融(农)》形考任务1-4参考答案
- 2023银行网点年度工作总结
- 工厂反骚扰虐待强迫歧视政策
评论
0/150
提交评论