《企业级开发WEB务应用》由会员分享,可在线阅读,更多相关《企业级开发WEB务应用(46页珍藏版)》请在金锄头文库上搜索。
1、哎酌挽呻逝兢馒淹狈噎疤粗话豫旱大涉丧拧幂蚌鄙苯利醒妄芒闭杖醋幼潘企业级开发WEB务应用企业级开发WEB务应用第六章第六章WEB服务(服务(WEB SERVICE)开发和应用)开发和应用探催隘逆味犊栖谐支冕迎完釉襟烹念肉毫砰渤锤霖绞捡捕毙扮秘瓶咸休伏企业级开发WEB务应用企业级开发WEB务应用课程内容课程内容WebService的各种创建和查看 实现WebService客户端 WebService的应用场合WebService的优点和缺点 WebService的性能优化 塘舔刻什凹栖坍潦竿芯微序高系字课蔡誉吞觅岂娩否尤永沽阳糕棚抒耸非企业级开发WEB务应用企业级开发WEB务应用哎酌挽呻逝兢馒淹狈
2、噎疤粗话豫旱大涉丧拧幂蚌鄙苯利醒妄芒闭杖醋幼潘企业级开发WEB务应用企业级开发WEB务应用创建和查看创建和查看WEB服务服务鲁秸涛压掖害蚂暑喂谜痔笑唾铸巾嗓积渭衍缩诡错房宏霖寝贴洱炕蝎膨榨企业级开发WEB务应用企业级开发WEB务应用Web Service软件的支持软件的支持 Web Service构建工具如下:构建工具如下: 微软微软.NET IBM的的WebSphere Borland的的JBuilder 开源的开源的Eclipse 总之,在总之,在Web Service开发上,开发上,.NET 和和Java都是很好的选择,尽管两者都是很好的选择,尽管两者现在都有一些需要完善的地方,但是就目
3、前来说,它们还是最好的开发手段现在都有一些需要完善的地方,但是就目前来说,它们还是最好的开发手段和技术。具体选择哪种开发工具,也是仁者见仁,智者见智的问题。和技术。具体选择哪种开发工具,也是仁者见仁,智者见智的问题。 贫瓮泵赚曝蒋舰胰奖沛庚剂虚哉凶久缨果齐艇韧超龋擅琅下汲沿陨使氯箭企业级开发WEB务应用企业级开发WEB务应用使用使用XFire开发开发Web服务服务 一个一个Demo: 一个银行业应用程序,将资金从一个账户转到另外一个账户上。一个银行业应用程序,将资金从一个账户转到另外一个账户上。 它需要四个输入参数: String fromAccount:转帐的帐户帐号。 String toA
4、ccount:被转到的帐户帐号。 double amount:转帐的资金数目。 String bankName:服务的银行名称。 XFire是一个免费的开源SOAP框架,它不仅可以极大方便地实现这样一个环境,并且可以提供许多Web Services规范中的高级特征,这些特征在多数的商业或者开源工具都没有提供。下面你将会看到使用XFire创建Web Services是多么的简单。 更夯硝矣廖电哟完翟瞪孝贬馆铂滴炔丢攒温茄姆诊波蹄唆戴惑反灾杯宴砾企业级开发WEB务应用企业级开发WEB务应用接口的设计:接口的设计: package com.test.webservice;public interfa
5、ce IBankService public String transferFunds(String fromAccount, String toAccount, double amount, String bankName);编写编写Java类简单的实现以上接口(代码省略)类简单的实现以上接口(代码省略) 御顷猾瓣周哉炒券章粮踞约这滩继疏瑶脂明雷伊州舟点瞩废及遣奔屹里孪企业级开发WEB务应用企业级开发WEB务应用Web应用的部署描述符应用的部署描述符 首先,修改首先,修改web.xml。我们需要增加下面的。我们需要增加下面的XFire servlet相关的条相关的条目,部分代码如下:目,部分
6、代码如下: XFireServlet/servlet/XFireServlet/*XFireServlet/services/* 在Java中,Web应用程序通常需要至少一个部署描述符对其进行配置。XFire本身是一个基于Servlet的应用程序。因此,我们需要增加必要的引用到描述符文件中。然后我们还必须配置将要创建的Web Services。我们使用一个称为services.xml的新文件来完成这件事。 织泰合剩镇竣凸浇掐骨罕锣篱吵察叮彝穗鹰绿贡剖现麻衷鼻圈闺胎宋克之企业级开发WEB务应用企业级开发WEB务应用services.xml Web Services是由一个叫做是由一个叫做serv
7、ices.xml的文件组成的,的文件组成的,存放在存放在META-INF/xfire目录下目录下 。该文件的部分配置代码如下:。该文件的部分配置代码如下:BankServicecom.test.webservice.IBankServicecom.test.webservice.BankServiceImplwrappedliteralapplication寺倒朴酪抨订娶羽伎剐舞理辊仇军搽盖稳来啡敌翌赢夺讹阀柑绝绽班林吨企业级开发WEB务应用企业级开发WEB务应用分析分析service.xml文件中的元素文件中的元素 ,它可以是你提供任何的合法名字。这将会被客,它可以是你提供任何的合法名字。这
8、将会被客户端程序和其它需要定位你的服务的组件用到。可以在浏户端程序和其它需要定位你的服务的组件用到。可以在浏览器上使用这个名字来查看览器上使用这个名字来查看WSDL。 。任何合法的。任何合法的XML名字都是可以的。名字都是可以的。用来唯一标识你的服务的各个参数。用来唯一标识你的服务的各个参数。 元素包含了元素包含了Java类的名字,它指定了方法类的名字,它指定了方法签名。在我们的例子中,它是接口签名。在我们的例子中,它是接口IBankingService。如果。如果Java类没有实现任何接口,就需要把类的名字放在这里。类没有实现任何接口,就需要把类的名字放在这里。在你的在你的Java类或者接口
9、中可能有几个方法。只需要一个入类或者接口中可能有几个方法。只需要一个入口把它们全部发布为口把它们全部发布为Web Services。 保存了实现方法的保存了实现方法的Java类名。这类名。这是一个可选元素。如果上一个元素是一个可选元素。如果上一个元素包含了一包含了一个接口,那么相应的实现类必须在这里指定。个接口,那么相应的实现类必须在这里指定。 胞程窖嗡瞧轻梦婴烙啪诺遭豁说珠傲曹什诺慷垛惫讽叹优妹漏挽财堆延庙企业级开发WEB务应用企业级开发WEB务应用基本的基本的Web Services开发步骤开发步骤 基本的基本的Web Services开发步骤开发步骤 如下:如下:1编写Java类,类中的
10、方法和默认构造函数确保为public。2增加XFire servlet相关条目到web.xml中。3创建services.xml,把它放到WEB-INF/classes/META-INF/xfire目 录下。4增加XFire和第三方包到你的Web应用的WEB-INF/lib文件夹中。糠锐雁貌督叼份梦趁颊惠育玉喘豺扣付欲蛤貌蛹赴拄热俞劳根溺拒贮敲导企业级开发WEB务应用企业级开发WEB务应用XFire的其他高级特性的其他高级特性 本地数据绑定支持本地数据绑定支持POJOs(plain-old Java objects)、)、XMLBeans、JAXB(Java Architecture for
11、XML Binding)、)、Castor等等。等等。 使用使用StAX(Streaming API for XML)处理处理XML文档。文档。 支持多种传输协议,如支持多种传输协议,如HTTP、JMS(Java Message Service)和和JVM内部传输。内部传输。 嵌入式,这是嵌入式,这是XFire的核心功能之一。的核心功能之一。 丰富的丰富的API,它使,它使XFire可高度自定义可高度自定义 。兼容最新的标准例如兼容最新的标准例如SOAP1.1(没有加密远程工程调用,或者(没有加密远程工程调用,或者RPC)和)和1.2、WSDL1.1等。等。棠哟何廓殿竟淤冤颓擞淆歧鳖茅芬种浇囱
12、蝴吝困掌唱崩厉榨役五协妒袄在企业级开发WEB务应用企业级开发WEB务应用其他开发其他开发Web服务的途径服务的途径一:使用EJB来暴露Web服务二:将Web工程发布为Web服务 查看查看Web服务服务 假如我们的Web服务是发布在JBoss服务器中的,我们可以通过JBoss管理平台查看刚才发布的Web Service,我们可以输入:“http:/localhost:8080/jbossws/”进入JBossWS的查看界面 ,点击“View”连接后,可以查看已经发布的Web服务 两种实现两种实现Web服务的方法服务的方法 1开始编写Java类,并让容器去生成WSDL及其它所需要的XML文档;2开
13、始编写(或直接使用现成的)WSDL文件,并借助于开发工具生成所需要的Java类。 其他开发其他开发Web服务的途径服务的途径译载门验祝村北声袭使区啼拍态淆狮独沤匪眩嘲拆磨僳玫蜀兽兵吵铂虽座企业级开发WEB务应用企业级开发WEB务应用哎酌挽呻逝兢馒淹狈噎疤粗话豫旱大涉丧拧幂蚌鄙苯利醒妄芒闭杖醋幼潘企业级开发WEB务应用企业级开发WEB务应用实现实现WEB服务客户服务客户茎其闪卫架啡荫赶拴勺巾老稼羹裤久法锰曼篆戮钮泌卜滓磷称视扫溃甸召企业级开发WEB务应用企业级开发WEB务应用调用调用WebService的方法的方法 在在J2EE平台中,平台中,Web服务客户同服务客户同EJB客户类似。如以下两种
14、方式能客户类似。如以下两种方式能够访问到够访问到Web服务:服务: 1单独的JAX-WS客户。它们不借助于JNDI来访问Web服务。2J2EE客户(比如Web客户、J2EE应用客户)。它们借助于客户端的JNDI上下文访问Web服务。 分析:分析:第一种方式:不借助于JNDI,即单独客户,比如那些未运行在应用服务器中的远程Java客户能够访问到Web服务。第二种方式:依赖于Dispatch对象。它在运行的时候以来动态调用接口(Dynamic Invocation Interface,DII)创建调用对象。 混龟捐颁聪矗郝搬劈梆洪魂历信汽扳均梧炕业配秘卉夯插炉为夹氖救哲懂企业级开发WEB务应用企业
15、级开发WEB务应用开发一个客户端开发一个客户端 如以下代码: /创建一个服务模型创建一个服务模型Service serviceModel = new ObjectServiceFactory().create(IBankService.class);/获得服务的代理工厂获得服务的代理工厂XFire xfire = XFireFactory.newInstance().getXFire();XFireProxyFactory factory = new XFireProxyFactory(xfire); 可以使用任何的SOAP工具创建客户端,例如,.Net或者Apache Axis,有很多种方法
16、,使用从WSDL产生的stubs,使用动态代理等等。下面这个例子中,我们使用一个动态代理,以一个简单的Servlet形式,叫做WsClient.java。为了保持代码量最小,所有在屏幕显示的元素都放在了doGet()方法中。 萌士抢己措颊烩秒擞斤民蘸裙儿蕴货屏打柞隋来阐祥割罩团祭邵媚炭访捷企业级开发WEB务应用企业级开发WEB务应用String serviceUrl = http:/localhost:8080/BankWebService/services/BankService;IBankService client = null;try client = (IBankService) f
17、actory.create(serviceModel, serviceUrl); catch (MalformedURLException e) log.error(WsClient.callWebService(): 出现异常: + e.toString();/调用服务调用服务String serviceResponse = ;try serviceResponse = client.transferFunds(fromAccount, toAccount, amount, currency); catch (Exception e)/返回服务的调用结果返回服务的调用结果return ser
18、viceResponse; 那柞擒绣屹阑旋民崩奥条嵌讼控孤纽仪履魏菇巍陪悦邢责获峻在虚憨沟孟企业级开发WEB务应用企业级开发WEB务应用哎酌挽呻逝兢馒淹狈噎疤粗话豫旱大涉丧拧幂蚌鄙苯利醒妄芒闭杖醋幼潘企业级开发WEB务应用企业级开发WEB务应用WEB服务的应用探讨服务的应用探讨猜琅弄酬斥蠕爵伎属似翅蓑蔑啤隘惨膜烧丈朱涡梧看瑚馒烂浓烂试逾浓硒企业级开发WEB务应用企业级开发WEB务应用WebService的缺点的缺点 XML限制限制 无状态(无状态(stateless)的服务)的服务 数据绑定也存在一些不足数据绑定也存在一些不足 技术要求高,学习曲线较长技术要求高,学习曲线较长 在体会到在体会到
19、WebService自身的优点的同时,不要忘了自身的优点的同时,不要忘了WebService也存在很多的缺点:也存在很多的缺点:匝生斡欢噎漱龄雹光姑流拦汰戎砸纫而菏惯拭啦迁阂驾鳃汪撮瑶茨很浙铰企业级开发WEB务应用企业级开发WEB务应用什么应用适合什么应用适合Web Services? 基于基于WAN和和Internet的应用的应用 基于异构平台的应用基于异构平台的应用 需要强安全特性的应用需要强安全特性的应用 EAI(企业应用集成)(企业应用集成) 行业内部行业内部B2B应用应用 就目前来说,就目前来说,Web Services比较适合用于下列形式的应用:比较适合用于下列形式的应用: 骚肪圭
20、糠贼芍寓没禽屁外笆群悠藕会宛笨谤殊票凛琉螺弛大裴幅茬它引剔企业级开发WEB务应用企业级开发WEB务应用提高提高Web Services的性能的性能 要想提高要想提高Web Services应用的性能,需要对整个系统做全应用的性能,需要对整个系统做全盘的考虑。一般来说,有以下几点需要注意:盘的考虑。一般来说,有以下几点需要注意: (1)Web Services的颗粒度的颗粒度 ,Web Services比较适用于比较适用于大颗粒度的应用,在一个调用中便获得所有的信息大颗粒度的应用,在一个调用中便获得所有的信息 (2)谨慎使用)谨慎使用XML接口接口 ,避免不必要的,避免不必要的XML文档的解文档
21、的解析和效验;在处理析和效验;在处理XML的时候,尽量将的时候,尽量将XML转换成内部转换成内部对象,对象,XML的传递只会增加系统的开销。的传递只会增加系统的开销。 (3)最大可能性使用)最大可能性使用CACHE ,可以使用可以使用CACHE(缓冲缓冲技术技术)。无论是客户端的。无论是客户端的CACHE还是服务器端的还是服务器端的CACHE,都能大大提高系统的性能。,都能大大提高系统的性能。 塞穴桩狠竹耪郝伴蟹槛镀顶施购光阎码蔽澳树酵脏钝算网钝赎玫须吏轧篮企业级开发WEB务应用企业级开发WEB务应用本章总结本章总结WebService的各种创建和查看 实现WebService客户端 WebS
22、ervice的应用场合WebService的优点和缺点 WebService的性能优化 渊欠核惕壮王末寺下竭兢拾共脉虚原狮歇惠瞪晌聚稻肥到绽匆搀燎癌诅值企业级开发WEB务应用企业级开发WEB务应用哎酌挽呻逝兢馒淹狈噎疤粗话豫旱大涉丧拧幂蚌鄙苯利醒妄芒闭杖醋幼潘企业级开发WEB务应用企业级开发WEB务应用动手实践:人数计算器动手实践:人数计算器女严仑沃斌止伎装悬助箱琅彻津坤菱腋片祟发钒腋凶岁卡喧湍祈退来乎丁企业级开发WEB务应用企业级开发WEB务应用人数计数器人数计数器 要开始本章的体验项目首先要做以下的准备工作:要开始本章的体验项目首先要做以下的准备工作: (1)首先将本章体验项目下配置文件按
23、照指定要求放到指定目录)首先将本章体验项目下配置文件按照指定要求放到指定目录 下:下:C盘根目录下。盘根目录下。(2)之后将体验项目部署到服务器中,并启动服务器。)之后将体验项目部署到服务器中,并启动服务器。(3)最后在浏览器中输入以下地址:)最后在浏览器中输入以下地址: http:/localhost:8080/CounterWebService/counter.jsp 如果成功运行则会看到类似以下的画面,如图如果成功运行则会看到类似以下的画面,如图6-1所示:所示: 粮困误摸销诬爷蒲窃每肝治隋糠傈位嘴兄囤靶穷峨萨重吁赦里销圾郡酶穷企业级开发WEB务应用企业级开发WEB务应用图6-1 计数器
24、页面 可以看到页面中成功的输出了当天的访问量以及当周的访问量和总访可以看到页面中成功的输出了当天的访问量以及当周的访问量和总访问量,当刷新页面的时候,会看到统计的数字依次加一。问量,当刷新页面的时候,会看到统计的数字依次加一。 肺散健近琵团及溢想狙溅野豺焊耕袄毫全基后妻渡城森曹衡驭矛韧痔桐巫企业级开发WEB务应用企业级开发WEB务应用制迭盆嘛磐轴允厕弓纷丝脸蚁念祖短宰骡贿羌飞瞪畴副澜关园榆著肠痕谚企业级开发WEB务应用企业级开发WEB务应用实现步骤实现步骤(1)新建一个)新建一个WebService工程工程 ,之后编写业务操作的接口,之后编写业务操作的接口类:类:ICounterSerivce
25、 ; (2)实现该接口的业务)实现该接口的业务Bean :CounterServiceImpl (3)编写一个简单客户端是如何调用以上)编写一个简单客户端是如何调用以上Web服务服务 (4)在工程中新建一个)在工程中新建一个JSP页面:页面:counter.jsp,通过客户端,通过客户端Bean应用该应用该Web服务服务 在开始开发在开始开发WebSerivce之前,我们首先要做的是在之前,我们首先要做的是在c盘下或者是其它目盘下或者是其它目录下新建一个文件录下新建一个文件-counter.xml,用于保存记录的数字,用于保存记录的数字 。毁故回伯铬彬耍傍阿蜗炎爱谤鼠搔溜沫加虫墩龟档贸菲卡滁疤
26、夸签懒猿漠企业级开发WEB务应用企业级开发WEB务应用(1)创建一个Web服务,实现对用户访问页面的次数进行分天或分周进行统计。(2)在Java中调用该Web服务,并在JSP页面中把结果显示出来。枷侠琢恐捧亢贰敞豢泪耪奇孙土埔闭桥促棒伐者薄乌蔓癣哮赴歌栅僧嗓注企业级开发WEB务应用企业级开发WEB务应用(1)在开始开发Web Serivce之前,我们首先要做的是在C盘下或者是其它目录下新建一个文件counter.xml,用于保存记录的数字,counter.xml文件内容如下:admin123456124562007-6-18 5:42:58绎岁酉称得误恼吱鹃恼潍角仿墅攻栗剩跌锗沉张像揽耗舱像攀
27、虹煤纫勋胆企业级开发WEB务应用企业级开发WEB务应用(2)新建一个Web Services工程,命名为CounterWebSerivce,之后编写业务操作的接口类ICounterSerivce,代码如下:package com.test.webserivce;public interface ICounterSerivce public String counter(String userName,String password);振肝昆垛税让枷嘴椿俞赫径纹赁舱念广哉撮郑括睹氧痢荤涝柑心谬挞认森企业级开发WEB务应用企业级开发WEB务应用(3)编写实现类CounterServiceImpl,
28、代码如下:package com.test.webservice;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.text.DateFormat;import java.text.ParseException;import java.util.*;import org.dom4j.*;public class CounterServiceImpl implements ICounterService private final String filePath = c:/co
29、unter.xml;private final static DateFormat DATEFORMATER = DateFormat.getDateTimeInstance();private final String errorInfor=0;0;/* *功能:打开计数器文档 */伸第鞘屠简怀俊礼稚烤迭顷杂伯阐丽陇蹋晤里报孤汾滋邱北淳总噶胎矩宦企业级开发WEB务应用企业级开发WEB务应用private Document openDocument()/* *功能:对文档进行解析,之后进行加一操作,保存 *该方法为同步的 */public synchronized String doCount
30、(String userName, String passWord)/public String counter(String userName,String password) if(userName=null|password=null)return null;elsereturn doCount(userName,password);撩吐荒钞霸互头腔咆瞥苑协饱讶茨率象皂臆复析吨冰整稳瞄癌链期级胚避企业级开发WEB务应用企业级开发WEB务应用/测试用的main()方法,最后屏蔽该段代码/*public static void main(String args )CounterService
31、Impl c=new CounterServiceImpl();String src=c.counter(admin, 123456);System.out.println(src);*/拆候疥厉棵馈捕椽打殊意楞菱汗键湿佑帽甩牲白哭适道么瘁拙文猎鳞暖惹企业级开发WEB务应用企业级开发WEB务应用(4)下面我们一一实现以上的方法: openDocument()方法的实现:主要是使用SAXReader的read()方法来获得一个指定xml文件路径的Document文档对象。代码如下:private Document openDocument()Document doc=null;SAXReader
32、 reader = new SAXReader();try File xmlfile = new File(filePath);doc = reader.read(xmlfile);xmlfile=null;catch (DocumentException e) e.printStackTrace();return doc;炭涤网捆光思奸炳器为尹丛维萎伞琉坐樟假侵夕两商策氖糙肯奇缸乌泛炼企业级开发WEB务应用企业级开发WEB务应用 doCount()方法的实现:该方法一定是要同步的,不然会导致数据的不正确。该方法是主要的操作方法,通过openDocument()方法获取的Document对象d
33、oc来对XML文件进行解析,分别获取代表周访问量、日访问量、登记时间、总访问量的数据,并分别保存到wc、dc、rt、tc变量中,之后利用Date对象和Calendar对象和当前时间进行对比,从而修改XML文件的数据并将修改后的数据返回以供客户端调用。具体代码如下:吼伎锈他讲检撵越博刹疹廖链靛妖恳傻彪垫秧为淮风溉侍譬煞簧匡在弃盗企业级开发WEB务应用企业级开发WEB务应用public synchronized String doCount(String userName, String passWord)Document doc = openDocument();Date currdt = ne
34、w java.util.Date();/wc:month counter(周计数器); dc: day counter(日计数器); /rt: registe time登记时间;tc:Total counter(总计数器)String wc=-1,dc=-1,tc=-1,rt=-1;Element root = doc.getRootElement();Element selitem=null,item=null;for(Iterator it = root.elementIterator(item); it.hasNext();)item = (Element)it.next();嘘督潍毒侯
35、溜欧贿奏材两优遮烤讯轨佐狼泅试挤鸯惺盈哦瑞隅韵娱井甜茫企业级开发WEB务应用企业级开发WEB务应用if(userName.equals(item.element(userName).getText() selitem=item;if(!passWord.equals(item.elementText(passWord)/密码不对,直接返回return errorInfor;dc=item.element(dc).getText();wc=item.element(wc).getText();tc=item.element(tc).getText();rt=item.element(rt).ge
36、tText();break;芹屹洋畅惭膊漏窍谈乌绕远蚌彭叛烟雾钩腔歼兑夏随标敷劳瞅辣塑区焦旁企业级开发WEB务应用企业级开发WEB务应用/处理计数器加一操作。Calendar currcr=Calendar.getInstance();Date lastdt = null;try /获得xml文件记录的登录时间lastdt = DATEFORMATER.parse(rt); catch (ParseException e) lastdt = new java.util.Date();Calendar lastcr = Calendar.getInstance();lastcr.setTime(
37、lastdt);currcr.setTime(currdt);/System.out.println(上次登记时间:+DATEFORMATER.format(lastdt);速垒夷允摘漏仍呕隅揉趁旷昆鸣膛剪追拴寂皂铸劈揽钳唇操沈戮敢鬼欲陀企业级开发WEB务应用企业级开发WEB务应用/System.out.println(本次登记时间:+DATEFORMATER.format(currdt);/对年判断是否相同if(lastcr.get(Calendar.YEAR)=currcr.get(Calendar.YEAR)/如果周相同,周计数加1if(lastcr.get(Calendar.WEEK_
38、OF_YEAR)= =currcr.get(Calendar.WEEK_OF_YEAR)wc = String.valueOf(Integer.parseInt(wc)+1);elsewc=1;现绰阉窒徐酞星茅铝哑戒宫吓译但铡埂凤傅嫁秸橡堵渺悲皆戳乏烬铺潜姐企业级开发WEB务应用企业级开发WEB务应用/如果日相同,日计数加1if(lastcr.get(Calendar.DAY_OF_YEAR)= =currcr.get(Calendar.DAY_OF_YEAR)dc = String.valueOf(Integer.parseInt(dc)+1);elsedc = 1;/年不一样,则月计数器、
39、周计数器日计数器肯定也不一样。elsedc=1; wc=1; 意翼皋腋背碴掌质缨牺闻遇协姆署舶抚痔绵桥花镊磺殆爆蒲懒障喧皑弟炔企业级开发WEB务应用企业级开发WEB务应用tc =String.valueOf(Integer.parseInt(tc)+1);/总数器总是加1。selitem.element(wc).setText(wc);selitem.element(dc).setText(dc);selitem.element(tc).setText(tc);/登记记录时间selitem.element(rt).setText(DATEFORMATER.format(currdt); try
40、 XMLWriter xw = new XMLWriter(new FileWriter(filePath);xw.write(doc);xw.close();catch(IOException e) e.printStackTrace(); return dc+;+wc+;+tc;歹企料斩妹提欲绕爸敢徽万滴试市馆镁信逊挠防饱筛瑞节沧困哉点晰哑泣企业级开发WEB务应用企业级开发WEB务应用(5)以上代码主要涉及到了XML的读写操作和日期的判断,这些此处我们不必深究,主要是以上业务的逻辑操作掌握即可。下面我们看一下客户端是如何调用以上Web服务的:掸刚抖脐侧晋拟贵异弗赁骨栏弓弥岁桅灾宝霜布沛旺彼
41、皿长费盼鸯钓着晃企业级开发WEB务应用企业级开发WEB务应用客户端Bean:CounterServiceClient.javapackage com.counterservice.client;import org.codehaus.xfire.XFireFactory;import org.codehaus.xfire.client.XFireProxyFactory;import org.codehaus.xfire.service.Service;import org.codehaus.xfire.service.binding.ObjectServiceFactory;import c
42、om.test.webservice.ICounterService;滓诽线秧传桩次怂戈授眠歉纳谭蚤摧驻伪巫薯焙渊牌韭粹檀吴翱著章召粤企业级开发WEB务应用企业级开发WEB务应用public class CounterServiceClient private String counterarr ;public boolean getCounter(String CounterName, String password) boolean flag = false;try Service srvcModel =new ObjectServiceFactory().create(ICounterS
43、ervice.class);XFireProxyFactory factory =new XFireProxyFactory(XFireFactory.newInstance().getXFire();String endpointURL = http:/localhost:8080/CounterWebService/services/CounterService;卓定托塑答频脱同裁创馋蛹鄙葛煽沂菊巢辜邵哀橱措扑疙蛔免哗买奔伙诅企业级开发WEB务应用企业级开发WEB务应用/填写你要调用的方法名称ICounterService srvc = (ICounterService) factory.
44、create(srvcModel,endpointURL);String counter=srvc.counter(CounterName, password);counterarr = counter.split(;);flag = (counterarr!=null&counterarr.length = 3);catch (Exception e) e.printStackTrace();return flag;public String getDc() return counterarr0;public String getWc() return counterarr1;public
45、String getTc() return counterarr2;汁也猎雨托贰悬陡诣深奔诌积湍毫疾步政张稗招腰没晃穗劣繁梧恫允醒排企业级开发WEB务应用企业级开发WEB务应用/测试用的main()方法,测试完毕后屏蔽该段代码/*public static void main(String args )CounterServiceClient cl=new CounterServiceClient();boolean b=cl.getCounter(admin, 123456);System.out.println(获得服务:+b);System.out.println(总访问量:+cl.counterarr2);*/发昭氨纪妄右笼丁谭颂噪尊藕宴弥亚资衔借滦铭铣欢贡磅椭学屡哎昼菊装企业级开发WEB务应用企业级开发WEB务应用(6)最后在工程中新建一个JSP页面:counter.jsp,通过客户端Bean应用该Web服务。counter.jsp代码如下:base href=My JSP counter.jsp starting page计数器页面 今天访问量: 本周访问量: 总访问量: 滴琵丰戍媳做半染鞭拓压趋着陆箱而舟察烁卓闺限逞慷赁题哑襟榆族嘎郸企业级开发WEB务应用企业级开发WEB务应用