Java6 WebService的发布

Java6 WebService的发布
 
WebService服务发布往往比较混乱,Axis2的发布形式与XFire发布方式差别很大,而Java6 Web服务的发布与Axis2、XFire的Web服务的发布方式也有着天壤之别,它们之间没有经验可以借鉴。
 
因此,很有必要钻研下Java6的Web服务的发布方式。
 
从前面两篇文章可以看出Java6对WebService的发布提供了API级别的直接支持,发布只需要一行代码就搞定了。但是作为一个服务,就需要启动,总不能每次启动都去运行一个Main方法来启动吧。
 
实际中Web服务的发布常常伴随着Web容器的启动而发布,而在Java6中,我们没法直接像Axis2和XFire那样直接去发布,但是可以通过变通的方法,通过Servlet来和容器绑定起来,在容器启动的时候发布服务。
 
下面以Tomcat为例,来实现Java6 Web服务的发布。
 
1、开发WebService服务
 
package lavasoft.server; 

import javax.jws.WebService; 

/** 
* Java6开发的WebService服务端 

* @author leizhimin 2009-11-16 10:24:13 
*/
 
@WebService 
public  class Java6WS { 

         /** 
         * Web服务中的业务方法 
         * 
         * @return 一个字符串 
         */
 
         public String doSomething(String username) { 
                 return username +  " is doing something!"
        } 
}
 
2、开发发布服务的Servlet,为了通用性,最好选择GenericServlet来继承
 
package lavasoft.servlet; 

import lavasoft.server.Java6WS; 

import javax.servlet.*; 
import javax.xml.ws.Endpoint; 
import java.io.IOException; 

/** 
* 发布Java6 WebService的Servlet, 

* @author leizhimin 2009-11-16 13:52:49 
*/
 
public  class WSServlet  extends GenericServlet { 
        @Override 
         public  void init(ServletConfig servletConfig)  throws ServletException { 
                 super.init(servletConfig); 
                System.out.println( "准备启动WebService服务:http://192.168.14.117:8888/java6ws/Java6WS"); 
                //发布一个WebService 
                Endpoint.publish("http://192.168.14.117:8888/java6ws/Java6WS", new Java6WS()); 
                System.out.println("已成功启动WebService服务:http://192.168.14.117:8888/java6ws/Java6WS"); 

        } 

        public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { 
                System.out.println("此Servlet不处理任何业务逻辑,仅仅yonglai发布一个Web服务:http://192.168.14.117:8888/java6ws/Java6WS"); 
        } 
}
 
这里将服务发布的代码写在了Servlet的init()方法中,当Servlet加载时候,会自动执行init()里面的方法。从而达到发布服务的目的,由于此Servlet不处理任何业务,因此,在Service里面仅仅写了一个提示性的语句。
 
3、配置web.xml
 
<? xml  version ="1.0"  encoding ="UTF-8" ?> 
< web-app  xmlns ="http://java.sun.com/xml/ns/javaee" 
                  xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" 
                 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
                  version ="2.5" > 

         < welcome-file-list > 
                 < welcome-file >index.jsp </ welcome-file > 
         </ welcome-file-list > 

         < servlet > 
                 < servlet-name >WSServlet </ servlet-name > 
                 < servlet-class >lavasoft.servlet.WSServlet </ servlet-class > 
                 < load-on-startup >1 </ load-on-startup > 
         </ servlet > 
         < servlet-mapping > 
                 < servlet-name >WSServlet </ servlet-name > 
                 < url-pattern >/servlet/WSServlet </ url-pattern > 
         </ servlet-mapping > 
</ web-app >
 
注意,上面的Servlet比一般Servlet配置多了一行:
<load-on-startup>1</load-on-startup>
,这样写的目的是Servlet能伴随容易的启动在第一时间加载。以便服务能尽可能早的发布,否则,只有在第一次请求该Servlet的时候,才会被加载到容器。
 
4、部署、启动并测试
 
启动Tocmat6,浏览器中输入: http://localhost:8080/java6ws/
 
点击超链接,可以获取到WSDL如下:

可见,服务伴随着tomcat的启动发布成功。
 
5、总结
 
1)、Java6的服务发布的总体思想是通过Java6 API的调用达到发布的目的,截止目前,已经看到两种发布方式,一种是直接调用API:
Endpoint.publish( "http://192.168.14.117:8888/java6ws/Java6WS", new Java6WS());
另一种是,本例中Servlet方式。
 
2)、Endpoint.publish是一个后台线程,一旦发布了就会一直等待处理Web服务的请求,只有当main方法退出,或者容器关闭的时候,才自动退出。
 
3)、其实除了这种方式,也可以整合Spring来实现服务的发布,这就和Spring的Ioc容器整合在一起了。不管什么,道理就一个,调用Endpoint.publish()方法来实现服务的发布。
 
4)、在发布服务的时候,应该避免使用Tomcat容器的端口,一面发生冲突,在本文中,Tomcat使用的端口是8080,而Web服务发布使用的端口是8888。

本文出自 “熔 岩” 博客,请务必保留此出处http://lavasoft.blog.51cto.com/62575/227988

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值