当前位置:首页优秀论文 正文
网上淘宝系统的设计与实现
2008/11/22 16:11:38 点击: 16973

 

高德亮,王伟伟,娄保建,君帅,郑鹏

(山东科技大学信息科学与工程学院,山东青岛,266510

 

摘要:在对大赛要求及现实情况进行深入分析的基础上,给出了一种综合应用XML、分布式查询技术的网上淘宝系统的设计方案,并进行了实现。该系统实现了大赛要求的主要功能:资源的分布式检索,资源预览或在线播放、下载。服务器的自动注册和注销以及多线程的应用以提高检索效率是该系统的主要特色。

关键词:分布式;网上淘宝;多线程

 


1.引言

目前网络上有大量提供共享资源的服务器,但是由于不同服务器的资源组织方式不同,如数据库、XML等,从而导致不同服务器之间资源的共享和发现非常困难。分布式的资源检索策略可以有效地解决这一问题。用户只要登录任意一台服务器,不仅可以检索本地资源,而且检索其它服务器上的资源。

该系统主要实现如下功能:

分布式检索:利用XML文件存储各类资源信息和服务器的IP信息列表,各服务器通过解析XML文件,可以获取本地资源信息和其他在线已注册服务器IP信息。分布式检索过程中,服务器之间利用HTTP协议进行通信;用户输入检索关键字后,服务器在检索本地资源的同时,采用多线程技术向其他在线已注册服务器传递检索关键字;各服务器检索完毕后,将符合检索要求的资源信息发送到请求服务器中,并以较为友好的界面呈现给用户,方便用户的预览、在线播放和下载。

服务器的自动注册和注销:各服务器启动时自动向主服务器注册,然后各服务器自动更新服务器列表。某个分服务器关闭时,主服务器对其自动进行注销。

资源的呈现与下载:资源以分页的形式呈现给用户,用户可以在线预览WordPowerPointExcel等文档以及各种图片,或者在线播放音频、视频文件,并能下载检索到的各类资源。

2. 系统设计及实现

服务器自动注册与注销

当分服务器启动时,自动向主服务器发送注册信息,主服务器添加分服务器的IP信息到myhost.xml文件中,然后其他分服务器自动从主服务器获取更新后的myhost.xml 文件。

当分服务器关闭时,主服务器自动将其注销,即主服务器将需要注销的分服务器的IP信息从myhost.xml文件中删除,然后其他在线分服务器从主服务器自动获取更新后的myhost.xml文件。

实现时,自定义Listener类实现了ServletContextListener接口,使分服务器启动时实现自动注册,关闭时主服务器实现自动对分服务器注销。

核心步骤如下:

1)在web.xml中配置接口类

<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee

http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<listener>

<listener-class>

sysmgr.StatisticsContextListener

</listener-class>

</listener>

</web-app>

2)服务器自动注册。服务器在启动时,根据test.xml判断此服务器是否为主服务器,如果是主服务器,则在根目录下创建myhost.xml,格式如下:

<?xml version="1.0" encoding="UTF-8"?>

<hosts>

<host>

<url>http://192.168.0.1:8080/</url>

</host>

</hosts>

如果不是主服务器,则向主服务器发送本服务器已打开的消息,并传递一个URL对象:

url = new URL("http://" + remote + ":8080/hostServlet?opraParam=startup&host="+ host + "&remote=" + remote)

主服务器接收到消息后,将此服务器的IP地址添加到myhost.xml,然后将配置文件已更新的消息发送到其他服务器;各服务器收到消息后,下载主服务器的myhost.xml并覆盖原有文件,实现各服务器myhost.xml的同步更新。其中,主服务器采用多线程机制实现配置文件的分发。

3)服务器自动注销。在服务器关闭时,判断是否为主服务器,如果是主服务器,则正常关闭,否则通知主服务器此服务器将关闭,而后主服务器删除其在myhost.xml中的IP信息,随后通知其他服务器更新myhost.xml。此后过程与服务器自动注册的配置文件更新过程类似。

分布式检索

综合运用JavaBean、多线程、session和基于XPathXML查询等技术实现资源的分布式检索。主要过程为:

1)创建一个Info Bean,并生成一个对象,用于存储查询关键字、查询资源类型等检索请求信息,以及检索完成后返回的资源信息。

2)基于XPathXML查询。从搜索页面获取搜索关键字和搜索类型信息后,利用多线程机制把检索关键字分发到各服务器,随后各服务器根据查询信息生成XPath表达式,并检索本地test.xml,完毕后将相关资源信息返回给发送请求的服务器,从而实现分布式查询。

3)把检索到的相关信息,包括搜索关键字、搜索类型、搜索时间以及搜索结果,封装在一个Info Bean对象中,然后将此对象保存于session中。其中Info Bean实现了Serializable接口以实现session持久化,进而实现搜索结果的临时存储。

此后,用户可以查看、预览、下载或者播放检索的资源。

3. 其他相关技术

系统实现过程中,还利用了其他一些技术,主要有:

1)中文路径识别。以下代码实现了将含有中文字符、空格的路径转化为可识别路径格式:

String strUrl = request.getParameter("strUrl");// 获取资源路径

int intName = strUrl.lastIndexOf('/') + 1;   //路径中最后一个“/”的位置

String urlReal = strUrl.substring(0, intName)

          + URLEncoder.encode(strUrl.substring(intName), "GB2312");

urlReal = urlReal.replaceAll("\\+", "%20");       //将路径转换

2)文件下载。首先获取资源的URL,在正确识别其中的中文路径后,利用java.net包中的URL类、HttpURLConnection类连接资源,取得资源的数据流,然后把文件保存到本地计算机,从而实现下载。代码如下:

BufferedInputStream bis = null;

URL url = null;

HttpURLConnection httpUrl = null; //建立链接

url = new URL(urlReal);

httpUrl = (HttpURLConnection) url.openConnection();//连接指定的资源   

httpUrl.connect();//获取网络输入流

bis = new BufferedInputStream(httpUrl.getInputStream());

//设置输出格式

response.reset();

response.setContentType("application/x-msdownload;");

response.addHeader("Content-Disposition","attachment;filename=\"" +

new String(fileName.getBytes("GB2312"),"iso8859-1") + "\"");

3)文件预览。利用Apache POI包获取文档资源(WordPPT等)的内容,如果文档字符超过1000个,则只截取前1000个字符,然后实现预览;利用嵌入相应播放器插件的方法实现视频、音频等文件资源的在线播放;利用<img>html标识预览图片文件。

4 结束语

本系统实现了分布式检索、资源预览等功能,操作方便,界面美观,易用性较强。而服务器的自动注册和注销方便了服务器的配置和更新,避免了繁琐、易出错的手动配置;利用多线程机制进行资源检索和服务器信息更新,从而较大地提高了检索速度。但是由于时间有限,系统还需要进一步完善。在详细分析大赛要求的基础上,利用JavaXML等相关技术设计并实现了一个网上淘宝系统,完成了大赛要求的功能,即资源检索、下载、预览或者播放等。所实现的系统运行正常,界面友好,操作简便,部署方便,检索效率较高。所具有的分布式资源检索、服务器的自动注册与注销等功能是本软件的特色。

参考文献:

[1]张海藩.软件工程导论(第四版)[M].北京:清华大学出版社,2003.

[2]Bruce Eckel,鹏译.Java编程思想(第四版)[M].北京:机械工业出版社,2007.

[3]侯要红,栗松涛编著.Java XML应用程序设计.北京:机械工业出版社.2007.

[4] Horstmann,C.S.,Cornell,G.著;陈鹏等译.Java2核心技术(第七版).北京:机械工业出版社,2006

 

联络方式:

(1)    通讯地址:青岛市经济技术开发区山东科技大学信息学院计算机系,266510

(2)    电话:15064837751

(3)    E-mailsdkdrunner@126.com


 

Copyright 2007-2014 济南计算机学会.All Rights Reserved 鲁ICP备18019203号
济南计算机学会维护管理
联系电话:0531-88391234