⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jax.htm

📁 这是一个实现登陆的页面程序
💻 HTM
📖 第 1 页 / 共 3 页
字号:
                      <TD vAlign=top width=299>
                        <P align=left>由wscomplie工具生成,由应用程序开发者运行</P></TD></TR>
                    <TR>
                      <TD vAlign=top width=299>
                        <P align=left>约束</P></TD>
                      <TD vAlign=top width=299>
                        <P align=left>由wsdeploy工具生成,由应用程序开发者运行</P></TD></TR>
                    <TR>
                      <TD vAlign=top width=299>
                        <P align=left>JAX-RPC运行系统</P></TD>
                      <TD vAlign=top width=299>
                        <P align=left>包含在Java 
WSDP中</P></TD></TR></TBODY></TABLE></DIV>
                  <DIV align=left></DIV>
                  <P>&nbsp;</P>
                  <P>&nbsp;</P>
                  <P>&nbsp;</P>
                  <P><B>HelloWorld</B><B>文件</B></P>
                  <P>为了使用JAX-RPC生成服务,应用程序开发人员必须提供一些文件。对于HelloWorld的例子,这些文件在<I>&lt;JWSDP_HOME&gt;</I>/docs/tutorial/examples/jaxrpc/hello目录中:</P>
                  <UL>
                    <LI><A 
                    href="http://java.sun.com/webservices/docs/1.1/tutorial/examples/jaxrpc/hello/HelloIF.java">HelloIF.java</A>-服务定义接口 

                    <LI><A 
                    href="http://java.sun.com/webservices/docs/1.1/tutorial/examples/jaxrpc/hello/HelloImpl.java">HelloImpl.java</A>-服务定义实现类,它实现了HelloIF接口 

                    <LI><A 
                    href="http://java.sun.com/webservices/docs/1.1/tutorial/examples/jaxrpc/hello/HelloClient.java">HelloClient.java-</A>远程客户,与服务联系,然后调用sayHello方法 

                    <LI>config.xml-由wscompile工具读取的配置文件 
                    <LI>jaxrpc-ri.xml-由wsdeploy工具读取的配置文件 
                    <LI>web.xml- web组件(servlet)的部署描述信息,由它分派服务 </LI></UL>
                  <P><B><A name=an></A>安装</B></P>
                  <P>首先必须设置环境变量PATH,包含这些目录:</P>
                  <BLOCKQUOTE>
                    <P><I>&lt;JWSDP_HOME&gt;</I>/bin<BR><I>&lt;JWSDP_HOME&gt;</I>/jwsdp-shared/bin<BR><I>&lt;JWSDP_HOME&gt;</I>/jaxrpc-1.0.3/bin<BR><I>&lt;JWSDP_HOME&gt;</I>/jakarta-ant-1.5.1/bin</P></BLOCKQUOTE>
                  <P>接着,如果还没有这样做,按照“<A 
                  href="http://gceclub.sun.com.cn/staticcontent/html/webservices/web_services_tutorial/3/3.1.htm">开始Tomcat</A>”一章中介绍的:</P>
                  <UL>
                    <LI><A 
                    href="http://gceclub.sun.com.cn/staticcontent/html/webservices/web_services_tutorial/3/3.1.htm#wp73059">生成编译属性文件</A> 

                    <LI><A 
                    href="http://gceclub.sun.com.cn/staticcontent/html/webservices/web_services_tutorial/3/3.2.htm#wp72306">启动Tomcat</A> 
                    </LI></UL>
                  <P><B>编译部署服务</B></P>
                  <P>开发一个JAX-RPC Web服务的基本步骤如下:</P>
                  <P>1、&nbsp;&nbsp; 编码服务定义接口和实现类</P>
                  <P>2、&nbsp;&nbsp; 编译第一步中的服务定义代码</P>
                  <P>3、&nbsp;&nbsp; 将代码打包成一个WAR文件</P>
                  <P>4、&nbsp;&nbsp; 生成约束和WSDL文件</P>
                  <P>5、&nbsp;&nbsp; 部署服务。</P>
                  <P>接下来的章节将更详细地描述每个步骤。</P>
                  <P><B>编码服务定义接口和实现类</B></P>
                  <P>服务定义接口声明了服务中远程客户可以调用的方法。接口必须遵循几个规则:</P>
                  <UL>
                    <LI>它继承了java.rmi.Remote接口 
                    <LI>它必须没有像public final static这样的连续声明 
                    <LI>方法必须抛出java.rmi.RemoteException或它的一个子类。(方法也可以抛出服务指定的异常。) 
                    <LI>方法的参数和返回类型必须是支持的JAX-RPC类型。参见“<FONT color=#ff0000><A 
                    href="http://gceclub.sun.com.cn/staticcontent/html/webservices/web_services_tutorial/jax-rpc.11/11.2.htm#leixing">JAX-RPC支持的类型</A></FONT>”部分。 
                    </LI></UL>
                  <P>在该例中,服务定义接口是HelloIF.java:</P>
                  <BLOCKQUOTE>
                    <P>package hello;</P>
                    <P>import java.rmi.Remote;<BR>import 
                    java.rmi.RemoteException;</P>
                    <P>public interface HelloIF extends Remote{<BR>&nbsp;&nbsp; 
                    public String sayHello(String s) throws 
                    RemoteException;<BR>}</P></BLOCKQUOTE>
                  <P>除接口外,还需要编写实现该接口的类。在这个例子中,实现类称为HelloImpl:</P>
                  <BLOCKQUOTE>
                    <P>package hello;</P>
                    <P>public class HelloImpl implemnets HelloIF{</P>
                    <P>&nbsp;&nbsp;&nbsp; public String message=”Hello”;</P>
                    <P>&nbsp;&nbsp;&nbsp; public String sayHello(String 
                    s){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 
                    message+s;<BR>&nbsp;&nbsp; }<BR>}</P></BLOCKQUOTE>
                  <P><B>编译服务定义代码</B></P>
                  <P>要编译HelloIF.java和HelloImpl.java,进入目录<I>&lt;JWSD_HOME&gt;</I>/docs/tutorial/examples/jaxrpc/hello,然后键入如下命令:</P>
                  <BLOCKQUOTE>
                    <P>ant compile-server</P></BLOCKQUOTE>
                  <P>该命令将产生的class文件放置在build/shared子目录中。</P>
                  <P><B><A name=da></A>打包WAR文件</B></P>
                  <P>要生成包含服务代码的WAR文件,输入这些命令:</P>
                  <BLOCKQUOTE>
                    <P>ant setup-we-inf<BR>ant package</P></BLOCKQUOTE>
                  <P>setup-wen-inf命令的目的是将class和XML文件复制到build/WEB-INF子目录中。而package的目的是运行jar命令,将文件包在名为dist/hello-portable.war的WAR文件中。这个WAR文件还不能部署,因为它不包含约束类。下一部分将会学习如何生成可部署的WAR文件。Hello-portable.war包含如下文件:</P>
                  <BLOCKQUOTE>
                    <P>WEB-INF/classes/hello/HelloIF.class<BR>WEB-INF/classes/hello/HelloImpl.class<BR>WEB-INF/jaxrpc-ri.xml<BR>WEB-INF/web.xml</P></BLOCKQUOTE>
                  <P>其中class文件是由前面部分显示的compile-server目标生成的。web.xml文件是实现服务的Web应用程序的部署描述信息。和web.xml文件不同,jaxrpc-ri.xml文件不是规范的一部分,它是实现特有的。这个例子的jaxrpc-ri.xml文件的内容如下:</P>
                  <BLOCKQUOTE>
                    <P>&lt;?xml version="1.0" 
                    encoding="UTF-8"?&gt;<BR>&lt;webServices<BR>&nbsp;&nbsp; 
                    xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/dd"<BR>&nbsp;&nbsp; 
                    &nbsp;&nbsp;&nbsp;&nbsp;version="1.0"<BR>&nbsp;&nbsp; 
                    targetNamespaceBase="http://com.test/wsdl"<BR>&nbsp;&nbsp; 
                    typeNamespaceBase="http://com.test/types"<BR>&nbsp;&nbsp; 
                    urlPatternBase="/ws"&gt;<BR>&nbsp;&nbsp; 
                    &nbsp;&nbsp;&nbsp;&nbsp; 
                    &lt;endpoint<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                    name="MyHello"<BR>&nbsp;&nbsp;&nbsp; 
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                    displayName="HelloWorld 
                    Service"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                    description="A simple web service" 
                    <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                    interface="hello.HelloIF"&nbsp; 
                    <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                    implementation="hello.HelloImpl"/&gt;&nbsp; </P>
                    <P>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; 
                    &lt;endpointMapping<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                    endpointName="MyHello"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                    urlPattern="/hello"/&gt;<BR>&lt;/webServices&gt;</P></BLOCKQUOTE>
                  <P>在WSDL文件中使用了一些webServices属性,例如targetNamespaceBase,这些将在下一节中生成。(WSDL文件可以很复杂,在指南中不作讨论。参见“<A 
                  href="http://gceclub.sun.com.cn/staticcontent/html/webservices/web_services_tutorial/jax-rpc.11/11.2.htm#geng">更多信息</A>”。)注意,urlPattern的值(/hello)是服务的URL的一部分,这将在“<A 
                  href="http://gceclub.sun.com.cn/staticcontent/html/webservices/web_services_tutorial/jax-rpc.11/11.2.htm#yang">验证部署</A>”部分描述。</P>
                  <P>关于jaxrpc-ri.xml文件的更多信息,请参见“<A 
                  href="http://gceclub.sun.com.cn/staticcontent/html/webservices/web_services_tutorial/jax-rpc.11/11.2.htm#jaxrpcri">jaxrpc-ri.xml文件</A>”部分。如果你是高级用户,可能希望检验XML模式文件:&lt;JWSDP_HOME&gt;/docs/tutorial/examples/jaxrpc/common/jax-rpc-ri-dd.xsd。</P>
                  <P><B>生成约束和WSDL文件</B></P>
                  <P>要生成约束和WSDL文件,输入下列命令:</P>
                  <BLOCKQUOTE>
                    <P>ant process-war</P></BLOCKQUOTE>
                  <P>该命令按下列方式运行wsdeploy工具:</P>
                  <BLOCKQUOTE>
                    <P>wsdeploy –tmpdir build/wsdeploy-generated<BR>-o 
                    dist/hello-deployable.war 
                  dist/hello-portable.war</P></BLOCKQUOTE>
                  <P>该命令运行wsdeploy工具,它执行这些任务:</P>
                  <UL>
                    <LI>读取dist/hello-portable.war文件作为输入 
                    <LI>从hello-portable.war文件中包含的jaxrpc-ri.xml文件里获得信息 
                    <LI>为服务生成约束类 
                    <LI>生成名为MyHello.wsdl的WSDL文件 
                    <LI>将约束类、Hello.wsdl文件,以及hello-portable.war文件的内容打包形成一个名为dist/hello-jaxrpc.war的可部署的WAR文件。 
                    </LI></UL>
                  <P>-tmpdir选项指定wsdeploy将生成的文件存储在哪个目录,生成的文件包括WSDL文件、约束类以及中间源代码文件。如果指定了-keep选项,这些文件不会被删除。</P>
                  <P>有几种方式可以访问由wsdeploy生成的WSDL文件:</P>
                  <UL>
                    <LI>运行带有-keep选项的wsdeploy,然后在由-tmpdir选项指定的目录中查找WSDL文件 
                    <LI>拆开WAR文件(jar –x),由wsdeploy输出,然后到WEB-INF目录中查找WSDL文件 
                    <LI>按下面部分描述的来部署和验证服务。“<A 
                    href="http://gceclub.sun.com.cn/staticcontent/html/webservices/web_services_tutorial/jax-rpc.11/11.2.htm#yang">验证部署</A>”中显示的URL对应的HTML页面中有一个到WSDL文件的链接。 
                    </LI></UL>
                  <P>注意wsdeploy工具并不部署服务;而是生成一个可以被部署的WAR文件。在下一部分,将会部署wsdeploy生成的hello-jaxrpc.war文件所包含的服务。关于wsdeploy的更多信息,参见“<A 
                  href="http://gceclub.sun.com.cn/staticcontent/html/webservices/web_services_tutorial/jax-rpc.11/11.2.htm#wsdeploy">wsdeploy工具</A>”部分。</P>
                  <P> </P>
                  <P>&nbsp;</P></TD></TR></TBODY></TABLE>
            <DIV class=Code>
            <DIV class=Code>
            <DIV class=Code>
            <DIV class=Code>
            <DIV class=navbar align=center>
            <TABLE dir=ltr cellSpacing=0 cellPadding=0 width="100%" 
            summary="Navigation bar, includes the book title, part number, and navigation buttons" 
            border=0>
              <COLGROUP span=3 width="100%">
              <COL id=1 width="45%">
              <COL id=2 width="25%">
              <COL id=3 width="30%"></COLGROUP>
              <TBODY>
              <TR bgColor=#cccccc>
                <TD class=navbartitle align=left abbr=ChapTitle>
                  <P align=left><FONT 
                  face=Arial>&nbsp;&nbsp;</FONT>用JAX-RPC构建Web服务</P></TD>
                <TD class=navbartitle align=right abbr=PartNum>
                  <P align=left><FONT face=Arial>816-7869-10</FONT></P></TD>
                <TD vAlign=top align=right abbr=NavButtons><A 
                  href="http://gceclub.sun.com.cn/staticcontent/html/webservices/web_services_tutorial/index.htm"><IMG 
                  height=26 alt="Table of Contents" src="jax.files/toc01.htm" 
                  width=30 border=0> </A><A 
                  href="http://gceclub.sun.com.cn/staticcontent/html/webservices/web_services_tutorial/10/10.2.htm"><IMG 
                  height=26 alt="Previous Chapter" src="" width=30 border=0></A> 
                  <A 
                  href="http://gceclub.sun.com.cn/staticcontent/html/webservices/web_services_tutorial/jax-rpc.11/11.2.htm"><IMG 
                  height=26 alt="Next Chapter" src="" width=30 border=0></A> 
              </TD></TR></TBODY></TABLE></DIV>
            <DIV align=left></DIV></DIV></DIV></DIV></DIV></DIV></DIV></TD>
          <TD vAlign=top width="21%" rowSpan=2>
            <SCRIPT language=JavaScript>
<!--
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
//-->
</SCRIPT>

            <SCRIPT language=JavaScript type=text/JavaScript>
<!--
function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}
//-->
</SCRIPT>

            <TABLE cellSpacing=1 cellPadding=0 width="100%" border=0>
              <TBODY>
              <TR>
                <TD>
                  <TABLE cellSpacing=1 cellPadding=0 width="100%" border=0>
                    <TBODY>
                    <TR bgColor=#bfbf3f>
                      <TD vAlign=top colSpan=2 height=2>
                        <DIV align=center>
                        <P align=left><A 
                        onmouseover="MM_swapImage('Image25211','','http://gceclub.sun.com.cn/NASApp/sme/docroot/ecommunity/pics/ar_lg_red_r_pad1.gif',1)" 
                        onmouseout=MM_swapImgRestore() 
                        href="http://gceclub.sun.com.cn/NASApp/sme/controller/techtopcatquery?cat_id=03"><FONT 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -