java Webservice的方式有哪些?哪种方式更好?
1.Axis2
Axis是apache的下一个开源webservice开发组件,出现的更早,也更成熟。本文主要介绍Axis+eclipse开发Web服务。当然,Web服务的开发和发布可以不用eclipse,但是用eclipse会更方便。
(1)下载eclipse的Java EE版本。
(2)下载axis2。
(3)下载eclipse的axis2插件。
Axis2_Codegen_Wizard
Axis2 _服务_归档程序
建议使用1.3版本。
(4)eclipse安装axis2插件。
1)在任一目录下新建一个Axis2文件夹,在该文件夹下创建一个eclipse目录,在eclipse目录下创建一个plugins目录和一个features目录,例如:d:\ program software \ Eclipse-SVN \ axis 2 \ Eclipse;
2)对下载的axis2插件进行解压缩,并将解压缩后的文件放入新建的eclipse插件目录中;
3)在%eclipse_home%目录下新建一个links目录,在links目录下新建一个axis2.link文件,内容如下:path = d:\ program software \ eclipse-SVN \ axis 2;
4)重启eclipse,点击文件-新建-其他。如果您看到Axis2向导,这意味着插件安装成功。
(5)安装轴2。
(6)用eclipse新建一个web项目,创建一个普通的java类,至少包含一个方法。
(7)发布web服务
1)点击eclipse的文件-新建-其他,打开Axis2向导,选择Axis2服务归档器,然后选择下一步;
2)选择类文件位置,即类文件的存储路径。注意:只选择类目录,不包括包文件夹,然后选择Next
3)选择跳过WSDL,然后选择下一步。
4)从下一步开始,选择要包含在服务存档中的服务XML文件,并选中自动生成服务XML;
5)服务名——填写你的服务名,类名——填写类名,包括包名,然后点击加载,再点击完成,webservice发布成功;
6)然后转到% Tomcat _ home %/Web apps/axis 2/we b-INF/Services,查看是否有额外的。aar文件;
注意:以上方法是发布到axis2.war包,也可以复制生成的。aar文件到您的实际应用程序中。同时,您还可以使用eclipse的create webservice功能发布您的webservice,并选择axis2来生成您的webservice,这样webservice就会部署在您的应用程序中。
2.Apche CXF
CXF开发webservice也很方便简单,和spring的集成可以说是非常好的。举一个CXF开发webservice的例子。
1)在eclipse中新建一个web项目,导入依赖包,如下图所示:
2)编写一个接口,比如:
注意:CXF开发的webservice的接口中方法的参数必须是这样的,否则客户端调用时CXF服务器不会收到参数的值。name:参数名可选(建议写),targetNamespace: namespace必须填写,默认为包名的逆序,mode:参数类型,in表示输入。
3)编写实现类实现接口的方法;
4)集成spring,写一个bean文件,比如cxf-beans.xml,内容如下:
Cxf-beans.xml代码
& lt?xml版本="1.0 "编码="UTF-8 "?& gt
& ltimport resource = " class path:META-INF/cxf/cxf . XML "/& gt;
& ltimport resource = " class path:META-INF/cxf/cxf-extension-soap . XML "/& gt;
& ltimport resource = " class path:META-INF/cxf/cxf-servlet . XML "/& gt;
& ltjaxws:endpoint id = " Vote " implementor = " com . zcl . cxf . service . Vote impl " address = "/Vote "/& gt;
& lt/beans & gt;
这个文档比较好理解,就不解释了。
5)配置CXFServlet
在web.xml文件中配置CXFServlet,加载cxf-beans.xml文件,内容如下:
Web.xml代码
id="WebApp_ID" version="2.5 " >
& lt上下文参数& gt
& ltparam-name & gt;contextConfigLocation & lt/param-name & gt;
& lt参数值& gtwe b-INF/cxf-beans . XML & lt;/param-value & gt;
& lt/context-param & gt;
& lt听众& gt
& lt侦听器类& gtorg . spring framework . web . context . context loader listener & lt;/listener-class & gt;
& lt/listener & gt;
& ltservlet & gt
& ltservlet-name & gt;cxf & lt/servlet-name & gt;
& ltservlet-class & gt;org . Apache . cxf . transport . servlet . cxf servlet & lt;/servlet-class & gt;
& lt启动时加载& gt1 & lt;/load-on-startup & gt;
& lt/servlet & gt;
& ltservlet映射& gt
& ltservlet-name & gt;cxf & lt/servlet-name & gt;
& lturl模式& gt/services/* & lt;/URL-pattern & gt;
& lt/servlet-mapping & gt;
& lt/we B- app & gt;
将项目部署到中间件,比如tomcat,就可以访问webservice了。
3.JDK发展网络服务
1)如下编写一个Java类:
Jdkwebservice.java电码
包演示;
导入javax . jws . web param;
导入javax . jws . web service;
导入javax . XML . ws . endpoint;
@WebService
公共类JdkWebService {
返回“照做就是了,”+ value +“!”;
}
公共静态void main(String[] args) {
}
}
2)运行java类,可以在浏览器上访问webservice。
注意:在开发web项目时,这种方法不是很友好。我们可以写一个servlet类,在servlet类的初始化方法中发布一个webservice,这样我们的中间件服务器就会在webservice启动的时候帮我们自动启动。
4) xfire
开发web服务有很多框架,每个框架都有自己的优势。最近练习用xfire开发web服务。下面是一个开发web服务的小例子,希望对初学者有所帮助。
1.新建一个名为TestWebService的java web项目,将xfire相关的jar包添加到lib目录中,编写接口类和实现类。
Java代码
包com . lamp . service;
公共接口消息服务{
公共字符串getName(字符串名);
}
【java】查看plaincopyprint?
包com . lamp . service;
公共接口消息服务{
公共字符串getName(字符串名);
}
实现类
Java代码
包com . lamp . service . impl;
导入com . lamp . service . messageservice;
公共类MessageServiceImpl实现MessageService {
公共字符串getName(字符串名称){
返回“hello”+name+”,欢迎来到web service world”;
}
}
【java】查看plaincopyprint?
包com . lamp . service . impl;
导入com . lamp . service . messageservice;
公共类MessageServiceImpl实现MessageService {
公共字符串getName(字符串名称){
返回“hello”+name+”,欢迎来到web service world”;
}
}
在src目录下新建一个文件夹META-INF,然后在其下新建一个文件夹xfire,在xfire目录下新建一个配置文件services.xml。
Xml代码
& lt?xml版本="1.0 "编码="UTF-8 "?& gt
& lt服务& gt
& lt名称& gtMessageService & lt/name & gt;
& ltserviceClass & gtcom . lamp . service . messageservice & lt;/service class & gt;
& lt实现类& gtcom . lamp . service . impl . messageserviceimpl & lt;/implementation class & gt;
& lt/service & gt;
& lt/beans & gt;
[xml]查看plaincopyprint?
& lt?xml版本="1.0 "编码="UTF-8 "?& gt
& lt服务& gt
& lt名称& gtMessageService & lt/name & gt;
& ltserviceClass & gtcom . lamp . service . messageservice & lt;/service class & gt;
& lt实现类& gtcom . lamp . service . impl . messageserviceimpl & lt;/implementation class & gt;
& lt/service & gt;
& lt/beans & gt;
最后,在web.xml中配置xfire的servlet。
Xml代码
& ltservlet & gt
& ltservlet-name & gt;XFireServlet & lt/servlet-name & gt;
& ltservlet-class & gt;
& lt/servlet-class & gt;
& lt/servlet & gt;
& ltservlet映射& gt
& ltservlet-name & gt;XFireServlet & lt/servlet-name & gt;
& lturl模式& gt/servlet/XFireServlet/* & lt;/URL-pattern & gt;
& lt/servlet-mapping & gt;
& ltservlet映射& gt
& ltservlet-name & gt;XFireServlet & lt/servlet-name & gt;
& lturl模式& gt/services/* & lt;/URL-pattern & gt;
& lt/servlet-mapping & gt;
[xml]查看plaincopyprint?
& ltservlet & gt
& ltservlet-name & gt;XFireServlet & lt/servlet-name & gt;
& ltservlet-class & gt;
& lt/servlet-class & gt;
& lt/servlet & gt;
& ltservlet映射& gt
& ltservlet-name & gt;XFireServlet & lt/servlet-name & gt;
& lturl模式& gt/servlet/XFireServlet/* & lt;/URL-pattern & gt;
& lt/servlet-mapping & gt;
& ltservlet映射& gt
& ltservlet-name & gt;XFireServlet & lt/servlet-name & gt;
& lturl模式& gt/services/* & lt;/URL-pattern & gt;
& lt/servlet-mapping & gt;
所以服务器端开发完成,现在开始客户端开发。
创建一个新的java项目也会引入xfire相关的jar。我使用ant在客户机上生成代理对象,并在项目路径下创建一个新的build.xml。代码是
Xml代码
& lt?xml版本="1.0 "编码="UTF-8 "?& gt
& lt项目名称="WebService" basedir= ","default="gen-webservice " >
& lt属性file = " build.properties " & gt
& lt/property & gt;
& ltpath id="project-classpath " >
& lt文件集dir = " $ { lib.dir } " & gt
& ltinclude name="**/*。jar "/>;
& lt/fileset & gt;
& lt/path & gt;
& lttarget name="gen-webservice " >
& lttaskdef name = " wsgen " class name = " org . code Haus . xfire . gen . wsgentask " class pathref = " project-class path "/& gt;
& ltwsgen output directory = " $ { src . dir } "
wsdl = " $ { wsdl . dir } " package = " com . lamp . ws . client " overwrite = " true "/& gt;
& lt/target & gt;
& lt/project & gt;
[xml]查看plaincopyprint?
& lt?xml版本="1.0 "编码="UTF-8 "?& gt
& lt项目名称="WebService" basedir= ","default="gen-webservice " >
& lt属性file = " build.properties " & gt
& lt/property & gt;
& ltpath id="project-classpath " >
& lt文件集dir = " $ { lib.dir } " & gt
& ltinclude name="**/*。jar "/>;
& lt/fileset & gt;
& lt/path & gt;
& lttarget name="gen-webservice " >
& lttaskdef name = " wsgen " class name = " org . code Haus . xfire . gen . wsgentask " class pathref = " project-class path "/& gt;
& ltwsgen output directory = " $ { src . dir } "
wsdl = " $ { wsdl . dir } " package = " com . lamp . ws . client " overwrite = " true "/& gt;
& lt/target & gt;
& lt/project & gt;