用户操作
[即时聊天] [发私信] [加为好友]
曾巧ID:numenZQ
42207次访问,排名2821,好友0人,关注者0人。
numenZQ的文章
原创 29 篇
翻译 16 篇
转载 2 篇
评论 16 篇
最近评论
xh:不推荐修改web.xml,设置java_options更好
numenZQ:补充说明一点,使用java.util.zip包时,是以UTF-8编码格式读取的文件名,因此在中文windows操作系统(Windows操作系统默认字符集为:GBK)中使用时会导致文件名解析错误,因此需要使用org.apache.tools.zip.ZipEntry和 org.apache.tools.zip.ZipOutputStream类来解决这一问题。
numenZQ:这个是需要明确知道字符串的成分,该方法只是为了满足读取不同字符集相应字符串,还是以“多哈亚运会”为例:如果字符集为GBK,截取前6个字节,结果为:“多哈亚”;当字符集为UTF-8时,截取前6个字节,结果则为:“多哈”,这是因为GBK是双字节编码,而UTF-8是三字节变长编码,如果不分字符集来读取对应长度的字串,则会出现字串内容与预期不符,长度错误等问题。
lyazure:仔细看了你的代码,作用是从一个字符串中获取指定字节数的字符,不知道你要这么做的最终目的是用来做什么。除非明确知道字符串的成分,否则这种做法很难做到完美,比如你的代码中,假如出现要从“多哈亚运会”这样的字符串中截取7个字节,最终会截得3个字符。
Alexandre:ab8e44bc75204d49bf0c9fe68a2b2176 matura foto amatoriale
收藏
    相册
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 用OC4J和Axis构建Web Services收藏

    新一篇: JiBX初步 | 旧一篇: JSR 184:3D坐标系和定位总结

    作者:曾巧(numenzq)

    等级:初级

     

    本文介绍了用OC4JAxis构建Web服务,主要是用OC4J实现服务端,而用Axis实现客户端。

     

    版本说明

    l         JDK1.4.2_08

    l         OC4J10.1.3.0.0

    l         Axis1.4

    l         Ant1.6.2OC4J自带)

     

    OC4J简介

    Oracle Containers for J2EE (OC4J) Oracle 应用服务器的核心 J2EE 运行时组件。OC4J J2EE 1.4 兼容,并运行在标准的 J2SE 版本上,它在保有易于使用和高产出传统的同时,还为生产环境提供了杰出的性能和可伸缩性。

     

    安装OC4J

    OC4J官方网站下载最新版本的安装文件:

    http://www.oracle.com/technology/global/cn/tech/java/oc4j/index.html

        由于OC4J各版本的安装方法各有不同,所以安装方法应参见安装包里的Readme.txt,根据该文档的描述来安装OC4J

     

    OC4J的运行与停止

    第一次启动OC4J时,程序会提示你设计初始密码,默认值为welcome。我们可以通过<oc4j_install_dir>\bin\oc4j.cmd来启动OC4J应用服务器,命令如下:

    cd <oc4j_install_dir>\bin

    oc4j –start

     

    也可以在<oc4j_install_dir>\j2ee\home目录下直接启动OC4J,命令如下:

    cd <oc4j_install_dir>\j2ee\home

    java –jar oc4j.jar

     

    如果你要使用自定义的server.xml配置文件启动OC4J的话,可以使用下面的命令(假设server.xml文件存放在conf文件夹下):

    cd <oc4j_install_dir>\j2ee\home

    java -jar oc4j.jar -config /conf/server.xml

     

    如果正常启动了OC4J,控制台信息应如下:

     

        你也可以通过http://localhost:8888/来判断是否正常启动。

        要停止OC4J也相当简单,直接在控制台同时按下Ctrl+C即可。你也可以使用命令使OC4J停止,如下:

    cd <oc4j_install_dir>\bin

    oc4j -shutdown -port 23791 -password welcome

       

    集成OC4JMyEclipse

    Eclipse菜单里选择Window->Preferences…,然后在Preferences框的左边列表里选择MyEclipse->Application Servers->Oracle 9i/AS,如下图:

     

    首先把Oracle 9i AS设置成为Enable状态,并在Oracle AS Home Directory里填入:<oc4j_install_dir>\j2ee\home,然后在第二栏填入你安装oc4j所使用的密码,最后设置你的JDK路径如图:

     

    Ant部署应用到OC4J

    下面Ant脚本里所用到的一些参数的解释如下:(下述均为默认值,如果在你应用程序中有所不同,你得做出相应的修改)

    ${j2ee.home}——<oc4j_install_dir>/j2ee/home

    ${oc4j.deploy.ormi}——ormi://localhost

    ${oc4j.deploy.username}——oc4jadmin

    ${oc4j.deploy.password}——welcome

    ${this.build}——./lib

    ${this.application.name}——application name

    ${this.ear}"——${this.application.name}.ear

    ${this.war}——${this.application.name}-web

    ${this.uri}——${this.application.name}

     

    发布EAR文件:

      <target name="deploy" depends="core">
        <java jar="${j2ee.home}/admin.jar" fork="yes">
          <arg value="${oc4j.deploy.ormi}"/>
          <arg value="${oc4j.deploy.username}"/>
          <arg value="${oc4j.deploy.password}"/>
          <arg value="-deploy"/>
          <arg value="-file"/>
          <arg value="${this.build}/${this.ear}"/>
          <arg value="-deploymentName"/>
          <arg value="${this.application.name}"/>
        </java>
       </target>

    上面的Ant脚本用java命令执行如下:

    java -jar ${j2ee.home}/admin.jar ${oc4j.deploy.ormi} ${oc4j.deploy.username} ${oc4j.deploy.password} -deploy -file ${this.build}/${this.ear} -deploymentName ${this.application.name}

     

    绑定Web应用程序:

      <target name="bind-web-app" depends="deploy">
        <java jar="${j2ee.home}/admin.jar" fork="yes">
          <arg value="${oc4j.deploy.ormi}"/>
          <arg value="${oc4j.deploy.username}"/>
          <arg value="${oc4j.deploy.password}"/>
          <arg value="-bindWebApp"/>
          <arg value="${this.application.name}"/>
          <arg value="${this.war}"/>
          <arg value="http-web-site"/>
          <arg value="/${this.uri}"/>
        </java>
      </target>

    上面的Ant脚本用java命令执行如下:

    java -jar ${j2ee.home}/admin.jar ${oc4j.deploy.ormi} ${oc4j.deploy.username} ${oc4j.deploy.password}  -bindWebApp ${this.application.name} ${this.war} http-web-site /${this.uri}

    在最新的OC4J 10g (10.1.3)版本中,参数http-web-site已改为default-web-site,你可以在<oc4j_install_dir>\j2ee\home\config\目录里找到default-web-site.xml配置文件。

     

    取消部署:

      <target name="undeploy" depends="init">
        <java jar="${j2ee.home}/admin.jar" fork="yes">
          <arg value="${oc4j.deploy.ormi}"/>
          <arg value="${oc4j.deploy.username}"/>
          <arg value="${oc4j.deploy.password}"/>
          <arg value="-undeploy"/>
          <arg value="${this.application.name}"/>
        </java>
      </target>

    上面的Ant脚本用java命令执行如下:

    java -jar ${j2ee.home}/admin.jar ${oc4j.deploy.ormi} ${oc4j.deploy.username} ${oc4j.deploy.password} -undeploy ${this.application.name}

     

    编码

        通过对上面基本信息的学习,我们现在来编写一个简单的应用程序并部署到OC4J应用服务器上。为了方便理解,我们这个程序只有一个Hello.java接口文件,HelloImpl.java接口实现文件和application.xml,web.xml两个配置文件;为了例子的完整性,另外添加了一个index.html文件。该web服务提供sayHello(String name)方法供外部使用。下面就来讲讲具体实现。

        该应用程序的包结构如下:

     

     

    Hello.java

    package com.gelc.ws.server;

     

    public interface Hello {

        public String sayHello(String name);

    }

     

    HelloImpl.java

    package com.gelc.ws.server;

     

    public class HelloImpl {

       

        public HelloImpl() {}

       

        public String sayHello(String name) {

            return ("Hello " + name);

        }

    }

     

    application.xml

    <?xml version="1.0" encoding="UTF-8"?>

    <!DOCTYPE application PUBLIC

    '-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN' 'http://java.sun.com/dtd/application_1_3.dtd'>

     

    <application>

        <display-name>Web Services Example</display-name>

        <description>Java Web Service Example</description>

        <module>

           <web>

               <web-uri>hellows-web.war</web-uri>

               <context-root>/hellows</context-root>

           </web>

        </module>

    </application>

        该配置文件是为发布该应用到OC4J而服务的。

     

    web.xml

    <?xml version="1.0" encoding="UTF-8"?>

    <!DOCTYPE web-app PUBLIC

    '-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN' 'http://java.sun.com/dtd/web-app_2_3.dtd'>

     

    <web-app>

    <servlet>

      <servlet-name>Hello Web Service</servlet-name>

      <servlet-class>oracle.j2ee.ws.StatelessJavaRpcWebService</servlet-class>

     

      <init-param>

        <param-name>interface-name</param-name>

        <param-value> com.gelc.ws.server.Hello</param-value>

      </init-param>

      <init-param>

        <param-name>class-name</param-name>

        <param-value> com.gelc.ws.server.HelloImpl</param-value>

      </init-param>

    </servlet>

     

    <servlet-mapping>

      <servlet-name>Hello Web Service</servlet-name>

      <url-pattern>/helloService</url-pattern>

    </servlet-mapping>

     

    <welcome-file-list>

      <welcome-file>index.html</welcome-file>

    </welcome-file-list>

    </web-app>

        该配置文件除了配置web应用的相关信息外,更重要的是设置了<servlet-class>oracle.j2ee.ws.StatelessJavaRpcWebService</servlet-class>和相应得参数。

     

    index.html

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

     

    <html>

      <head>

        <title>Web Services Example</title>

       

        <meta http-equiv="keywords" content="Web Services,OC4J,Axis">

        <meta http-equiv="description" content="Web Services Example">

        <meta http-equiv="content-type" content="text/html; charset=UTF-8">

       

        <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->

       

      </head>

     

      <body>

        <ul>

           <li>Hello Stateless Web Service</li>

           <li><a href="helloService?wsdl">WSDL</a></li>

           <li><a href="helloService?proxy_jar">Proxy Jar</a></li>

           <li><a href="helloService?proxy_source">Proxy Source</a></li>

        </ul>

      </body>

    </html>

     

    最后要使用Ant来打包和发布该Web服务。值得注意的是,一定要使用OC4J自带的Ant来构建,ANT_HOME<oc4j_install_dir>\ant.由于build.xml文件内容比较多,这里就不帖出来了,具体的请参加源代码。常用命令如下:

    l         ant         编译java文件,并打包earwar文件

    l         ant deploy  部署该工程到OC4J服务器,在部署时,应保证OC4J服务器正常运行。

    l         ant undeploy  撤销部署,从OC4J里删除该工程

    l         ant clean   清空工程,删除buildlib文件 

     

    Axis简介

        目前Apache Axis已经发展到了第三代,其核心是一个SOAP处理器,用于开发包括客户端,服务器端,SOAP Gateway等各种应用。事实上Apache Axis在了1.0版后,其发行版本还包括了完整的J2EE服务器插件, WSDL支持和生成,TCP/IP监视器等组件,从这个意义上来说Apahce Axis已不仅仅是个SOAP框架了,它包含了除了UDDI外对整个Web Service协议栈(Protocol Stack)的支持。

     

    安装Axis

    Axis官方网站下载最新版本的安装文件:

    http://ws.apache.org/axis/

        直接解压下载的压缩包到安装目录即可。

     

    编码

        我们现在就写一个客户端代码来调用上面Web服务所提供的sayHello(String name)方法。由于代码并不复杂,我就先把代码贴出来:

    package src.client;

     

    import java.net.MalformedURLException;

    <