为现有Web应用程序提供一个移动接口

尽管随着 Android、iOS 和其他移动操作系统的版本不断升级,移动浏览器变得越来越强大,但物理局限仍然存在,比如较小的屏幕和使用触摸作为新输入模式(而不是使用鼠标)。尽管一些智能电话或许可以显示一个网站,但最终的显示结果常常难以使用,甚至完全无用。按钮和其他控件需要调整大小,以便能够通过手指而不是鼠标指针轻松操作它们,而且滑动和多点触摸手势等新动作能被高效地利用。简言之,需要各方齐心协力,才能使这些站点不仅仅是移动友好的,而是支持移动的。

减少的屏幕可用空间和触摸控制是促进简化和重组 Web UI,使 Web 应用程序适用于移动设备的主要因素。尽管可以生成在桌面和移动浏览器上以不同方式呈现的 单一 UI,但此方法通常用于避免对现有 Web 应用程序的任何修改。相反,目标应该是生成一组 静态资产(标记、样式表和 JavaScript代码),它们提供了对 Web 应用程序功能的移动访问,无需以任何方式修改服务器端代码。现有的站点仍然原封不动。

从操作角度讲,这避免了将代码更改部署到生产环境中的高昂成本。它还消除了对在添加移动支持期间修改的现有功能进行回归测试的需求。另外,因为使用了相同的请求和响应,所以如果期望添加移动支持来显著提升您的访问流量,那么只需对应用程序执行性能测试即可。借助此技术,可简单地插入静态文件(.html、.css 和 .js),以便让托管现有 Web 应用程序的同一个域为它们提供服务,重用应用程序已提供的现有服务。

通过将限制自己仅创建新的静态资产,您实际上仅为现有的 Web 应用程序编写了一个客户端。

Web 应用程序:简史

大多数非平凡的 Web 应用程序都是围绕 模型 - 视图 - 控制器(MVC) 的概念构建的,其中控制器位于服务器上。服务器维护会话状态,通过转发或重定向,将用户请求导航到下一个要呈现的页面。每个客户端请求通常会得到整个页面的标记,即使在不同视图中仅更改了该页面的一部分。随后引入了 portlet 框架来解决这个问题,该框架支持更灵活地执行页面聚合。

然后,Ajax 开始迅速普及,而 Web 2.0也诞生了。Ajax 支持以编程方式发出异步请求。有效负载不再需要是标记,而是 XML,以及后来的 JSON。这使得控制器能够从服务器转移到客户端,页面聚合工作可卸载到越来越强大且更加标准化的客户端浏览器上。在一个极端上,Web 应用程序的浏览器和标记呈现器并无区别,所有功能和流由服务器管理。在该范围的另一个极端,Web 应用程序的许多控制和流逻辑在客户端浏览器上执行(像 JavaScript、Flash 或 Silverlight 一样),服务器提供 RESTful 服务来满足数据需求,并执行应用程序可能需要的任何繁重的计算。

提到移动 Web 应用程序,人们通常想到的是后一种模式,因为这是 jQuery Mobile 或 Dojo Mobile 等移动框架的设计方式。但是,在您需要让支持移动的应用程序拥有更加以服务器为中心的设计,而没有 REST 服务时,会发生什么?

将 Web 应用程序用作黑盒

因为我们的意图是避免对应用程序执行任何代码更改,所以可将应用程序视作一个黑盒,仅关注您获得的针对任何给定输入的输出;这里的输入指的是 HTTP 请求,输出指的是 HTTP 响应。因此,如果创建一个移动客户端来模拟特定的 HTTP 请求,并能够分析和识别该请求的所有可能响应,那么可以提供一种移动 “皮肤” 来利用现有应用程序的相同的请求 / 响应模式。尽管这在理论上听起来很简单,但实际上可能没那么简单。

登录序列

我们看看一个典型 Web 应用程序的身份验证序列的示例。(HTTP 请求和响应的详细信息可使用一个工具来收集,比如 Firefox Firebug 或者 Chrome 或 Safari 中的 Developer Tools。)我们首先看看来自提交凭据的位置的身份验证。清单 1 显示了登录表单的源代码标记。

清单 1

<form name="logonForm" action="/abc/salesportal/j_security_check" method="post"> <input type="hidden" name="page" value="signin.wss" /> <table cellspacing="0" cellpadding="0" class="sign-in-table"> <tr> <td class="c1"><label for="user_id">Email ID:</label></td> <td><input dir="ltr" class="wpsEditField" size="30" value="" name="j_username"id="user_id" type="text" /> (e.g., joe@abc.com)</td> </tr> <tr> <td class="c1"><label for="passwd">Password:</label></td> <td><input dir="ltr" class="wpsEditField" size="30" id="passwd" name="j_password"type="password" /></td> </tr> <tr><td><input type="hidden" name="login-form-type"value="pwd" /></td> </tr> <tr> <td>&nbsp;</td> <td><p><a href="http://www.abc.com/password">Forgot your password? </a></p></td> </tr> </table> <table cellspacing="0" cellpadding="0" class="submit-table"> <tr> <td class="buttons" align="right"> <span class="button-blue"> <input type="submit" value="Submit" name="submitButton" /> </span> <span class="button-blue"> <input type="button" value="Cancel" name="cancelButton" onclick="cancelSignIn()" /> </span> </td> </tr> </table> </form>

在上面的代码中,用户输入用户 ID 和密码并单击 Submit 时,可以看到凭据将传送到 j_security_check。非常简单。让我们模拟一个身份验证请求。

一个非常有用的 Web 应用程序黑盒测试工具是 cURL,它支持构建和跟踪 HTTP 交互。它为您提供了完整的控制权,支持您构建请求的每个方面(清单 2)。而且您完全无需担心浏览器缓存的变化无常。

时间: 2024-08-01 16:44:23

为现有Web应用程序提供一个移动接口的相关文章

ASP.NET MVC 3发布 Asp.net Web应用程序的一个框架

Asp.net Mvc 是http://www.aliyun.com/zixun/aggregation/35971.html">微软官方提供的Mvc模式编写Asp.net Web应用程序的一个框架,它由Castle的MonoRail而来.目前已经历经数个版本.MVC (ModelViewController)把一个web应用分成了三个部分:model view和controller.ASP.NET MVC框架提供了一个可以代替asp.net web窗体的基于mvc的应用. ASP.NET

aspnet-asp.net web应用程序 添加一个外部类 访问asp.net页面里的一个txtbox,然后赋值!

问题描述 asp.net web应用程序 添加一个外部类 访问asp.net页面里的一个txtbox,然后赋值! 外部类 如何访问asp.net页面里的一个控件 添加一个外部类 访问asp.net页面里的一个txtbox,然后赋值! 解决方案 用一个public的变量呢

java-使用JAVA调用ASP.NET web应用程序

问题描述 使用JAVA调用ASP.NET web应用程序 有一个ASP.NET web应用程序(网站),现在可以正常使用了.现在要求将这个ASP.NET web应用程序使用JAVA调用(是不是这样描述的我也不太清楚),大概的意思是:这个ASP.NET web应用程序提供一个类似接口的东西,能够让JAVA调用,运行JAVA程序后,能将原来ASP.NET web应用程序的页面和功能展现出来. 要求说要使用socket方式来实现,我只对JAVA比较了解,至于ASP.NET和socket这两者,都没有接

Weblogic6.0部署和配置WEB应用程序(4)

Weblogic服务器如何解释HTTP请求当Weblogic服务器收到HTTP请求,它是这样解释这个请求的:通过分解URL的各个部分,然后根据这些信息来决定是哪一个WEB应用程序或服务器应处理这个请求.下面示例演示了对WEB应用程序,虚拟主机,servlets,JSPs和静态文件的请求的不同组合以及响应结果.注意:如果将WEB应用程序打包成企业应用程序的一部分,可为WEB应用程序提供一个预定的名字,用这个名字解释对这个WEB应用程序的请求.更多信息,参考部署WEB应用程序成为企业应用程序的一部分

Web应用程序的定义

web|程序      前面的章节中已经多次使用过Web应用程序(Web Application)术语,所指的既不是一个真正意义上的Web网站,又不是一个传统的应用程序.换句话说,而是认为它是一些Web网页和用来完成某些任务的其他资源的一个集合.它隐含这样一层意思:有一个预定义的路线贯穿于网页之中,用户可做出选择或提供信息使任务能够完成.      例如,一个在线商店,你为了购买货物,进行反复的观察和选择,浏览一系列网页,收集所需要的信息,支付相应的费用,最后发出定单.也可能是一个"软件升级向导

在不更改应用程序代码的情况下对Web应用程序启用移动功能

简介 尽管随着 Android.iOS 和其他移动操作系统的版本不断升级,移动浏览器变得越来越 强大,但物理局限仍然存在,比如较小的屏幕和使用触摸作为新输入模式(而不是使用鼠标).尽管一 些智能电话或许可以显示一个网站,但最终的显示结果常常难以使用,甚至完全无用.按钮和其他控件 需要调整大小,以便能够通过手指而不是鼠标指针轻松操作它们,而且滑动和多点触摸手势等新动作能 被高效地利用.简言之,需要各方齐心协力,才能使这些站点不仅仅是移动友好的,而是支持移动的. 减少的屏幕可用空间和触摸控制是促进简

提升WEB应用程序安全需要打“组合拳”

由于WEB应用程序对于当今许多企业的内部和外部操作都极端重要,所以其可用性和安全性既是客户的期望又是其要求.因而,企业应该在WEB应用程序问题上不惜一切代价.同时,WEB应用程序的重要性也给安全专家带来巨大压力,因为没有什么会比企业的关键网站或应用被攻击.破坏更恐怖了.不幸的是,在构建应用程序的竞赛中,许多企业给开发者施加压力,要求其 重点关注应用程序的安全.本文将探讨如何在WEB应用程序的性能.可用性.安全性上达到平衡.安全策略在WEB应用程序安全问题上保持前瞻性和主动性应当成为IT的头等大事

用Eclipse、WTP和Derby构建Web应用程序

简介 Eclipse 是使用 Java 技术开发 Web 应用程序的理想平台.动态 Web 应用程序的 3 层设计非常适合与运行在 servlet 容器(例如 Apache Jakarta Tomcat)中的 JSP 和 Servlet 相结合.持久数据层可以适当地由 Derby 数据库提供.用于开发 J2EE 和 Web 应用程序的 Eclipse Web Tools Platform (WTP) 项目工具集,加上 Derby Eclipse 插件,可以提供快速而简便的 Web 开发. 本文讨

Selenium一款有名的Web应用程序测试框架

在本文中,我们将介绍如何轻松地从 Selenium 1 过渡到 Selenium 2,并用一些示例介绍如何使用 Selenium 2,如何进行远程测试,以及如何将书面测试从 Selenium 1 迁移到 Selenium 2 中. Selenium 是用于测试 Web 应用程序用户界面 (UI) 的常用框架.它是一款用于运行端到端功能测试的超强工具.您可以使用多个编程语言编写测试,并且 Selenium 能够在一个或多个浏览器中执行这些测试. Selenium(以下简称为 Selenium 1)