java开发web service最简单的方式是用jdk6自带的支持web service的注解功能。 1、编写代码如下: @WebService(serviceName="HelloWorldService", targetNamespace="www.itcast.cn") public class HelloWorldService { @WebMethod public String sayHello(String name){ System.out.println(name); return "Hello, " + name; } public static void main(String[] args) { //终端,发布web service,参数1是服务公开的访问地址address,参数2是服务的具体实现implement Endpoint.publish("http://localhost:7070/HelloWorldService", new HelloWorldService()); } } 其中,targetNamespace的默认值是service类所在包名,当然也可以手动赋值。但是要想通过targetNamespace直接在浏览器里访问,还需要特别配置。如果不加载到web容器中,可以在host系统文件里添加“127.0.0.1 www.itcast.cn”,不过这样访问的话还需要在“www.itcast.cn”后加端口(端口是自定义的,随意)才能访问;如果加载到tomcat这样的容器里访问,可以在tomcat系统文件中通过类似配置实现。tomcat可以连同端口一起配置到虚拟域名中,windowsXP的host文件可能也有这样的配置,欲知详情,请自行google百度。 2、运行代码,一般java app运行方式即可。可以看到运行后进程和启ServerSocket服务程序一样一直出于开启状态。不过要注意jdk6的具体版本。如果是jdk6u10以下的版本,直接运行应该会报错“Wrapper class cn.itcast.jdkws.service.jaxws.SayHello is not found. Have you run APT to generate them?”,这时必须先用apt命令将主程序(service类)进行编译,然后生成一些java文件到jaxws目录下,再运行主程序即可。如果是jdk6u16及以上版本,直接运行,不会报错。 3、打开浏览器,输入“http://localhost:7070/HelloWorldService”,回车,此时页面可能是“Web Services No JAX-WS context information available.”这样的信息。一般浏览器不能直接访问WS程序,不过所有的WS都可以生成WSDL文档供一般浏览器访问,方式是在地址后面加上“?wsdl”即可。WSDL文档中的<xxx>即前文说的“soap信封”。生成的文档如下: <?xml version="1.0" encoding="UTF-8" ?> - <!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI''s version is JAX-WS RI 2.1.6 in JDK 6. --> - <!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI''s version is JAX-WS RI 2.1.6 in JDK 6. --> - <definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://service.jdkws.itcast.cn/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetnamespace="http://service.jdkws.itcast.cn/" name="HelloWorldService"> - <types> - <schema><import namespace="http://www.itcast.cn/" schemalocation="http://localhost:7070/HelloWorldService?xsd=1"></import></schema></types> - <message name="sayHello"><part name="parameters" element="tns:sayHello"></part></message> - <message name="sayHelloResponse"><part name="parameters" element="tns:sayHelloResponse"></part></message> - <porttype name="HelloWorldService"> - <operation name="sayHello"><input message="tns:sayHello"><output message="tns:sayHelloResponse"></output></operation></porttype> - <binding name="HelloWorldServicePortBinding" type="tns:HelloWorldService"><binding transport="http://schemas.xmlsoap.org/soap/http" style="document"></binding> - <operation name="sayHello"><operation soapaction=""></operation> - <input><body use="literal"></body> - <output><body use="literal"></body> </output></operation></binding> - <service name="HelloWorldService"> - <port name="HelloWorldServicePort" binding="tns:HelloWorldServicePortBinding"><address location="http://localhost:7070/HelloWorldService"></address> </port></service></definitions> 4、不过IDE提供了WS explorer工具开启WS客户端,极大方便了WS的测试。Eclipse和MyEclipse都有这个工具: WS explorer--> 点击右上角的WSDL Page小图标(本代码中)--> 右边单元中WSDL URL Browse下的文本框中输入“http://localhost:7070/HelloWorldService?wsdl”-->Go!-->展开左边单元节点,点击sayHello-->点击右单元arg0后面的add,输入参数“tom”-->Go! 可以看到下面出现了body内容,展开body,有返回值“Hello tom”。点击下单元右上角的source,可以看到具体的soap信封封装的请求响应中传输的xml数据信息。而且此时控制台也打印出了tom。 其实整个上述过程并没有用到tomcat,但是为什么可以通过WS explorer以浏览器形式访问service呢?因为jdk6的Endpoint类的实现里封装一个微型的web容器。不过正如前面所说,WS explorer是IDE提供的WS测试工具,可以通过其查看WS的流程、机制,但是生产环境下不应依赖于它。而且jdk6的WS支持还不那么稳定,所以现在生产环境下并不采用jdk6开发WS,入入门还可以,也许稳定以后就可以了。 5、MyEclipse还有个自带的工具(eclipse的没找到,不知道有没有)--TCP/IP Monitor也可以查看WS传输信息。不过这时的访问地址应该改为TCP/IP Monitor里设置的监听地址。 (1)window-->preferences-->myeclipse enterprise workbench-->internet tools-->TCP/IP Monitor,设置监听器,别忘了点击start启动监听。 (2)window-->show view-->other-->myeclipse common-->TCP/IP Monitor,显示TCP/IP Monitor视窗。 (3)更改上述wsdl文档并另存到e盘,更改的是访问地址,改为监听地址。 (4)删除前述WS explorer信息,重新访问,不过得手动输入URL:file:e:/xxx.wsdl-->Go!(file表示文件协议,不能省略;后续内容参照步骤4)此时就可以看到TCP/IP Monitor视图里的请求响应信息了。</xxx>
传智播客-web service(4)-利用jdk6开发WS应用
最新推荐文章于 2024-09-03 21:17:49 发布