客户服务器架构的图书馆服务系统设计与实现

上传人:无*** 文档编号:72745582 上传时间:2022-04-09 格式:DOC 页数:9 大小:283KB
收藏 版权申诉 举报 下载
客户服务器架构的图书馆服务系统设计与实现_第1页
第1页 / 共9页
客户服务器架构的图书馆服务系统设计与实现_第2页
第2页 / 共9页
客户服务器架构的图书馆服务系统设计与实现_第3页
第3页 / 共9页
资源描述:

《客户服务器架构的图书馆服务系统设计与实现》由会员分享,可在线阅读,更多相关《客户服务器架构的图书馆服务系统设计与实现(9页珍藏版)》请在装配图网上搜索。

1、客户/服务器架构的图书馆服务系统设计与实现夏帮贵(西华大学继续学院,成都 610039)摘要 针对现有图书馆手机服务系统的缺点,基于Java、Socket和Android技术,提出客户/服务器架构的图书馆服务系统的体系结构设计和解决方案。阐述客户/服务器架构的图书馆服务系统的设计思想、开发模型、主要功能模块以及关键技术的设计与实现。关键词 图书馆服务 手机图书馆 客户/服务器Java Android分类号 G250.7Design and Implementation of Library Service System Based on Client/Server StructureXia B

2、anggui(Department of Continuation Education,XiHua University, ChengDu 610039, China)Abstract Aiming at the defects in current mobile phone library service system,a solution of system structure about library service system is proposed,which is based on client/server structure. The design thoughts,dev

3、elopment framework,design and implementation of main function modules and key technology of the library system based on client/server structure are expatiated in this paper.Keywords Library Service mobile phone library client/server Java Android1 引言在信息时代,网络、手机、平板电脑以及其他便携式设备已成为获取信息的重要途径。图书馆的数字化,是为了将各

4、种资源、工具和服务集成到用户系统,为用户提供桌面或浏览器嵌入式服务12。为用户提供方便、快捷的移动互联服务已成为图书馆数字化的主要特征。现有图书馆手机服务系统主要采用短信、WAP或Web接入方式等技术实现。采用短信技术,需要图书馆建立短信服务器,并与SP协商短信服务,其建设、运行和维护成本高。WAP和Web接入方式类似,前者WAP协议,后者使用HTTP协议,用户需登录图书馆网站来访问各种服务,这种方式建设成本相对较低,但响应缓慢、用户体验差。本文采用Java、Socket和Android技术,设计实现了基于客户/服务器架构的图书馆服务系统。2 需求分析及技术思路读者对图书馆提供手机服务的访问需

5、求客观存在,主要包括图书信息查询、借阅记录查询、图书续借、图书预约、电子图书下载、读者证件挂失、图书馆服务公告等需求,目前的手机图书馆服务均采用短信或WAP技术实现3。对于图书馆Web服务,手机、平板电脑以及其他便携式设备可以通过内置浏览器进行访问。Android平台是Google推出的基于Linux内核的嵌入式操作系统平台,广泛应用于智能手机、平板电脑以及其他便携式设备4。目前,还缺少Android平台中的图书馆服务应用研究。本文提出的客户/服务器架构的图书馆服务系统,其服务器端以现有图书馆系统为基础,用服务器接口封装服务请求处理和后台数据库访问等所有操作。客户端运行于Android平台,与

6、服务器端通信采用Socket协议,通信信息以文本或XML格式封装。系统特点主要包括:系统服务器接口可直接部署到现有图书馆Web服务器,无硬件平台特殊要求,建设成本低;客户端运行于客户便携式设备,与服务器的通信采用Socket HTTP协议,数据流量小,响应速度快;与系统无关,即与特定图书管理系统无关,可方便地进行集成;客户端和服务器端接口均封装为Java类,可直接在各种Java应用程序中复用,而且具有跨平台、开源等特点,可轻松实现系统扩展、移植和集成5。3 系统设计3.1 系统体系架构设计根据用户需求,系统采用客户/服务器体系架构,如图1所示。Android客户端服务器端服务接口Interne

7、t书目数据库读者数据库其他数据库服务接口手机平板电脑其他便携式设备图1 图书馆服务系统架构客户端系统运行于支持Android平台的手机、平板电脑或其他便携式设备中,向客户提供各种图书馆需求服务菜单。用户选择菜单时,客户端服务接口程序将服务请求提交给服务器。在接收到服务器响应时,客户端服务接口解析响应数据包,将服务请求的处理结果显示在客户界面中。服务器端的服务接口负责接收客户端服务请求,将数据库操作请求提交给后台数据库,并将数据库处理结果封装为数据包返回客户端。3.2 系统开发框架根据系统体系架构,系统开发框架如图2所示。服务器端接口数据访问类书目数据库读者数据库其他数据库Android用户界面

8、请求处理类请求处理类结果解析类客户端接口图2系统开发框架服务器端接口包含一个数据访问类和一个请求处理类。数据访问接口类,使用JDBC实现数据库的更新(添加、删除和修改)和查询操作。请求处理类是一个Java Servlet类,接收客户端服务请求,并返回处理结果。各种数据库为图书馆现有系统的后台数据库。客户端接口包含一个请求处理类和一个结果解析类,这两个类用Java设计。请求处理类调用HttpURLConnection类访问服务器端请求处理类的UR6L。结果解析类调用SAX API解析从服务器返回的XML结果。用户界面使用Android Activity和视图组件实现。3.3 系统功能模块分析根据

9、系统需求,系统功能模块如图3所示。图书馆服务系统书目检索借阅记录查询图书续借图书预约证件挂失服务公告电子图书下载系统设置图3 图书馆服务系统功能模块系统功能模块运行于客户端,为用户提供各种图书馆服务。其中的系统设置功能用于设置访问图书馆服务使用的个人账号和服务器IP地址。系统通过数据访问类直接访问现有图书馆系统的各种数据库,数据库的管理由现有图书馆系统(如我校使用的汇文系统)完成,因而系统不需要设置数据库管理功能。4 系统实现基于上文的系统设计,笔者建立了一个SQL Server数据库模拟图书馆数据库,实现了系统的服务器端接口、客户端接口和图3中的部分功能。4.1 服务器端接口实现服务器端接口

10、开发工具包括:Eclipse、JDK、Tomcat和SQLServer。(1)数据访问类实现数据访问类doSqlDb提供三个公共方法:doSqlDb()、doUpdate()和doQuery()。doSqlDb()为类的构造方法,在创建doSqlDb类对象时,建立数据库连接,同时创建用于执行数据库操作SQL命令的Statement对象。doUpdate()方法调用Statement对象的executeUpdate()方法执行通过参数传入的数据库更新命令,完成图书预约、续借和证件挂失等操作,返回操作影响的记录数。doQuery()方法调用Statement对象的executeQuery()方法执

11、行通过参数传入的数据库查询命令,完成馆藏书目、新书信息和和借阅记录查询操作。查询结果封装为XML格式的字符串,其中XML根元素为,每个记录为一个子元素,记录的每个字段名作为的一个子元素。数据访问类doSqlDb的关键代码如下:package myActions;import java.sql.*;import com.microsoft.sqlserver.jdbc.*;public class doSqlDb Connection Con; Statement St; public doSqlDb() throws Exception /构造函数,创建数据库连接、创建执行SQL命令的语句对象

12、 /设置数据源对象参数 String url=jdbc:sqlserver:/localhost:1408;instancename=sqlexpress;databaseName=Libreaders;user=sa;password=123; Con =DriverManager.getConnection(url); int resultSetType = SQLServerResultSet.TYPE_SS_SCROLL_KEYSET; int resultSetConcurrency = ResultSet.CONCUR_READ_ONLY; this.St = Con.create

13、Statement(resultSetType,resultSetConcurrency); public int doUpdate(String sql) throws Exception /执行SQL添加、删除和修改等更新命令,返回命令影响的记录行数 return this.St.executeUpdate(sql); public String doQuery(String sql) throws Exception /执行SQL查询命令,查询结果转换为XML文本返回 String qr=; ResultSet rs=this.St.executeQuery(sql); ResultSe

14、tMetaData rsmd = rs.getMetaData(); int numberOfColumns = rsmd.getColumnCount(); qr=qr+; int n=0; while(rs.next() qr=qr+; for(int i=1;inumberOfColumns;i+) String colName=rsmd.getColumnName(i); qr=qr+rs.getString(i); qr=qr+; qr=qr+; n+; qr=qr+; return qr; 数据访问类doSqlDb可部署到JRE的Libext目录,供服务器的所有Java应用程序(包

15、括Web应用程序)访问;或者部署到Web应用程序的web-infclasses目录,供Web应用程序独立访问。(2)服务器端请求处理类实现服务器端请求处理类doServlet是一个Java Servlet类,它首先从客户端请求信息中获得服务识别代码和服务操作相关参数,然后生成相应的数据库操作SQL命令,再调用doSqlDb对象执行SQL命令完成数据库操作,最后将处理结果返回客户端。服务识别代码用于标识客户端请求的服务类型,如表1所示。表1 服务识别代码服务识别代码服务类型服务操作参数1图书书目信息查询查询关键字2读者借阅记录查询读者借阅证号3图书预约读者借阅证号、图书号4图书续借读者借阅证号、

16、图书号5证件挂失读者借阅证号6图书馆公告服务器端请求处理类doServlet关键代码如下:import java.io.IOException;public class doServlet extends HttpServlet protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException response.setContentType(text/html;charset=UTF-8); PrintWrite

17、r out = response.getWriter(); try String sid = request.getParameter(sid);/获取服务器识别代码 String readerid = request.getParameter(readerid);/获取读者证件号 String bookid = request.getParameter(bookid);/获取图书号 String key = request.getParameter(key);/获取查询关键字 String sql = , result = ; doSqlDb db = new doSqlDb();/创建数据

18、库操作对象 if (sid.equals(1) sql = select bookid,bookname,bookbrief,count form bookinfos where bookname like * + key + *; result = db.doQuery(sql); else if (sid.equals(2) sql = select bookid,bookname,lenddate,returndate form lendrecord where readerid= + readerid; result = db.doQuery(sql); else if (sid.eq

19、uals(6) result = db.doQuery(select * form libnews); else if (sid.equals(3) sql = insert into reserve(readerid,bookid) values( + readerid + , + bookid + ); result = db.doUpdate(sql) + ; else if (sid.equals(4) GregorianCalendar calendar = new GregorianCalendar(); DateFormat df = DateFormat.getDateInst

20、ance(); String lenddate, returndate; lenddate = df.format(calendar.getTime(); calendar.add(Calendar.DAY_OF_YEAR, 60); returndate = df.format(calendar.getTime(); sql = update lendrecord set lenddate= + lenddate + ,returndate= + returndate + where readerid= + readerid + , bookid= + bookid + ; result =

21、 db.doUpdate(sql) + ; else if (sid.equals(5) sql = insert into readerlose(readerid) values( + readerid + ); result = db.doUpdate(sql) + ; else result = error;/服务识别码错误 out.print(result);/向客户端返回结果 服务器端请求处理类在图书馆Web服务器中配置为Web应用程序,客户端通过其URL进行访问。4.2 客户端接口实现客户端开发工具包括Eclipse、JDK、ADT和Android SDK。(1)客户端服务接口实现

22、客户端接口定义为Java类,用户界面模块调用该类完成与服务器的通信。客户端服务接口由ClientRequest(请求处理类)和myHandler(结果解析类)两个类组成。ClientRequest类使用Java平台提供的URLConnection类完成与服务器的Socket通信,提交服务请求并返回结果。ClientRequest类主要包含两个公共方法:getDataAt()和doUpdate(),这两个方法均以服务器端服务接口的URL作为参数(服务识别码和操作参数封装在URL中)。前者用于执行馆藏书目、新书信息和和借阅记录查询操作,后者用于执行图书续借和预约操作。在执行查询操作时,返回结果封装

23、在一个XML格式字符串中,myHandler类应用SAX API该字符串中解析出查询结果7。ClientRequest类关键代码如下:package myLib.Clients;import java.io.BufferedReader;public class ClientRequest protected HttpURLConnection connection;String queryResultXML=;/保存封装查询结果的XML字符串int queryRecordCount=0;/保存查询结果中的记录条数ArrayList queryRecordColNames=null;/保存从X

24、ML解析出的记录字段名ArrayList queryRecordValues=null;/保存从XML解析出的数据项public void getDataAt(String urlString) throws Exception StringBuffer document = new StringBuffer();URL url = new URL(urlString);URLConnection conn = url.openConnection();BufferedReader buffer = new BufferedReader(new InputStreamReader(conn.g

25、etInputStream();String line = null;while (line = buffer.readLine() != null)document.append(line + n);buffer.close();queryResultXML=document.toString();SAXParserFactory factory=SAXParserFactory.newInstance();XMLReader reader=factory.newSAXParser().getXMLReader();myHandler hander=new myHandler();reade

26、r.setContentHandler(hander);reader.parse(new InputSource(new StringReader(queryResultXML);queryRecordColNames=hander.getQueryRecordColNames();queryRecordValues=hander.getQueryRecordValues();queryRecordCount=hander.getQueryRecordCount();public void doUpdate(String urlString) throws Exception StringBu

27、ffer document = new StringBuffer();URL url = new URL(urlString);URLConnection conn = url.openConnection();BufferedReader buffer = new BufferedReader(new InputStreamReader(conn.getInputStream();String line = null;while (line = buffer.readLine() != null)document.append(line + n);buffer.close();queryRe

28、sultXML=document.toString();myHandler类关键代码如下:package myLib.Clients;import java.util.ArrayList;import org.xml.sax.Attributes;import org.xml.sax.helpers.DefaultHandler;public class myHandler extends DefaultHandler String tagName,tagValue;int queryRecordCount=0;/保存查询结果中的记录条数ArrayList queryRecordColName

29、s=new ArrayList();/保存从XML解析出的记录字段名ArrayList queryRecordValues=new ArrayList();/保存从XML解析出的数据项public void startElement(String uri, String localName, String qName, Attributes attributes) tagName=localName;/保存当前元素名称if(tagName.equals(record)queryRecordCount+;/统计记录条数public void characters (char ch, int st

30、art, int length) tagValue=new String(ch,start,length);queryRecordValues.add(tagValue);if(!queryRecordColNames.contains(tagName)queryRecordColNames.add(tagName);public int getQueryRecordCount() return queryRecordCount;public ArrayList getQueryRecordColNames() return queryRecordColNames;public ArrayLi

31、st getQueryRecordValues() return queryRecordValues;4.3 系统功能模块实现在Android平台中,每个用户操作界面为一个Activity,在Activity中使用文本框、编辑框、按钮等UI组件来构建界面8。在Activity中,通过调用ClientRequest和myHandler对象,向服务器提交服务请求,获得请求结果。在设计时,注意两个问题:(1)每个Activity都应在配置文件AndroidManifest.xml中进行注册。(2)必须在AndroidManifest.xml文件的元素之后加入下面的代码,使客户端程序获得网络访问权限:

32、5 系统测试运行服务器端采用SQL Server和Tomcat模拟图书馆服务器,客户端使用Android模拟器。客户端系统启动后,首先显示图4所示的主界面。界面中显示了个人账号和服务器IP地址配置,界面下方显示了主界面菜单。从菜单中可选择修改服务器IP、修改个人账号、书目查询、借阅记录查询以及新书信息查询等操作。 图4 客户端系统主界面在主菜单中选择修改服务器IP时,可打开如图5所示的对话框。在对话框中输入服务器IP地址后,选择“保存”按钮即可完成服务器IP地址修改操作。 图5 修改服务器IP地址在主菜单中选择修改个人账号时,可打开如图6所示的对话框。在对话框中输入用户名和证件号后,选择“保存

33、”按钮即可完成个人账号修改操作。 图6 修改个人账号在主菜单中选择书目查询时,可打开如图7所示的界面,在搜索关键字框中输入要查询的书名关键字,再选择“搜索”按钮,界面下方会显示搜索结果。选中图书后,可在菜单中进一步选择查看图书详细信息或预约该书,或者返回主界面。 图7 图书信息查询在主菜单中选择“借阅记录”时,可打开如图8所示的界面,显示当前账号借阅的图书信息。选中图书后,可在菜单中进一步选择续借该书,或者返回主界面。 图8 借阅记录及图书续借客户端系统主要操作界面如上所述,其他界面不再赘述。6 结语基于手机、平板电脑或其他便携式设备的图书馆服务系统,是图书馆信息化发展的趋势。本文探讨了基于J

34、ava、Socket和Android技术,客户/服务器结构的图书馆服务系统的设计和实现方法。本系统可以于与更多的现有图书馆系统集成,使图书馆可以以极小的建设成本,为用户提供更多、更加方便快捷的图书馆服务。参考文献: 1张晓林.数字图书馆机制的范式演变及其挑战J.中国图书馆学报,2001,27(136):3-8,17.2乐小虬,李宇等嵌入式桌面信息服务及其系统实现J现代图书情报技术,2008,24(3):7-113吴政.通用手机图书馆系统的设计与实现J,现代图书情报技术,2009,3(1):98-1044百度百科名片.Android.EB/OL.5沈正华,孙辨华.Java将给图书馆现代化带来的影响J,现代图书情报技术,1998,14(6)43-476Cay S.Horstmann,Gray Cornell.Java核心技术卷:高级特性M.北京:机械工业出版社,2006: 125-1457Cay S.Horstmann,Gray Cornell.Java核心技术卷:高级特性M.北京:机械工业出版社,2006: 799-8028勒岩,姚尚郎.Google Android开发入门与实战M.北京:人民邮电出版社,2006: 57-135(作者E-mail:china_xbg)

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!