`
pharaohsprince
  • 浏览: 293536 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

webservice学习笔记——入门篇

阅读更多
web service入门学习笔记
最近要做一个java项目,里面用到了webservice技术,
经过一个多月的磕磕绊绊的摸索,总算如了点门。现将我的学习笔记贴出来,供大家参考。

说明,本笔记第七部分主要参考了
http://blog.csdn.net/lin_bei/archive/2006/11/07/1371131.aspx
的内容,由于这位兄弟翻译的不是很通顺,我就按照自己的理解来改编成了
hellowrold的例子:-)。
其他部分为我原创,转载时请注明出处。

一、实验环境
  win2k + jdk1.6  + javee5.0  + Myeclipse5.1
jdk和javee5.0均可从
http://java.sun.com/javase/downloads/index.jsp
下载,安装文件名为
jdk-6-windows-i586.exe
java_ee_sdk-5_02-windows.exe
没有myeclipse的也可以用eclipse代替,只要ide能执行
ant脚本就可以.


/*title: web service入门学习笔记(二)
**date: 2007/01/16
**author:laomai
**url: http://blog.csdn.net/laomai/
*/
 
二、第一个最简单的例子
jsee5安装以后会在系统中建立一个Application Server pe9,这是sun自带的网络服务器,
和tomcat、weblogic的性质类似。
在D:\Sun\SDK\samples\javaee5\webservices\hello-jaxws下有一个自带的web service入门例子,
(D:\Sun\SDK\为我机器上javaee5的安装路径)
我们就先实验它,来理解webservice的本质
1、把jdk的安装路径如D:\Java\jdk1.6.0\bin 加到系统的path环境变量中
2、运行sun自带的网络服务器,具体方法为
    开始->程序->Sun Microsystems->Application Server PE 9->Start Default Server
    然后当弹出的cmd窗口中出现提示“按任意键继续时”输入回车,窗口会关闭,此时在浏览器输入
    http://localhost:8080,应该出现如下内容:
       Sun Java System Application Server Platform Edition 9.0 
  Your server is up and running!
  
 说明服务器已经启动了

3、在Myeclipse打开刚才的例子目录D:\Sun\SDK\samples\javaee5\webservices\hello-jaxws
下的build.xml文件,这个一个ant脚本,具体含义我们以后再讲,现在先执行它
3、在build.xml文件中单击右键,在弹出菜单中选择"run as"->"1 ant build",此时build.xml里的
内容会被执行,在Myeclipse的console中会输出:
buildfile: D:\Sun\SDK\samples\javaee5\webservices\hello-jaxws\build.xml
init:
compile-deploy-service:
     [echo] d:/Sun/SDK
get-artifacts-windows:
get-artifacts-unix:
get-artifacts:
compile-client:
    [javac] Compiling 1 source file to D:\Sun\SDK\samples\javaee5\webservices\hello-jaxws\build
run-client-windows:
     [exec] Hello result = Hello Administrator!
run-client-unix:
run-client:
all:
BUILD SUCCESSFUL
Total time: 43 seconds

其中
 [exec] Hello result = Hello Administrator!
的输出结果说明客户端调用服务器的webservice已经成功。
第一个例子就完成了。我们下面会对这个例子进行详细讲解.

/*title: web service入门学习笔记(三)、(四)
**date: 2007/01/16
**author:laomai
**url: http://blog.csdn.net/laomai/
*/

三、WebService的本质
 从搞c的程序员的眼光来看,webservice实际上就是用java实现的rpc(远端过程调用),
或者说是dll的变形。服务器把它的接口对外发布成一个wsdl文件,客户端根据这个wsdl的内容生成
本地的代理类,再通过代理类调用远端的接口,代理再把接口的执行执行结果回传给客户端,
进行下一步处理。

四、例子源代码剖析
D:\Sun\SDK\samples\javaee5\webservices\hello-jaxws(以后简称为hello-jaxws)
项目里的源文件只有三个
hello-jaxws\src\endpoint\Hello.java   提供webservice的服务器端实现类
hello-jaxws\src\client\Client.java    调用webservice的客户端测试类
hello-jaxws\build.xml                 自动编译的ant脚本

下面我们把这三个文件的内容看一下
1、服务器端的service实现类文件Hello.java,
/* src\endpoint\Hello.java文件的内容 */
package endpoint;
import javax.jws.WebService;

@WebService
public class Hello
{
    public String getHello(String name)
    {
        return "Hello " + name + "!";
    }
}

有这个文件可以看出,编写一个service的实现类,把编写普通的java类
差不多,只不过又多了三点
①要在该类前一个@WebService说明,
②引入javax.jws.WebService;
③在公开的方法前加@WebMethod说明,如果不加的话,
所有的public方法都会自动变成service的对外接口.


2、客户端测试类的实现文件
/* src\client\Client.java文件的内容 */
package client;
import javax.xml.ws.WebServiceRef;
import endpoint.HelloService;
import endpoint.Hello;

public class Client
{
    @WebServiceRef(wsdlLocation="http://localhost:8080/Hello/HelloService?WSDL")
    static HelloService service;
   
    public static void main(String[] args)
    {
        Client client = new Client();
        client.doHello();
    }
   
    public void doHello()
    {
        try
        {
            Hello port = service.getHelloPort();
            String ret = port.getHello(System.getProperty("user.name"));
            System.out.println("Hello result = " + ret);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
}
客户端调用代码要点为:
①导入WebServiceRef包
  import javax.xml.ws.WebServiceRef;
②导入本地生成的stub类,另外编译时也要指明stub类的路径
 import endpoint.HelloService;
 import endpoint.Hello;
③指明服务器的wsdl路径
 @WebServiceRef(wsdlLocation="http://localhost:8080/myhello/HelloService?WSDL")
④声明一个静态的service对象
 static HelloService service;
⑤对要调用的远程方法声明一个代理对象,通过代理来调用真正的远程方法
 Hello port = service.getHelloPort();
    String ret = port.getHello(System.getProperty("user.name"));

3、ant 脚本build.xml
<!-- ant 脚本build.xml的内容 -->
<?xml version="1.0" encoding="UTF-8"?>
<project name="hello-jaxws" default="all" basedir=".">
    <!-- include user specific build properties -->
  
 <!-- 导入预先j2ee预先写好的设置文件-->
    <property file="../../../bp-project/build.properties"/>
    <property file="${user.home}/build.properties"/>
    <property file="../../../bp-project/app-server.properties"/>
   
    <!-- 设置发布目录和类的输出目录 -->
    <property name="autodeploydir" value="${javaee.domaindir}/autodeploy"/>
    <property name="classesdir" value="./build"/>

  <!-- 设置java的类库路径 -->
    <path id="classpath">
        <pathelement location="${javaee.home}/lib/j2ee.jar"/>
        <pathelement location="${classesdir}"/>
    </path>
   
    <!-- 项目的最终任务 -->
    <target name="all" depends="run-client">
        <!--antcall target="restore"/-->
    </target>

  <!-- 测试操作系统环境-->
    <target name="init">
        <condition property="windows">
            <os family="windows" />
        </condition>
        <condition property="unix">
            <os family="unix" />
        </condition>
    </target>

  <!-- 编译服务器端并把它自动发布到sun的服务器上 -->
    <target name="compile-deploy-service" depends="init">
        <mkdir dir="${classesdir}"/>
        <echo message="${javaee.home}"/>
        <javac
            srcdir="./src"
            includes="endpoint/**"
            destdir="${autodeploydir}"
            classpath="${javaee.home}/lib/j2ee.jar"
        />
        <waitfor maxwait="100" maxwaitunit="second">
           <or>
                <available file="${autodeploydir}/endpoint/Hello.class_deployed"/>
                <available file="${autodeploydir}/endpoint/Hello.class_deployFailed"/>
           </or>
        </waitfor>
        <condition property="deploy_succeeded">
                <available file="${autodeploydir}/endpoint/Hello.class_deployed"/>
        </condition>
        <condition property="deploy_failed">
                <available file="${autodeploydir}/endpoint/Hello.class_deployFailed"/>
        </condition>
    </target>

    <target name="get-artifacts" depends="compile-deploy-service,get-artifacts-windows,get-artifacts-unix"/>

 <!-- 生成客户端所需的stub -->
    <target name="get-artifacts-windows" if="windows">
        <exec executable="${javaee.home}/bin/wsimport.bat">
            <arg line="-keep -d ${classesdir} http://${javaee.server.name}:${javaee.server.port}/Hello/HelloService?WSDL"/>
        </exec>
    </target>

    <target name="get-artifacts-unix" if="unix">
        <exec executable="${javaee.home}/bin/wsimport">
            <arg line="-keep -d ${classesdir} http://${javaee.server.name}:${javaee.server.port}/Hello/HelloService?WSDL"/>
        </exec>
    </target>

   <!-- 编译客户端 -->
    <target name="compile-client" depends="get-artifacts">
        <javac srcdir="./src/client" destdir="${classesdir}">
            <classpath refid="classpath"/>
        </javac>
    </target>
   
    
    <target name="run-client" depends="compile-client,run-client-windows,run-client-unix"/>
  
 <!-- 执行客户端 -->
    <target name="run-client-windows" if="windows">
        <exec executable="${javaee.home}/bin/appclient.bat" dir="${classesdir}">
            <arg value="client.Client"/>   
        </exec>   
    </target>

    <target name="run-client-unix" if="unix">
        <exec executable="${javaee.home}/bin/appclient" dir="${classesdir}" failifexecutionfails="false">
            <arg value="client.Client"/>   
        </exec>   
    </target>
   
    <!-- 以下几个任务用与清理和卸载-->
    <!-- 删除生成的类文件-->
    <target name="clean">
    <delete dir="${classesdir}"/>
    </target>


 <!-- 删除和卸载服务器的webservice-->
    <target name="restore">
        <delete>
        <fileset dir="${autodeploydir}/endpoint" includes="Hello*.*"/>
        </delete>
    </target>

    <target name="undeploy">
        <antcall target="restore"/>
    </target>
</project>

这个脚本有许多在windows平台用不到的步骤,下面我们对其进行改造,把它精简一下.

 转自:http://blog.csdn.net/laomai

分享到:
评论

相关推荐

    WebService的实现——CXF学习笔记

    【WebService的实现——CXF学习笔记】 在Java世界中,WebService是一种通过标准协议(如SOAP)进行跨平台、跨语言通信的技术。CXF是Apache软件基金会的一个开源项目,它提供了构建和消费Web服务的工具和库。CXF支持...

    WebService CXF学习文档

    WebService CXF学习——入门篇 1.CXF由来 2.HelloWorld 3.WSDL描述 WebService CXF学习——进阶篇 1.SOAP讲解 2.JAX-WS讲解 3.对象传递 WebService CXF学习——高级篇(一)(二) 1.整合Spring框架 2.CXF...

    WebService CXF学习-入门篇.pdf

    **WebService CXF 学习——入门篇** **一、WebService CXF 由来与目标** Apache CXF 是一个流行的开源框架,它源自 ObjectWeb Celtix 和 CodeHaus XFire 的合并,这两个项目分别由 IONA 公司和业界知名SOAP堆栈...

    Spring.NET学习笔记21——整合WebService的例子

    刘冬编写的Spring.NET学习笔记21——整合WebService的例子。 原文:http://www.cnblogs.com/GoodHelper/archive/2009/11/19/SpringNet_WebService.html

    WebService学习笔记

    【WebService学习笔记】 WebService是一种基于互联网的、标准化的、跨平台的、跨语言的通信机制,使得不同系统间的应用程序可以互相交互数据和服务。它的核心理念是服务导向架构(SOA),即通过服务的方式实现应用...

    webservice学习笔记doc文档

    在本学习笔记中,主要介绍了使用Apache Axis2框架来开发和测试Web Service的过程。Apache Axis2是Apache SOAP栈的一个实现,提供了简单且高效的Web Service开发工具。 首先,开发者需要在Eclipse集成开发环境中搭建...

    java 私塾课堂笔记——WebService.doc

    Java 私塾课堂笔记——WebService WebService 是一种技术,使应用程序可以以与平台和编程语言无关的方式进行相互通信。它是一个软件接口,描述了一组可以在网络上通过标准化的 XML 消息传递访问的操作。WebService ...

    尚硅谷Webservice学习笔记

    在本篇尚硅谷的学习笔记中,主要涉及了Web Service的基础概念、Schema约束、HTTP协议以及相关面试问题。 1. Schema约束: - Schema是XML Schema Document的缩写,它是一种XML格式,用于定义其他XML文档的结构和...

    WebService学习笔记0001

    【WebService学习笔记0001】 在IT领域,WebService是一种基于开放标准(如XML、SOAP、WSDL和UDDI)的互操作性技术,它允许不同系统间的应用程序通过网络进行通信。本学习笔记将围绕WebService的核心概念、工作原理...

    webservice学习笔记 -- XFrie

    【Web Service学习笔记——XFrie框架详解】 Web Service是一种通过网络进行通信的服务,它允许不同的应用程序之间进行数据交换,跨越了操作系统和编程语言的障碍。XFrie是一个轻量级、高性能的Java Web Service框架...

    WebService一——使用JDK开发WebService

    【WebService一——使用JDK开发WebService】 WebService是一种基于XML(Extensible Markup Language)的网络服务标准,它允许不同系统间的应用程序进行交互,不受操作系统、编程语言的限制。本篇文章将探讨如何使用...

    WebService二——使用Eclipse开发WebService及各种调用方式

    【WebService二——使用Eclipse开发WebService及各种调用方式】 在IT行业中,WebService是一种基于标准协议(如SOAP、WSDL和UDDI)的开放Web应用程序接口,它允许不同系统之间进行互操作通信。本教程将详细介绍如何...

    WebService客户端调用WebService服务示例代码——java

    WebService客户端调用WebService服务示例代码,java代码,纯手工,包括直接httpClient直接发送Saop报文调用和利用wsimport -keep 生成客户端代码后调用两种方式的示例。因涉及商务账户密码隐私,因此代码中的有些账号...

    JAVA6开发WebService (四)——SAAJ调用WebService

    在本篇主题“JAVA6开发WebService(四)——SAAJ调用WebService”中,我们将探讨如何使用Java API for XML Messaging (SAAJ)来与WebService进行交互。SAAJ是Java平台中用于处理SOAP消息的API,它提供了创建、解析和...

    WebService 学习

    【WebService学习】 WebService是一种基于互联网的、松散耦合的分布式计算模型,它允许不同的系统之间进行数据交换和业务交互。这项技术的核心是利用XML(可扩展标记语言)作为数据交换的标准格式,SOAP(简单对象...

Global site tag (gtag.js) - Google Analytics