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!";
}
}
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");
}
}
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>
<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
<!--正文 end--><!--
<div class="reviews"><span class="fl" style="cursor:pointer;"><a onclick="openFavoulist();" id="favourer"></a>
</span>
<div id="favourdiv" class="support01">0人</div>
<span class="fl">了这篇文章</span></div>
-->
0人
|
了这篇文章 |
- 62575_1258353913.zip (17.6 KB)
- 下载次数: 12
发表评论
-
WebService大讲堂之Axis2(10):使用soapmonitor模块监视soap请求与响应消息
2011-06-16 17:07 741在Axis2中提供了一个Axis2 ... -
http://androidguy.blog.51cto.com/974126/214862
2011-06-16 17:06 775Axis2可以通过模块(Module)进行扩展。Axis2模块 ... -
WebService大讲堂之Axis2(8):异步调用WebService
2011-06-16 17:05 773在前面几篇文章中都是使用同步方式来调用WebService。也 ... -
WebService大讲堂之Axis2(7):将Spring的装配JavaBean发布成WebService
2011-06-16 17:05 1101在现今的Web应用中经常使用Spring框架来装载JavaBe ... -
WebService大讲堂之Axis2(6):跨服务会话(Session)管理
2011-06-16 17:00 853在《WebService大讲堂之Axis2(5):会话(Se ... -
WebService大讲堂之Axis2(5):会话(Session)管理
2011-06-16 17:00 790WebService给人最直观的感觉就是由一个个方法组成,并在 ... -
WebService大讲堂之Axis2(4):二进制文件传输
2011-06-16 16:59 848在《WebService大讲堂之Axis2(2):复合类型数据 ... -
WebService大讲堂之Axis2(3):使用services.xml文件发布WebService
2011-06-16 16:58 722用Axis2实现Web Service,虽然可以将POJO类放 ... -
WebService大讲堂之Axis2(2):复合类型数据的传递
2011-06-16 16:57 916在实际的应用中,不仅需要使用WebService来传递简单类型 ... -
WebService大讲堂之Axis2(1):用POJO实现0配置的WebService
2011-06-16 16:57 748Axis2是一套崭新的WebService引擎,该版本是对Ax ... -
Java6 WebService 使用集合
2011-06-16 16:52 847集合是一种非常有用的 ... -
Java6 WebService 使用复杂对象
2011-06-16 16:51 875Java6 WebService 使用复杂 ... -
Java6 WebService客户端封装
2011-06-16 16:50 1070在开发WebService客户端应用的时候,面临的最大挑战是事 ... -
Java6开发WebService进阶
2011-06-16 16:47 1119在上文中,使用Java6做 ... -
Java6开发WebService入门
2011-06-16 16:17 824之前常常用CXF、Axis2、XF ...
相关推荐
java开发过程中,很多地方都会遇到数据传递,远程获取数据问题,我这个简单的webservice接口发布可以在java开发过程中,很多地方都会遇到数据传递,远程获取数据问题,我这个简单的webservice接口发布可以在
本篇文章将详细讲解如何使用Java来发布一个Web服务,并在Tomcat服务器上部署运行。 一、准备工作 1. **安装Java开发环境**:确保你已经安装了Java JDK,可以访问Java API并编译Java源代码。 2. **安装Tomcat服务器...
Apache Axis是一个开源的、功能强大的Web服务实现,支持SOAP协议,能够简化WebService的创建、发布和调用过程。 **安装配置Tomcat** 确保Tomcat服务器已正确安装。本文假设使用的是Tomcat 5.0版本,但也可适用于...
在Java世界中,WebService是一种基于XML的开放标准技术,它允许不同系统间的应用程序进行通信,跨越不同的操作系统和编程语言。本实例将详细讲解如何使用Apache Axis1.4工具来生成Java版的WebService服务端和客户端...
### Java WebService 的发布与调用 #### 一、前言 随着互联网技术的发展,不同系统之间的通信变得越来越重要。WebService作为一种重要的分布式计算技术,在跨平台、跨语言的服务交互方面发挥着重要作用。本文将详细...
Java WebService接口开发是将Java应用程序暴露为网络服务的一种方式,允许不同系统间的数据交换和交互。本案例将深入探讨如何使用Java实现Web服务的创建、发布和调用。 一、理解WebService WebService是一种基于...
【Java发布和调用WebService】知识点详解 Java WebService是一种基于标准的、平台无关的通信方式,用于不同系统之间的交互。在Java中,主要通过JAX-WS(Java API for XML Web Services)框架来实现WebService的发布...
C# 调用 Java 发布的 WebService 终稿 C# 调用 Java 发布的 WebService 是一种常见的跨语言通信方式。在本文中,我们将介绍如何使用 C# 调用 Java 发布的 WebService。 标题解释 C# 调用 Java 发布的 WebService ...
最后,函数可以发布成 Webservice。 在 SOAMANAGER 中,可以找到 WSDL 的 URL,然后在浏览器中访问该 URL,以获取 Webservice 的 Endpoint 地址。 在 SICF 中,可以找到服务的 Endpoint 地址,然后在浏览器中访问...
"Java 调用 Webservice 的几种方法总结" Java 调用 Webservice 的几种方法总结中,主要介绍了使用 JDK Web 服务 API、Axis 和 XFire 等方法来调用 Webservice。下面将对每种方法进行详细的介绍。 使用 JDK Web ...
【Java 6 开发 WebService】是关于使用Java 6版本进行Web服务开发的技术主题。Web服务是一种基于网络的应用程序接口,它允许不同系统之间的数据交换。在这个场景中,我们将探讨如何利用Java 6的新特性,通过注解轻松...
Java WebService服务端程序是一种基于Java技术实现的网络通信服务,它允许不同系统间的应用程序通过互联网进行交互。在本文中,我们将深入探讨Java WebService的核心概念、开发过程以及相关技术。 1. **WebService...
综上所述,本文档涵盖了JavaWebService开发的多个方面,包括接口定义、端点发布、客户端调用、工具使用以及部署容器整合等,这些都是在实际开发中不可或缺的关键知识点。通过深入理解和运用这些知识,可以帮助开发者...
使用Java的`Endpoint`类发布服务: ```java HelloWorldImpl serviceImpl = new HelloWorldImpl(); Endpoint.publish("http://localhost:8080/HelloWorld", serviceImpl); ``` 这将在指定的URL上发布服务。 4....
5.3 UDDI注册:Universal Description, Discovery, and Integration (UDDI) 是一种目录服务,用于发布和查找Web服务。通过UDDI,服务提供者可以注册他们的服务,而服务消费者则可以搜索和发现所需的服务。 5.4 ...
6. **示例代码**: 在jsp-WebService子目录中,可能包含了创建和调用WebService的示例代码,包括Java源文件、配置文件以及相关的HTML页面(jsp)来展示如何通过Web浏览器调用这些服务。通过这些示例,你可以学习如何...
在Java中发布Web服务主要涉及的是Java Web Service技术,它是一种基于XML的协议,用于不同系统之间的通信。这里我们将详细讲解如何使用Axis和Tomcat来创建并发布一个Web服务。 首先,我们需要理解Java中的Web服务...
6. Spring与WebService整合: Spring框架提供了对WebService的全面支持,可以通过Spring-WS或Spring-Integration模块方便地集成各种Web服务框架,如Axis2。Spring的依赖注入和AOP特性使得Web服务的开发更加灵活和...
2. WebService发布: 发布WebService主要涉及以下步骤: - **创建服务接口**:定义服务的操作(方法)和输入/输出参数。在Java中,这通常通过JAX-WS(Java API for XML Web Services)实现,使用注解如@WebService...