很有必要钻研下Java6的Web服务的发布方式。
从前面两篇文章可以看出Java6对WebService的发布提供了API级别的直接支持,发布只需要一行代码就搞定了。但是作为一个服务,就需要启动,总不能每次启动都去运行一个Main方法来启动吧。
实际中Web服务的发布常常伴随着Web容器的启动而发布,而在Java6中,我们没法直接像Axis2和XFire那样直接去发布,但是可以通过变通的方法,通过Servlet来和容器绑定起来,在容器启动的时候发布服务。
下面以Tomcat6下 来实现Java6 Web服务的发布。
文件目录:
1. 开发WebService服务
package com.soa.getUserSer.service; import javax.jws.WebService; @WebService public class GetUserSer { /** * 服务的方法:获取用户信息 * @param name * @return */ public String getUser(String name){ String users="当前用户是:"+name; return users; } }
2. 开发发布服务的Servlet,为了通用性,最好选择GenericServlet来继承
package com.servlet; import java.io.IOException; import javax.servlet.GenericServlet; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.xml.ws.Endpoint; import com.soa.getUserSer.service.GetUserSer; public class GetUserServlet extends GenericServlet { @Override public void init(ServletConfig servletConfig) throws ServletException { super.init(servletConfig); System.out.println("准备发布webService 服务:http://192.168.8.121:8092/soa/service.getUserSer"); //发布服务 Endpoint.publish("http://192.168.8.121:8092/soa/service.getUserSer", new GetUserSer()); System.out.println("服务发布成功:http://192.168.8.121:8092/soa/service.getUserSer"); } @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("此Servlet不处理任何业务逻辑,仅仅yonglai发布一个Web服务:http://192.168.8.121:8092/soa/service.getUserSer"); } }
这里将服务发布的代码写在了Servlet的init()方法中,当Servlet加载时候,会自动执行init()里面的方法。从而达到发布服务的目的,由于此Servlet不处理任何业务,因此,在Service里面仅仅写了一个提示性的语句。
3. 配置web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" 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"> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>GetUserServlet</servlet-name> <servlet-class>com.servlet.GetUserServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>GetUserServlet</servlet-name> <url-pattern>/servlet/GetUserServlet</url-pattern> </servlet-mapping> </web-app>
注意,上面的Servlet比一般Servlet配置多了一行:
<load-on-startup>1</load-on-startup>
,这样写的目的是Servlet能伴随容易的启动在第一时间加载。以便服务能尽可能早的发布,否则,只有在第一次请求该Servlet的时候,才会被加载到容器。
4、部署、启动并测试
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <html> <head> <base href="<%=basePath%>"> <title>webservice获取用户地址</title> </head> <body> This is my JSP page. <br> <a href="http://192.168.8.121:8092/soa/service.getUserSer?wsdl">SOA获取用户信息WSDL地址<a> </body> </html>地址发布:
接口发布后的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。
相关推荐
java-WebService应用实例中包括所用的jar包,说明文档,还收集的Spring集成XFire开发WebService的应用
开发webservice可以使用java、也可以使用c#。由于国内大多数计算机安装的是Windows系列操作系统,所以使用c#开发webservice不仅开发效率高,而且部署和维护很方便。 本文详细介绍了java如何调用c#开发的webservice。...
之前常常用CXF、Axis2、XFire等来开发结合Java语言来...但实际上Java6中已经支持用Java开发WebService应用了,而且很方便。这样就大大减少了项目安装部署的代价,因为选择开源的框架依赖大量第三方包,程序的尺寸倍增。
Java调用webService应用.pdf
java webservice开发实例 java如何开发webservice 如何调用
java webservice实例教程适合于各个层次的Java开发人员,对于初级程序员来说,可以在短时间掌握webService技术,熟练CXF框架应用,能马上应用于实际工作。对于中高级程序员来说,java webservice实例教程突破思想...
NC65项目开发-应用集成后端开发技术(2-2)(WebService),主要集成开发文档webservice,java
由于工作的关系最近一直使用WebService实现不同系统、语言之间的接口对接。故把平时的应用总结一下,希望对各位有所帮助。
b. 开发WebService接口实现类,@WebService注解该实现类,并制定endpointInterface; c. 配置applicationContext-ws.xml d. 测试 备注: 开发一个需要对第三方应用发布的RESTful Service 步骤: a. 开发RS接口...
Java版的webservice应用程序实例,采用ideal集成开发环境,读取数据库使用mybatis框架
包括webservice教程,以及在java中如何应用webservice开发,一步一步教你如何来做。
MyEclipse Web Services是建立在XFire Java SOAP框架和工具基础上的, XFire是一款开源的Java SOAP框架。它拥有一个轻量级的信息处理模块,通过STAX来与SOAP信息相结合。提供了一个工作在Web Services下的简单API,...
JAVA的WebService支持.rar,详细介绍了cxf、axis、wsdl、soap等原理及应用开发!
Java_WebService开发是由企业发布的完成其特定商务需求的在线应用服务,其他公司或应用软件能够通过Internet来访问并使用这项在线服务,它是一种构建应用程序的普遍模型,可以在任何支持网络通信的操作系统中实施运行。
ejb 3、jpa规范都属于sun公司所制订的java ee规范,因此把基于ejb 3+jpa的应用称为经典java ee架构,目前这种架构在java开发领域也有极大的市场占有率。 本书介绍了java ee规范的三大主要规范jsf、ejb 3和jpa,...
2.3.2在Web应用程序中发布 2.3.2.1 依赖包 2.3.2.1发布步骤 2.4 创建Web Service客户端 2.4.1同步调用方式的客户端 2.4.1.1 开发步骤 2.4.1.2 运行wsimport 2.4.1.3 修改生成的Java代码 2.4....
webservice的应用已经越来越广泛了,下面介绍几种在Java体系中开发webservice的方式,有兴趣的可以了解一下。
开发Android应用,需要服务器,很多人采用Java发布XML或JSON,本人对Java了解不多,所以采用.net开发WebService发布XML或者JSON
java开发oa系统源码@WebService 注释 01. BS 与 CS 架构 B/S:浏览器到服务器 浏览器向服务器发送请求 服务器执行操作 服务器渲染结果 浏览器接收来自服务器的响应 C/S:客户端(Swing/Awt)到服务器 客户端执行操作...
使用myeclipse开发java的webservice应用例子,带说明图解