Android客户端应用享用传统Web服务

简介:

     Android系统中提供了SQLite数据库,用于本地的数据存储,App链接到网络就要用到专门的服务应用。目前已经存在了服务应用,想要开发一个Android移动应用用来享用已有的Web服务应用,这类似于传统的Client -Service。无论是B/S模式还是C/S模式,开发应用和业务处理,服务提供,数据存储等都不可缺少。Android很好的解决了这一问题,在现有的Web服务基础上,搭建客户端应用程序,共享已有的服务。

      Apache开源项目中将Http协议访问做了一个二次封装,使得客户端应用程序访问Web服务器能够像浏览器访问一样方便(Apache-httpClient),正好Android SDK中提供了这个开源组件,为开发客户端应用程序访问服务器提供支持。

     关于Android客户端访问Web服务器与传统的Web应用的架构如下图:

     

      捣鼓了Android APP 访问Web服务器之后,最大的感受是C/S模式和B/S模式的概念开始模糊了,对访问模式的考虑在技术方面将淡化,而更多是用户的计算机处理能力,并发访问量,通信实时性,可靠性,数据传输量,安全性这些方面衡量。

     想到关于B/S模式和C/S模式的纠结权衡在这个体验过后,应该不会再有太多技术可行性上的纠结,而更多的精力投入到对程序的运行环境,功能,用户体验等方面思考和设计。

    关于享用已有的Web服务,开发Android客户端应用程序的大致流程总结如下:

   1.对传统Web应用的MCV框架中的Servlet控制做相应的扩展,在不影响已有的系统的前提下,对客户端(浏览器,Android应用)请求进行判断,获取不同类型的请求响应信息。

     例如下面代码:

 
  1. package org.estao.servelet;  
  2.  
  3. import java.io.IOException;  
  4. import java.io.PrintWriter;  
  5.  
  6. import javax.servlet.ServletException;  
  7. import javax.servlet.http.HttpServlet;  
  8. import javax.servlet.http.HttpServletRequest;  
  9. import javax.servlet.http.HttpServletResponse;  
  10.  
  11. import org.estao.business.ActionBusiness;  
  12. import org.estao.business.ActionManager;  
  13. import org.json.JSONException;  
  14. import org.json.JSONObject;  
  15.  
  16. public class SettingServlet extends HttpServlet {  
  17.  
  18.     /**  
  19.      *   
  20.      */ 
  21.     private static final long serialVersionUID = -4384397961898281821L;  
  22.  
  23.     private ActionBusiness actionBusiness;  
  24.       
  25.     public void destroy() {  
  26.         super.destroy();   
  27.     }  
  28.  
  29.       
  30.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  31.             throws ServletException, IOException {  
  32.         response.setContentType("text/html");  
  33.         response.setCharacterEncoding("UTF-8");  
  34.         doPost(request, response);  
  35.     }  
  36.  
  37.       
  38.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  39.             throws ServletException, IOException {  
  40.         response.setContentType("text/html");  
  41.         response.setCharacterEncoding("UTF-8");  
  42.         PrintWriter out = response.getWriter();  
  43.         JSONObject jsonObject=new JSONObject();  
  44.         boolean result=actionBusiness.validSetting(jsonObject);  
  45.         try {  
  46.             jsonObject.put("Result", result);  
  47.         } catch (JSONException e) {  
  48.             e.printStackTrace();  
  49.         }  
  50.         out.println(jsonObject.toString());  
  51.         out.flush();  
  52.         out.close();  
  53.     }  
  54.  
  55.       
  56.     public void init() throws ServletException {  
  57.         actionBusiness=ActionManager.getAppBusiness().getActionBusiness();  
  58.     }  
  59.  
  60. }  

      上面代码是获得JSON格式对象,作为响应信息。

      2.在Android应用中以Http协议的方式访问服务器,使用Apache-httpclient开发包,或者进行适用于应用的再次封装。

    例如下面代码:

 
  1. package org.estao.util;  
  2.  
  3. import java.io.IOException;  
  4. import java.util.ArrayList;  
  5. import java.util.List;  
  6. import java.util.Map;  
  7.  
  8. import org.apache.http.HttpResponse;  
  9. import org.apache.http.NameValuePair;  
  10. import org.apache.http.client.ClientProtocolException;  
  11. import org.apache.http.client.HttpClient;  
  12. import org.apache.http.client.entity.UrlEncodedFormEntity;  
  13. import org.apache.http.client.methods.HttpGet;  
  14. import org.apache.http.client.methods.HttpPost;  
  15. import org.apache.http.impl.client.DefaultHttpClient;  
  16. import org.apache.http.message.BasicNameValuePair;  
  17. import org.apache.http.util.EntityUtils;  
  18.  
  19. /**  
  20.  *   
  21.  * @author Ajax  
  22.  *   
  23.  * @message Just For JSON Object Transport  
  24.  *  
  25.  */ 
  26. public class HttpUtil {  
  27.     // 创建HttpClient对象  
  28.     public static final HttpClient httpClient = new DefaultHttpClient();  
  29.     // 访问Web服务器基础路径  
  30.     public static final String BASE_URL = "http://10.43.10.108:8080/estao/";  
  31.  
  32.     /**  
  33.      * GET方式无参数请求  
  34.      *   
  35.      * @param 发送url请求  
  36.      * @return 服务器相应的字符串  
  37.      * @throws IOException  
  38.      */ 
  39.     public static String getRequest(String url) {  
  40.         HttpGet get = new HttpGet(url);  
  41.         HttpResponse httpResponse = null;  
  42.         String result = null;  
  43.         try {  
  44.             // 发送GET请求  
  45.             httpResponse = httpClient.execute(get);  
  46.             // 服务器端返回相应  
  47.             if (httpResponse.getStatusLine().getStatusCode() == 200) {  
  48.                 // 获取服务器相应的字符串  
  49.                 result = EntityUtils.toString(httpResponse.getEntity());  
  50.             }  
  51.         } catch (ClientProtocolException e) {  
  52.             e.printStackTrace();  
  53.               
  54.         } catch (IOException e) {  
  55.             e.printStackTrace();  
  56.         }  
  57.         return result;  
  58.     }  
  59.  
  60.     /**  
  61.      * POST方式带参数请求  
  62.      *   
  63.      * @param 发送url请求  
  64.      * @param rawParams  
  65.      * @return 服务器相应的字符串  
  66.      */ 
  67.     public static String postRequest(String url, Map<String, String> rawParams) {  
  68.         HttpPost post = new HttpPost(url);  
  69.         HttpResponse httpResponse = null;  
  70.         String result = null;  
  71.         List<NameValuePair> params = new ArrayList<NameValuePair>();  
  72.         for (String key : rawParams.keySet()) {  
  73.             // 封装请求参数  
  74.             params.add(new BasicNameValuePair(key, rawParams.get(key)));  
  75.         }  
  76.         try {  
  77.             // 设置请求参数  
  78.             post.setEntity(new UrlEncodedFormEntity(params, "GBK"));  
  79.             // 发送POST请求  
  80.             httpResponse = httpClient.execute(post);  
  81.             // 如果服务器成功的返回相应  
  82.             if (httpResponse.getStatusLine().getStatusCode() == 200) {  
  83.                 //获取服务器响应的字符串  
  84.                 result=EntityUtils.toString(httpResponse.getEntity());  
  85.             }  
  86.         } catch (ClientProtocolException e) {  
  87.             e.printStackTrace();  
  88.         } catch (IOException e) {  
  89.             e.printStackTrace();  
  90.         }  
  91.         return result;  
  92.     }  
  93. }  

        3.开发Android应用程序,对JSON(或者其它格式数据交互对象)进行处理,获取需要的信息。

       Android应用开发相对于已有的Web服务应用而言是独立的,可以将应用程序对服务器的请求和响应重新抽象一层,在已有的Web服务请求响应的控制层进行扩展和特定格式的数据信息封装。




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

相关文章
|
9天前
|
前端开发 JavaScript 关系型数据库
从前端到后端:构建现代化Web应用的技术探索
在当今互联网时代,Web应用的开发已成为了各行各业不可或缺的一部分。从前端到后端,这篇文章将带你深入探索如何构建现代化的Web应用。我们将介绍多种技术,包括前端开发、后端开发以及各种编程语言(如Java、Python、C、PHP、Go)和数据库,帮助你了解如何利用这些技术构建出高效、安全和可扩展的Web应用。
|
24天前
|
网络协议 Java Nacos
nacos常见问题之在web界面 上下线服务时报错 400如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
29 0
|
24天前
|
监控 Serverless 测试技术
Serverless 应用引擎常见问题之做的web服务计费如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
169 3
|
1天前
|
缓存 负载均衡 数据库
优化后端性能:提升Web应用响应速度的关键策略
在当今数字化时代,Web应用的性能对于用户体验至关重要。本文探讨了如何通过优化后端架构和技术手段,提升Web应用的响应速度。从数据库优化、缓存机制到异步处理等多个方面进行了深入分析,并提出了一系列实用的优化策略,以帮助开发者更好地应对日益增长的用户访问量和复杂的业务需求。
8 1
|
1天前
|
缓存 监控 数据库
Flask性能优化:打造高性能Web应用
【4月更文挑战第16天】本文介绍了提升Flask应用性能的七大策略:优化代码逻辑,减少数据库查询,使用WSGI服务器(如Gunicorn、uWSGI),启用缓存(如Flask-Caching),优化数据库操作,采用异步处理与并发(如Celery、Sanic),以及持续监控与调优。通过这些手段,开发者能有效优化Flask应用,适应大型或高并发场景,打造高性能的Web服务。
|
2天前
|
数据库 开发者 Python
Python中使用Flask构建简单Web应用的例子
【4月更文挑战第15天】Flask是一个轻量级的Python Web框架,它允许开发者快速搭建Web应用,同时保持代码的简洁和清晰。下面,我们将通过一个简单的例子来展示如何在Python中使用Flask创建一个基本的Web应用。
|
6天前
|
JavaScript 前端开发 API
Vue.js:构建高效且灵活的Web应用的利器
Vue.js:构建高效且灵活的Web应用的利器
|
14天前
|
XML JSON JavaScript
使用JSON和XML:数据交换格式在Java Web开发中的应用
【4月更文挑战第3天】本文比较了JSON和XML在Java Web开发中的应用。JSON是一种轻量级、易读的数据交换格式,适合快速解析和节省空间,常用于API和Web服务。XML则提供更强的灵活性和数据描述能力,适合复杂数据结构。Java有Jackson和Gson等库处理JSON,JAXB和DOM/SAX处理XML。选择格式需根据应用场景和需求。
|
15天前
|
数据采集 Java API
python并发编程: Python使用线程池在Web服务中实现加速
python并发编程: Python使用线程池在Web服务中实现加速
17 3
python并发编程: Python使用线程池在Web服务中实现加速
|
28天前
javaWeb服务详解(含源代码,测试通过,注释) ——web.xml
javaWeb服务详解(含源代码,测试通过,注释) ——web.xml
7 0