什么是webservice?java
从架构师的角度来理解:webservice是一个软件系统,为了支持跨网络的机器间相互操做交互而设计。Web Service服务一般被定义为一组模块化的API,它们能够经过网络进行调用,来执行远程系统的请求服务。程序员
从一个程序员的视角来理解:在传统的程序编码中,存在这各类的函数方法调用。一般,咱们知道一个程序模块M中的方法A,向其发出调用请求,并传入A方法须要的参数P,方法A执行完毕后,返回处理结果R。这种函数或方法调用一般发生在同一台机器上的同一程序语言环境下。如今的咱们须要一种可以在不一样计算机间的不一样语言编写的应用程序系统中,经过网络通信实现函数和方法调用的能力,而Web service正是应这种需求而诞生的。web
简单来讲,webservice就是一个网络组件,一个能够经过网络访问的程序。apache
Webservice、WSDL、SOAP的关系
Web Service = SOAP + HTTP + WSDL。其中,SOAP Simple Object Access Protocol)协议是web service的主体,它经过HTTP或者SMTP等应用层协议进行通信,自身使用XML文件来描述程序的函数方法和参数信息,从而完成不一样主机的异构系统间的计算服务处理。这里的WSDL(Web Services Description Language)web服务描述语言也是一个XML文档,它经过HTTP向公众发布,公告客户端程序关于某个具体的Web service服务的URL信息、方法的命名,参数,返回值等。浏览器
Webservice服务器端工做流程tomcat
1 监听网络端口(监听服务端口)服务器
2接收客户端请求(接收SOAP请求)网络
3 解析客户端请求(解析SOAP消息,将SOAP消息转换为数据对象)架构
4 调用业务逻辑(调用Web Service实现类的特定操做,参数是由SOAP消息转换而来的数据对象)app
5 生成响应(将返回值转换为SOAP消息)
6 返回响应(返回SOAP响应)
Webservice客户端工做流程
1 构造SOAP请求消息(将本地数据对象转换为SOAP消息)
2 发送SOAP消息到Web Service服务器的指定端口
3接收SOAP响应消息
4将SOAP响应消息转换为本地数据对象
以上知识点参考了互联网上的相关信息以帮助理解开发原理,读者想要详细学习wsdl和soap的话,可到w3cschool网站查阅相关资料。下面介绍怎么使用AXIS+Eclipse开发webservice。
Eclipse JEE Ganymede是eclipse的一个发行版本,集成了J2EE开发过程当中的经常使用工具插件,包括咱们在webservice开发中用到的axis,axis是一个soap引擎,是一个提供建立服务器端、客户端和SOAP操做的基本框架,由apache基金会开发维护。Ganymede下载地址http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/ganymedesr2。
固然,正常使用eclipse的前提是你正确安装了JDK,设置了JAVA_HOME、CLASSPATH等相关环境变量,这里就不赘述了。
webservice服务器端开发
首先创建一个Dynamic Web Project。这里我取名为WebserviceTest。
新建一个java类,在类里定义相关的方法供webservice使用。以前我看过一篇利用MyEclipse6.5开发基于JAX-WS的Webservice的文章,这里引用它用到的Calculator例子。
ws.Calculator.java:
packagews;
publicclassCalculator{
publicintadd(inta,intb) {
return(a + b);
publicintsubtract(inta,intb) {
return(a - b);
publicintmultiply(inta,intb) {
return(a * b);
publicintdivide(inta,intb) {
return(a / b);
选中工程WebserviceTest,依次点击file-new-other,打卡New Wizard窗口,选择Web Services-Web Service。
点击next,点击service implementation项中的browse按钮,选择刚刚建立的Calculator.java类,注意Configuration信息中ServiceProject是否是刚刚咱们选中的WebserivceTest工程,不然要取消重来;选中Publish the web service复选框。其余配置保持默认,点击finish。
若是建立成功,能够看到生成了相关的wsdl和wsdd文件。Wsdl文件对外描述本webservice的相关信息,外部系统能够经过该文件创建客户端来调用该文件对应的webservice。Wsdd文件则是webservice的部署配置文件。
打开web.xml能够看到多了如下一个servlet及其映射:
<servlet>
<display-name>Apache-AxisServlet</display-name>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
</servlet>
<servlet>
<display-name>AxisAdminServlet</display-name>
<servlet-name>AdminServlet</servlet-name>
<servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class>
<load-on-startup>100</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/servlet/AxisServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>*.jws</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AdminServlet</servlet-name>
<url-pattern>/servlet/AdminServlet</url-pattern>
</servlet-mapping>
打开Calculator.wsdl,找到service结点,咱们发现访问这个webservice的地址是http://localhost:8080/WebserviceTest/services/Calculator。
把工程WebserivceTest部署到tomcat,启动tomcat,在浏览器地址栏敲入http://localhost:8080/WebserviceTest/services/Calculator?wsdl,若是能够看到返回的wsdl文件,就说明webservice已经在工做了。
在不创建客户端的状况下,咱们也能够经过eclipse内置的webservice explorer来对webservice进行调用测试。
把eclipse切换到Java EE perspective,点击工具栏顶部的按钮,以下图,启动webservice explorer。
在出现的webservice explorer页面中,点击右上角的WSDL Page按钮,调出WSDL页面,在WSDL URL输入框中输入webservice所在的URL,如:http://localhost:8080/WebserviceTest/services/Calculator?wsdl,点击go。
这样咱们能够看到在webservice中提供给外界调用的全部方法。选择subtract,输入参数a为7,b为3,点击go,能够发如今status栏下返回了正确的结果4.
webservice客户端开发
使用axis+eclipse能够根据webservice提供的wsdl文件方便地生成客户端代码。
新建一个普通的java project,这里我命名为WebserviceClientTest。选中刚刚新建的工程,依次点击file-new-other,打卡New Wizard窗口,选择Web Services-Web Service Client,点击next,在Web Service Client窗口中为Service Definition选项浏览选择刚刚咱们在服务端开发中生成的wsdl文件Calculator.wsdl,直接finish。
能够看到一共生成了5个java文件。其中CalculatorServiceLocator.java中定义了webservice服务端的访问URL,若是有必要能够修改它;CalculatorProxy.java是调用服务端的代理类,咱们能够经过它的实例来对webservice进行调用。
最后咱们新建一个Test类来进行测试:
Test.java:
packagews;
publicclassTest{
publicstaticvoidmain(Stringargs[]){
CalculatorProxycalculatorProxy=newCalculatorProxy();
try{
intresult =calculatorProxy.add(4,2);
System.out.println("the result is:"+result);
}catch(Exceptione) {
e.printStackTrace();
开启tomcat启动webservice,右击Test.java-Run As-Java Application,输出:
the result is:6
大功告成。