登录模块加载中...
会员投稿 投稿指南 今天是:
打印本页 | 关闭窗口 | 双击滚屏 您的位置首页>>网页制作学习园地>>NET教程>>WebService开发>>webservice学习笔记——入门篇
webservice学习笔记——入门篇
来源: ‖ 作者: ‖ 点击: ‖ 时间:12-09-26 11:48:35 ‖ 【 】‖ 我要投稿

【IT168 技术文档】

    最近要做一个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/
*/

四、例子源代码剖析

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

xml version="1.0" encoding="UTF-8"?> <project name="hello-jaxws" default="all" basedir="."> <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"/> <path id="classpath"> <pathelement location="${javaee.home}/lib/j2ee.jar"/> <pathelement location="${classesdir}"/> path> <target name="all" depends="run-client"> target> <target name="init"> <condition property="windows"> <os family="windows" /> condition> <condition property="unix"> <os family="unix" /> condition> target> <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"/> <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> <target name="restore"> <delete> <fileset dir="${autodeploydir}/endpoint" includes="Hello*.*"/> delete> target> <target name="undeploy"> <antcall target="restore"/> target> project>


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

加入收藏:  加入收藏夹  | 发送给好友:  发送给好友
责任编辑:admin
相关文章列表
请文明参与讨论,禁止漫骂攻击。  
网友评论