技术开发 频道

使用WAS CE开发基于JAX-WS的RESTful服务

    四、开发一个简单的RESTful Web Service Client

    1. 创建一个Dynamic Web Project作为Client

    选择File->New->Dynamic Web Project

    输入Project Name为HelloRestfulClient

    2. 新建一个testget.jsp,加入如下内容:

<form method="POST" action="HelloGetMethodRequester">
  Target Name: <input type="text" name="target">
  <input type="submit" value="Submit">
</form>

    这个JSP用来为HelloGetMethodRequester Servlet提供参数。

    3. 创建HelloGetMethodRequester Servlet,加入如下内容:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   PrintWriter ut = response.getWriter();
   String target = request.getParameter( "target" );
         
   String queryRequest = "http://localhost:8080/HelloRestfulService/Hello?target=" + target;
   GetMethod method = new GetMethod(queryRequest);
   HttpClient client = new HttpClient();
   int statusCode = client.executeMethod(method);
   if (statusCode != 200) { //HttpStatus.SC_OK
       System. err .println( "Method failed: " + method.getStatusLine());
   }
         
   try {
       DocumentBuilder builder= DocumentBuilderFactory.newInstance().newDocumentBuilder();
       Document queryResponse = builder.parse(method.getResponseBodyAsStream());
       XPath xPath = XPathFactory.newInstance().newXPath();
       NodeList nodes = (NodeList) xPath.evaluate( "/return" , queryResponse, XPathConstants. NODESET );
       for ( int i = 0; i < nodes.getLength(); i++) {
           // Get eachxpathexpression as a string
           String str = (String) xPath.evaluate( "HelloWorldResponse" , nodes.item(i), XPathConstants. STRING );
           out.println( "Service return: " + str);
       }
   } catch (Exception e) {
       e.printStackTrace();
   }

    在这个Servlet中我们用到了commons-codec-1.3.jar和commons-httpclient-3.0.1.jar两个包,因此我们需要将它们加入到Build Path中:

    这两个包在WAS CE的如下目录中可以找到:

    <WASCE_HOME>\repository\commons-codec\commons-codec\1.3\commons-codec-1.3.jar

    <WASCE_HOME >\repository\commons-httpclient\commons-httpclient\3.0.1\commons-httpclient-3.0.1.jar

    让我们看一看这段Servlet代码中的一些关键点:

    a) 首先创建了一个HttpClient对象,并运行了GetMethod,即使用GET请求如下URI:

    "http://localhost:8080/HelloRestfulService/Hello?target=" + target

    b) 如果成功返回,即statusCode为200,则可以从method对象中得到返回的结果:

    method.getResponseBodyAsStream()

    c) 因为返回的结果为自定义的一段XML文档,所以我们可以使用XPath来处理并输出到页面上。

    4. 编写部署计划geronimo-web.xml

    为使这个Web Client能够成功部署到WAS CE中,我们还需要在geronimo-web.xml的<environment>中加入如下依赖:

<dep:dependencies>
    <dep:dependency>
        <dep:groupId>commons-codec</dep:groupId>
        <dep:artifactId>commons-codec</dep:artifactId>
        <dep:version>1.3</dep:version>
        <dep:type>jar</dep:type>
    </dep:dependency>
    <dep:dependency>
        <dep:groupId>commons-httpclient</dep:groupId>
        <dep:artifactId>commons-httpclient</dep:artifactId>
        <dep:version>3.0.1</dep:version>
        <dep:type>jar</dep:type>
    </dep:dependency>
</dep:dependencies>

    5. 部署和运行

    右击这个HelloRestfulClient工程,选择Run As -> Run on Server,会将其部署到WAS CE中,当Status栏变为Synchronized时,表示部署成功。

    在浏览器中打开如下页面:http://localhost:8080/HelloRestfulClient/testget.jsp

    输入"Rex",并点击Submit,可得到如下结果:

    五、总结

    本文介绍了REST的基本概念,以及如何在WAS CE V2.1.1.2下开发一个RESTful Web Service和一个使用GET方式的Client。如果读者朋友有兴趣的话,也可以尝试扩展这个Client,如增加testpost.jsp和HelloPostMethodRequester Servlet两个文件:

    - testpost.jsp包括一个文件上载框,用以上传一个XML文件;

    - HelloPostMethodRequester Servlet用于将XML文件以POST方式传送给HelloWorld这个Service。

    事实上,我们的HelloWorld RESTful Web Service已经具备了处理接收一个XML文件的能力。

    六、资源链接

    ·WAS CE及Samples下载

    http://www.ibm.com/developerworks/downloads/ws/wasce/

    ·WAS CE Eclipse Plug-in (aka WEP, WAS CE’s WTP Server Adapter)下载

    http://download.boulder.ibm.com/ibmdl/pub/software/websphere/wasce/updates

    ·WAS CE文档

    http://publib.boulder.ibm.com/wasce/Front_en.html

    ·WAS CE主页

    http://www.ibm.com/developerworks/websphere/zones/was/wasce.html

0
相关文章