- 浏览: 5105416 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
silence19841230:
先拿走看看
SpringBoot2.0开发WebSocket应用完整示例 -
wallimn:
masuweng 写道发下源码下载地址吧!三个相关文件打了个包 ...
SpringBoot2.0开发WebSocket应用完整示例 -
masuweng:
发下源码下载地址吧!
SpringBoot2.0开发WebSocket应用完整示例 -
masuweng:
SpringBoot2.0开发WebSocket应用完整示例 -
wallimn:
水淼火 写道你好,我使用以后,图标不显示,应该怎么引用呢,谢谢 ...
前端框架iviewui使用示例之菜单+多Tab页布局
一、前言
本文假定你有一定的J2EE开发经验,这个教程没有过多的涉及基础知识和开发细节。如果在阅读过程出有什么问题,还请与我联系交流。
如果使用GOOGLE、BAIDU等搜索工具,搜索WebService的相关知识,可以查到N多的网页,我就是通过这些网页的学习,逐渐掌握了些WebService的相关知识。这里对那些无私奉献知识的人一并表示感谢。
网上关于WebService的例子,多是一些简单得不能再简单的hello world的例子,简单得以至于你对WebService没有什么感觉。有了WebService的基本知识后,我一直再想,可以把什么样的即简单又实用的东东做成WebService,开展示一下其功能特点。今天终于想到一个:计数器,计数器用得比较多,功能比较独立,做成WebService可以一劳永逸为不同系统(不管是JSP还ASP,这是WebService的突出优点)、不同应用节省此类编码工作,可以说以后再也不用写计数器了。只要用就行了。
说了这么多废话,下面我们开始。本教程介绍一下WebService环境搭建、服务部署的相关知识,然后介绍一个计数器的开发。
二、基础工作
1.开发环境
我使用axis做为Web Service引擎,它是Apache的一个开源web service引擎。它目前最为成熟的开源web service引擎之一。下面我主要介绍一下如何使用Axis搭建web service 服务的环境。
①安装tomcat5.0应用服务器(也可以装5.5,不过我一直在用5.0);
②解压下载( http://ws.apache.org/Axis)后的axis包,将包中axis目录复制到tomcat目录下的webapps目录下;
③将axis/WEB-INF/lib目录下类文件复制到tomcat目录下的common/lib目录下;
④重新启动tomcat,访问http://localhost:8080/axis/happyaxis.jsp,如果能访问,表示安装成功;
注意,axis有几个可选的包,如email.jar....,你可以找来放到tomcat目录下的common/lib目录下,如果不使用相关的功能也可以不用。
这样,开发环境就搭建好了。
2.如何部署Web Service
部署有三种方式:Dynamic Invocation Interface(DII)、Stubs方式、Dynamic Proxy方式;这里就介绍一下简单,也是我使用的方式:DII。
DII方式中,先写好服务的JAVA文件(假设名字为helloworld.java),然后把它(注意是源文件)拷贝到webapps/axis目录中,后缀改成jws(此时文件名为:helloworld.jws),然后访问连接http://localhost:8080/Axis/helloworld.jws?wsdl,页面显示Axis自动生成的wsdl,这样一个Web Service就部署好了。怎么样,是不是很简。
我的计数器服务就是以这种方式部署的,下文中我会只说将计数器服务部署好,你可不要说:怎么部署,我不会呀。那在古代就要被打手板了。所以我想,古代只学四书五经也是件好事呀。现在要学这么多东西,半天学不会,手要被打烂了。
三、计数器服务的编写
计数器大家都知道了,比较简单。我的计数器也同样简单,有以下功能及特点:提供四种计数器(总数器、月计数器、周计数器及日计数器);考虑到Web Service要服务于多种应用,这个计数器还支持多个用户;使用XML文件来记录数据。
记录文件名为:d:\counter.xml。注意,此文件在服务里是硬编码,如果修改名字,请在服务程序中也进行相应的修改。文件内容格式如下:
说是计数器服务,其实跟编写普通的JAVA应用没有什么两样。我的计数器代码比较简单,我就不做过多的介绍了,把它贴在下面,源码中有少量注释,相信大家不看注释也看得懂。服务有只有一个接口:Counter(String name, String password),以后在客户端拿来用就可以了。还多说一句,我和程序使用到了dom4j解析xml包,要调试的请自行准备好jar包。部署方法请参照上文。
/***********本人原创,欢迎转载,转载请保留本人信息*************/
作者:wallimn 电邮:wallimn@sohu.com 时间:2007-04-17
博客:http://wallimn.iteye.com
http://blog.csdn.net/wallimn
网络硬盘:http://wallimn.ys168.com
/***********文章发表请与本人联系,作者保留所有权利*************/
本文假定你有一定的J2EE开发经验,这个教程没有过多的涉及基础知识和开发细节。如果在阅读过程出有什么问题,还请与我联系交流。
如果使用GOOGLE、BAIDU等搜索工具,搜索WebService的相关知识,可以查到N多的网页,我就是通过这些网页的学习,逐渐掌握了些WebService的相关知识。这里对那些无私奉献知识的人一并表示感谢。
网上关于WebService的例子,多是一些简单得不能再简单的hello world的例子,简单得以至于你对WebService没有什么感觉。有了WebService的基本知识后,我一直再想,可以把什么样的即简单又实用的东东做成WebService,开展示一下其功能特点。今天终于想到一个:计数器,计数器用得比较多,功能比较独立,做成WebService可以一劳永逸为不同系统(不管是JSP还ASP,这是WebService的突出优点)、不同应用节省此类编码工作,可以说以后再也不用写计数器了。只要用就行了。
说了这么多废话,下面我们开始。本教程介绍一下WebService环境搭建、服务部署的相关知识,然后介绍一个计数器的开发。
二、基础工作
1.开发环境
我使用axis做为Web Service引擎,它是Apache的一个开源web service引擎。它目前最为成熟的开源web service引擎之一。下面我主要介绍一下如何使用Axis搭建web service 服务的环境。
①安装tomcat5.0应用服务器(也可以装5.5,不过我一直在用5.0);
②解压下载( http://ws.apache.org/Axis)后的axis包,将包中axis目录复制到tomcat目录下的webapps目录下;
③将axis/WEB-INF/lib目录下类文件复制到tomcat目录下的common/lib目录下;
④重新启动tomcat,访问http://localhost:8080/axis/happyaxis.jsp,如果能访问,表示安装成功;
注意,axis有几个可选的包,如email.jar....,你可以找来放到tomcat目录下的common/lib目录下,如果不使用相关的功能也可以不用。
这样,开发环境就搭建好了。
2.如何部署Web Service
部署有三种方式:Dynamic Invocation Interface(DII)、Stubs方式、Dynamic Proxy方式;这里就介绍一下简单,也是我使用的方式:DII。
DII方式中,先写好服务的JAVA文件(假设名字为helloworld.java),然后把它(注意是源文件)拷贝到webapps/axis目录中,后缀改成jws(此时文件名为:helloworld.jws),然后访问连接http://localhost:8080/Axis/helloworld.jws?wsdl,页面显示Axis自动生成的wsdl,这样一个Web Service就部署好了。怎么样,是不是很简。
我的计数器服务就是以这种方式部署的,下文中我会只说将计数器服务部署好,你可不要说:怎么部署,我不会呀。那在古代就要被打手板了。所以我想,古代只学四书五经也是件好事呀。现在要学这么多东西,半天学不会,手要被打烂了。
三、计数器服务的编写
计数器大家都知道了,比较简单。我的计数器也同样简单,有以下功能及特点:提供四种计数器(总数器、月计数器、周计数器及日计数器);考虑到Web Service要服务于多种应用,这个计数器还支持多个用户;使用XML文件来记录数据。
记录文件名为:d:\counter.xml。注意,此文件在服务里是硬编码,如果修改名字,请在服务程序中也进行相应的修改。文件内容格式如下:
<?xml version="1.0" encoding="UTF-8"?> <counter> <item> <name>wallimn</name> <password>123</password> <dc>59</dc> <wc>59</wc> <mc>59</mc> <tc>59</tc> <rt>2007-4-16 16:01:29</rt> </item> </counter>
说是计数器服务,其实跟编写普通的JAVA应用没有什么两样。我的计数器代码比较简单,我就不做过多的介绍了,把它贴在下面,源码中有少量注释,相信大家不看注释也看得懂。服务有只有一个接口:Counter(String name, String password),以后在客户端拿来用就可以了。还多说一句,我和程序使用到了dom4j解析xml包,要调试的请自行准备好jar包。部署方法请参照上文。
import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.text.DateFormat; import java.text.ParseException; import java.util.Calendar; import java.util.Date; import java.util.Iterator; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; /** *功能:提供计数器服务的WebService,可以为多用户提供服务。<br/> * * @version : V1.0 * @author : wallimn(Email: wallimn@sohu.com QQ: 54871876) * @date : 2007-4-16 下午04:32:45 */ public class WsCounterByWallimn { // 计数器文档,注意名字名路径。 private final String FileN = "d:/counter.xml"; private final static DateFormat DATEFORMATER = DateFormat .getDateTimeInstance(); // 出错的情况下返回的值 private final static String ERRORINFO = "-1;-1;-1;-1"; public WsCounterByWallimn() { } /** *功能:打开计数器文档<br/> *编码:wallimn 时间:2007-4-16 下午04:44:29<br/> */ private Document openDocument() { Document doc = null; SAXReader reader = new SAXReader(); try { File xmlfile = new File(FileN); doc = reader.read(xmlfile); xmlfile = null; } catch (DocumentException e) { e.printStackTrace(); } return doc; } /** *功能:取指定名称计数器的详细信息,并设置计数器加1。<br/> *编码:wallimn 时间:2007-4-16 下午04:49:57<br/> */ private synchronized String countertick(String name, String password) { Document doc = openDocument(); Date currdt = new java.util.Date(); // mc:month counter(月计数器); dc: day counter(日计数器); // tc: total counter(总计数器); wc: week counter(周计数器); // rt: registe time登记时间 String mc = "-1", dc = "-1", tc = "-1", wc = "-1", rt = "-1"; Element root = doc.getRootElement(); Element selitem = null, item = null; for (Iterator it = root.elementIterator("item"); it.hasNext();) { item = (Element) it.next(); if (name.equals(item.element("name").getText())) { selitem = item; String pwd = item.elementText("password"); if (!password.equals(pwd)) { return ERRORINFO; // 密码不对,直接返回 } mc = item.element("mc").getText(); dc = item.element("dc").getText(); tc = item.element("tc").getText(); wc = item.element("wc").getText(); rt = item.element("rt").getText(); break; } } // 如果selitem为空,说明没有个名字的计数器。则添加一个。 if (selitem == null) { // System.out.println("没有找到这个名字的计数器:"+name); rt = DATEFORMATER.format(currdt); selitem = doc.getRootElement().addElement("item"); selitem.addElement("name").setText(name); selitem.addElement("tc").setText("0"); selitem.addElement("mc").setText("0"); selitem.addElement("wc").setText("0"); selitem.addElement("dc").setText("0"); selitem.addElement("rt").setText(rt); selitem.addElement("password").setText(password); mc = "0"; wc = "0"; dc = "0"; tc = "0"; } // 处理计数器加一操作。 Calendar currcr = Calendar.getInstance(); // 总数器总是加1。 tc = String.valueOf(Integer.parseInt(tc) + 1); selitem.element("tc").setText(tc); Date lastdt = null; try { lastdt = DATEFORMATER.parse(rt); } catch (ParseException e) { lastdt = new java.util.Date(); } Calendar lastcr = Calendar.getInstance(); lastcr.setTime(lastdt); currcr.setTime(currdt); // System.out.println("上次登记时间:"+DATEFORMATER.format(lastdt)); // System.out.println("本次登记时间:"+DATEFORMATER.format(currdt)); if (lastcr.get(Calendar.YEAR) == currcr.get(Calendar.YEAR)) { // 月相同,月计数加1 if (lastcr.get(Calendar.MONTH) == currcr.get(Calendar.MONTH)) { mc = String.valueOf(Integer.parseInt(mc) + 1); } else { mc = "1"; } // 日相同,日计数加1 if (lastcr.get(Calendar.DAY_OF_YEAR) == currcr .get(Calendar.DAY_OF_YEAR)) dc = String.valueOf(Integer.parseInt(dc) + 1); else dc = "1"; if (lastcr.get(Calendar.WEEK_OF_YEAR) == currcr .get(Calendar.WEEK_OF_YEAR)) wc = String.valueOf(Integer.parseInt(wc) + 1); else wc = "1"; } else { // 年不一样,则月计数器、周计数器日计数器肯定也不一样。 mc = "1"; dc = "1"; wc = "1"; } selitem.element("mc").setText(mc); selitem.element("wc").setText(wc); selitem.element("dc").setText(dc); // 登记记录时间 selitem.element("rt").setText(DATEFORMATER.format(currdt)); try { XMLWriter xw = new XMLWriter(new FileWriter(FileN)); xw.write(doc); xw.close(); } catch (IOException e) { e.printStackTrace(); } return tc + ";" + mc + ";" + wc + ";" + dc; } /** *功能:服务暴露的接口,也就是指定名称、密码,返回指定的计数,并将计数器加1。<br/> *编码:wallimn 时间:2007-4-17 上午10:05:22<br/> */ public String Counter(String name, String password) { if (password == null || name == null) return ERRORINFO; return countertick(name, password); } }
/***********本人原创,欢迎转载,转载请保留本人信息*************/
作者:wallimn 电邮:wallimn@sohu.com 时间:2007-04-17
博客:http://wallimn.iteye.com
http://blog.csdn.net/wallimn
网络硬盘:http://wallimn.ys168.com
/***********文章发表请与本人联系,作者保留所有权利*************/
发表评论
-
gradle编译错误:Could not find method compile() for arguments
2020-09-19 10:50 18193编译(IDEA+Gradle)一个别人的工程,出现一个 ... -
netty心跳检查之UDP篇
2019-09-15 08:50 2131部分UDP通信场景中,需要客户端定期发送心跳信息,以获取终 ... -
解决tomcat部署两个SpringBoot应用提示InstanceAlreadyExistsException
2019-06-30 11:49 3177两个SpringBoot应用部署在一个Tomcat中,单独 ... -
Eclipse配置MyBatis代码自动化功能
2019-06-29 10:16 16451.安装插件 Eclipse中,Help->Ecli ... -
vue.js中使用qrcode生成二维码
2019-05-20 00:00 7562一、安装包 npm install qrcodejs2 --s ... -
MySQL插入数据报错: Incorrect string value: '\xFD\xDE'
2019-03-31 23:19 1176我MySQL数据库用的uft-8字符集,插入数据一直很正常 ... -
vue自定义组件并双向绑定属性
2019-03-08 22:46 3211做了两个子组件,原理基本一样,一个是使用原生的select ... -
vue-router简单示例
2019-03-05 00:32 1092写个基本完整、稍有借鉴意义的示例,防止自己忘记。 &l ... -
“联通充值系统繁忙”轻松应对
2019-02-06 11:03 3908大过年的,联通充个值一直报“充值系统繁忙”。昨天晚上试了几 ... -
electron.js数据库应用---导航菜单(element-ui+mysql)
2019-02-05 21:33 2298一、环境搭建 略, ... -
electron.js数据库应用---入门(mysql+element-ui)
2019-01-27 23:19 7315我的机器:Windows10,64 ... -
SpringMVC 在controller层中注入成员变量request,是否线程安全
2018-12-17 21:17 2695@RestController public class ... -
VueJS 组件参数名命名与组件属性转化
2018-12-03 00:00 2009转自:https://www.cnblogs.com/meiy ... -
vue-resource拦截器实现token发送及检验自动化
2018-11-16 22:38 3046用了很长时间vue-resource,最近思考$http发 ... -
element-ui试用手记
2018-10-29 20:25 1688element-ui、iviewui都以vue.js为基础 ... -
iviewui中表格控件中render的使用示例
2018-07-07 16:46 9719示例了如何在表格中显示按钮,如何将代码转化为文字。 i ... -
Tomcat错误“Alias name tomcat does not identify a key entry”解决
2018-07-05 21:39 6193申请到了阿里云的证书后,下载、按照说明生成jks格式证书、 ... -
阿里云免费证书“fileauth.txt内容配置错误”解决
2018-07-05 20:43 5201最近研究微信小程序开发,上阿里云申请了个证书,使用文件验证 ... -
springboot2.0跨域配置
2018-07-04 22:11 5240springboot2.0跨域配置: 一、代码 ... -
微信小程序使用code换openid的方法(JAVA、SpringBoot)
2018-07-01 21:52 10299微信小程序序的代码中提示,使用code换取openid,但 ...
相关推荐
Java开发WebService实例--计数器.mht
展示WebService功能特点(别的地方下载来的,与大家共享)
Java开发tomcat中间件的WebService实例
Myeclipse创建WebService实例-很好用.doc 验证成功
java调用webservice实例,初学者值得一看
Java WebService 简单实例 http://blog.csdn.net/kingmax54212008/article/details/49764401 前言:朋友们开始以下教程前,请先看第五大点的注意事项,以避免不必要的重复操作。 一、准备工作(以下为本实例...
java实现webservice实例.
利用Myeclipse+axis2+mysql实现的一个简单的webservice,这是一个简单的图书管理程序,有添加图书,删除图书和查询图书,还有简单的管理权限控制,是最为基础的一个webservice实例。
SAP&Java的Webservice实例
Java WebService 简单实例 http://blog.csdn.net/kingmax54212008/article/details/49764401 前言:朋友们开始以下教程前,请先看第五大点的注意事项,以避免不必要的重复操作。 一、准备工作(以下为本实例...
java webservice实例教程ppt,共15讲,java webservice实例教程适合对象:想要学习SOA面向服务编程思想,学习Webservice技术,希望学习系统间通信设计的Java设计开发人员。java webservice实例教程适合于各个层次的...
Java使用SOAP获取webservice实例解析 具体实例分析说明。
通过axis2实现到webservice方便调用.
用Asp.Net 3.5实现一个用WebService实现天气预报功能的实例
eclipse+axis2学习webservice实例,亲测!
java Webservice 简单实例 java Webservice 简单实例 java Webservice 简单实例 java Webservice 简单实例
该资源附带SQL数据库 和 源代码 用到的技术有 webservice技术 servlet mvc模式 jdbc连数据库技术等 该资源实现的功能为 添加餐品 购买餐品 实现购物车操作等 还有许多功能 具体功能下载便知 里面还有一些意想不到的...
java调用webservice实例代码,分为俩个web小项目,一个为Client、一个为webservice
java-WebService应用实例中包括所用的jar包,说明文档,还收集的Spring集成XFire开发WebService的应用
一个java编写基于Axis1.4的webservice接口,包括服务端接口和调用端接口。