在Web工程中支配WebService
前面 《WebService学习笔记(一)》中讲述了,怎样开发一个WebService Server端和Client端,通过JDK自带的Endpoint.publish方法发布的WebService(使用JDK自带的一个微型服务器来响应请求),但在Web工程中这种方法使用起来不太好用,真正部署到生产环境时效率也成问题。下面讲述怎样把通过JAX-WS开发的WebService部署到Servlet容器中。
目录:
1、创建WebService。
2、部署WebService。
3、测试WebService。
开发环境: Windows + Eclipse3.7 JEE 版(WTP)
1、创建WebService
A)创建一个动态Web工程。我这里使用的名字叫: helloWorldWeb;
目录结构如下:
B)配置WebService。
这里使用的JAX-WS,为了方便部署发布,需要一些依赖包。将下面的依赖包放入”/WEB-INF/lib“目录下。
- jaxb-impl.jar
- jaxws-api.jar
- jaxws-rt.jar
- jsr181-api.jar
- gmbal-api-only.jar
- management-api.jar
- ha-api.jar
- stax-ex.jar
- streambuffer.jar
- policy.jar
C)创建一个WebService。
代码如下:
package org.study.service; import javax.jws.WebParam; import javax.jws.WebService; @WebService public interface HelloWorld { /** * 输入用户名称,返回对用户的问候。 * * @param name 用户名称 * @return 问候语句 */ public String sayHello(@WebParam(name="name")String name); }
WebService实现类 HelloWorldImpl.java
package org.study.service; import javax.jws.WebService; @WebService(endpointInterface="org.study.service.HelloWorld", serviceName="HelloWorldService", name="HelloWorld", portName="HelloWorldPort" ) public class HelloWorldImpl implements HelloWorld { public String sayHello(String name) { return "hello, "+name; } }
通过第一步,我们已经完成了一个WebService HelloWorld的定义,该Service含有一个方法,sayHello可供调用。接下来,我们将该service通过Web方式发布到Servlet容器中。
A)修改Web.xml。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>helloWorldWeb</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<listener>
<description>web service configuration listener</description>
<listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
</listener>
<servlet>
<description>web service servlet</description>
<servlet-name>webService</servlet-name>
<servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>webService</servlet-name>
<url-pattern>/webService/*</url-pattern>
</servlet-mapping>
</web-app>
需要在web.xml中加入一个监听器,用来初始生成Endpoint;以及需要添加WSServlet来响应对service的url访问请求。该WSServlet配置成为响应所有/webService/*开头的url请求,不需要为每个service配置地址,具体的访问地址在sun-jaxws.xml里指定。
B)添加web service配置文件;
在web.xml中添加完上述代码之后,只是程序启动的时候能处理配置和访问service了,但是有哪些webservice需要初始化还不知道。因此需要我们配置。
JAX-WS提供了sun-jaxws.xml文件来配置需要发布的service(Endpoint),默认位置与web.xml位置相同。
代码如下:
<?xml version="1.0" encoding="UTF-8"?> <endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" version="2.0"> <endpoint name="helloWorld" implementation="org.study.service.HelloWorldImpl" url-pattern="/webService/helloWorld"/> </endpoints>
C)启动Web程序
把该工程添加到Tomcat里,点击启动即可。
3 测试WebService
我使用的是Tomcat发布,所以访问地址为:
http://localhost:8080/helloWorldWeb/webService/helloWorld?wsdl
能看到WSDL文件则表示发布成功。
至此为止,Web方式发布WebService已经成功。
参考文献: