RestEasy Web服务客户端调用

简介:

l 背景

在前几篇文章中,我介绍了用RestEasy 框架搭建的Rest风格的java web服务。这几天事情比较多,一直没有写客户端的调用方法。现在就谈一下客户端的调用方法。

首先,如果你还不知道如何利用RestEasy 构建Rest风格的Web服务。请查看与web服务相关的概念以及如何利用RestEasy搭建webservice的文章。

l 编码测试

本来想用Android做个客户端,然后将测试代码写在android应用程序中。结果发现我将搭载有webservice的gae运行起来之后,利用http://ip:port不能在Android客户单中访问。令人郁闷。浏览器中输入http://localhost:port 居然没有问题,可以正常调用使用。我想肯定在Android中是无法解析localhost.自然无响应。我试图利用本机ip问。结果以在GAE平台上,run之后,只能用http://localhost:port访问,使用ip连不上,我狠郁闷。

到最后,不得不写了几个测试用例。

如果你还不知道如何在GAE中搭建单元测试,可以看该文章。http://blog.csdn.net/nndtdx/article/details/6767352

下面是代码,这里主要测试两个方法,一个是listallbook即get方式提交,另外一个是addbook使用post提交。方法如下

 

 

 
  1. import org.apache.http.HttpEntity; 
  2. import org.apache.http.HttpResponse; 
  3. import org.junit.After; 
  4. import org.junit.AfterClass; 
  5. import org.junit.Before; 
  6. import org.junit.BeforeClass; 
  7. import org.junit.Test; 
  8. import org.junit.Assert; 
  9. import org.junit.internal.runners.statements.Fail; 
  10. import org.apache.http.client.HttpClient; 
  11. import org.apache.http.client.methods.HttpGet; 
  12. import org.apache.http.client.methods.HttpPost; 
  13. import org.apache.http.impl.client.DefaultHttpClient; 
  14. import org.apache.http.util.EntityUtils; 
  15. import org.apache.http.message.BasicNameValuePair; 
  16. import org.apache.http.protocol.HTTP; 
  17. import org.apache.http.NameValuePair; 
  18. import org.apache.http.client.entity.UrlEncodedFormEntity; 
  19. import java.util.*; 

 

 
  1. String urlRoot = "http://localhost:8888/gaerest/"
  2.  
  3.  
  4. @Test 
  5. public void listBooksTest() { 
  6.  
  7.     HttpClient httpClient = new DefaultHttpClient(); 
  8.     String urllistallbook = urlRoot + "library/books/"
  9.  
  10.     HttpGet httpGet = new HttpGet(urllistallbook); 
  11.     try { 
  12.         HttpResponse response = new DefaultHttpClient().execute(httpGet); 
  13.         int code = response.getStatusLine().getStatusCode(); 
  14.         //204服务器已经处理成功,但没有返回任何数据 
  15.         if (code == 200 || code==204) { 
  16.             String content = EntityUtils.toString(response.getEntity()); 
  17.             System.out.println("listaoobook输出===>" + content); 
  18.         } else { 
  19.             System.err.println("建立请求失败,返回状态码==》" + code); 
  20.             Assert.fail("listbooks"); 
  21.         } 
  22.  
  23.     } catch (Exception e) { 
  24.         // TODO: handle exception 
  25.         Assert.fail("listbooks失败" + e.getMessage()); 
  26.     } 
  27.  
  28.  
  29. @Test 
  30. public void  addBookTest() { 
  31.     HttpClient httpClient = new DefaultHttpClient(); 
  32.     String urlString=urlRoot+"library/book/mybook/"
  33.     HttpPost httpPost=new HttpPost(urlString); 
  34.     List<NameValuePair> params=new ArrayList<NameValuePair>(); 
  35.     params.add( new BasicNameValuePair("content""this is my book content")  ); 
  36.     try { 
  37.         UrlEncodedFormEntity entity=new UrlEncodedFormEntity(params,HTTP.UTF_8); 
  38.         httpPost.setEntity(entity); 
  39.         HttpResponse response=httpClient.execute(httpPost); 
  40.         int code= response.getStatusLine().getStatusCode(); 
  41.         if(code==200){ 
  42.             String reString=EntityUtils.toString(response.getEntity()); 
  43.             System.out.println(reString); 
  44.             this.listBooksTest(); 
  45.              
  46.         }else
  47.             Assert.fail("addbooktest===》"+code); 
  48.         } 
  49.            
  50.     } catch (Exception e) { 
  51.         Assert.fail("addbookTest"+e.getMessage()+e.getStackTrace()); 
  52.     } 

 

这里主要是用了Apache提供的几个类。构建不同的请求方式对象,然后调用HttpClient进行执行。不过需要注意,上边很多类在Android中也有提供相同的类,写的时候,注意选择是那个里边的类。

GET方式很好理解,就是请求一个url即可。Post方式只需要将数据放在请求实体中即可。

运行单元测试,完美通过。查看输出,可以看到列出的数目已经增加了,说明post方法没有问题。

接下来还要处理一个gae webservice如果在开发阶段,我如何将其发布到本地,使其通过本地ip在模拟器中可以访问呢?思考中。目前就先依赖单元测试吧。



本文转自HDDevTeam 51CTO博客,原文链接:http://blog.51cto.com/hddev/667513,如需转载请自行联系原作者

相关文章
|
19小时前
|
XML 存储 安全
LabVIEWCompactRIO 开发指南23 Web服务
LabVIEWCompactRIO 开发指南23 Web服务
|
1天前
|
JSON 监控 安全
LabVIEW测试和调试Web服务
LabVIEW测试和调试Web服务
|
1天前
|
JSON 数据格式 Windows
LabVIEW创建Web服务
LabVIEW创建Web服务
|
3天前
|
XML 前端开发 JavaScript
CSR(客户端渲染)和AJAX在Web开发中各自扮演不同的角色
【5月更文挑战第8天】CSR(客户端渲染)与AJAX在Web开发中各司其职。CSR提供初始HTML框架,通过JavaScript在浏览器端获取并渲染数据,提升交互性和响应速度。AJAX则实现页面局部更新,如实时搜索,不刷新页面即可获取数据。CSR可能因DOM操作多而引发性能问题,但可优化解决;AJAX适合频繁交互场景,提高响应性。两者在不同需求下各有优势,需按项目选择适用技术。
13 4
|
3天前
|
前端开发 搜索推荐 安全
AJAX和CSR(客户端渲染)是Web开发中常用的两种技术
【5月更文挑战第8天】AJAX提升用户体验,减轻服务器压力,但对搜索引擎不友好且增加开发复杂度,易引发安全问题。CSR提供快速响应和交互性,改善用户体验,但首屏加载慢,搜索引擎支持不足,同样面临安全挑战。两者各有适用场景,需按项目需求选择。
10 0
|
5天前
|
开发框架 JavaScript 安全
WIndows Server 2016 部署 Web服务(简单篇)
WIndows Server 2016 部署 Web服务(简单篇)
|
11天前
|
缓存 监控 测试技术
【Go语言专栏】使用Go语言构建高性能Web服务
【4月更文挑战第30天】本文探讨了使用Go语言构建高性能Web服务的策略,包括Go语言在并发处理和内存管理上的优势、基本原则(如保持简单、缓存和并发控制)、标准库与第三方框架的选择、编写高效的HTTP处理器、数据库优化以及性能测试和监控。通过遵循最佳实践,开发者可以充分利用Go语言的特性,构建出高性能的Web服务。
|
14天前
|
开发框架 监控 .NET
Visual Basic的Web服务和REST API开发指南
【4月更文挑战第27天】本文探讨了使用Visual Basic(VB.NET)构建Web服务和RESTful API的方法。首先介绍了Web服务的基础和REST API的概念,然后阐述了.NET Framework与.NET Core/.NET 5+对VB.NET的支持,以及ASP.NET Core在Web开发中的作用。接着,详细讲解了创建RESTful API的步骤,包括控制器与路由设置、模型绑定与验证,以及返回响应。此外,还讨论了安全措施、测试方法、部署选项和监控策略。最后强调,VB.NET开发者可以通过ASP.NET Core涉足现代Web服务开发,拓宽技术领域。
|
16天前
|
应用服务中间件 网络安全 nginx
快速上手!使用Docker和Nginx部署Web服务的完美指南
快速上手!使用Docker和Nginx部署Web服务的完美指南
|
18天前
|
监控 Shell
Shell脚本监控WEB服务是否正常
Shell脚本监控WEB服务是否正常