四、开发一个简单的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