• 【Java】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。
     
  • 相关阅读:
    find命令 -- 之查找指定时间内修改过的文件
    nginx
    lighttpd 搭建
    mysql主从复制5.6基于GID及多线程的复制笔记
    centos下MySQL主从同步配置
    数据库集群搭建
    linux 系统监控、诊断工具之 top 详解
    Linux下Apache并发连接数和带宽控制
    DXGI屏幕捕捉
    CUDA以及CUDNN安装配置(WIN10为例)
  • 原文地址:https://www.cnblogs.com/daishuguang/p/3923630.html
Copyright © 2020-2023  润新知