技术开发 频道

精通 Grails: Grails 与移动 Web

  移动 Web 开发策略

  您已经知道为三种基本设备创建内容都需要什么工具,现在的任务是如何根据需要使用它们。有三种基本的策略可供选择。

  为移动内容创建独立的、专用的网站

  正如前面看到的一样,m 是许多 Web 站点所采用的策略。Google、Yahoo! 以及 CNN,都设置了一个 m 域,它独立于主站点,用于提供移动内容。如果改动域名系统(Domain Name System,DNS)的话,可以创建一个类似 http://mysite.org/mobile 的 URL。您也可以注册一个移动内容专用的 .mobi 域。

  监听用户代理

  每一个 Web 浏览器在请求数据时都向服务器表明身份。可以利用这个信息来提供为设备定制的内容。(http://twitter.com 使用的就是这种技术)。

  访问 http://davisworld.org/echo.gsp。清单 15 中的页面只用了个简单的循环,就回应了 HTTP 的请求:

  清单 15. 显示 Request Header

<h2>Request Headers</h2>
<table border="1">
  
<tr>
    
<th>Header</th>
    
<th>Value</th>
  
</tr>
  
  
<g:each in="${request.headerNames}" var="${name}">
    
<tr>
      
<td>${name}</td>
      
<td>${request.getHeader(name)}</td>
    
</tr>
  
</g:each>
</table>

  正如您在图 11 中所看到的,当我打开 http://davisworld.org/echo.gsp 时,Firefox 浏览器提供了足够身份提示:

  图 11. 查看 HTTP header  

  根据图 11 中展示的 user-agent 字符串,就可以断定请求程序通过 Intel CPU 运行 Mac 系统。对于 OS(10.5)、HTML 呈现引擎(Gecko)、和真实浏览器(Firefox)的版本,您已经很熟悉了。清单 17 展示了其他常见的用户-代理字符串:

  清单 17. 常见的用户-代理字符串

BlackBerry7520/4.0.0 Profile/MIDP-2.0 Configuration/CLDC-1.1
    UP.Browser
/5.0.3.3 UP.Link/5.1.2.12

Mozilla
/5.0 (iPhone; U; CPU like Mac OS X; en)
    AppleWebKit
/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3

Mozilla
/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)

  通过捕获 request.getHeader("user-agent") 值为请求浏览器提供适当的内容。

  发回浏览器接受的内容

  第三种策略就是满足浏览器的所有请求。每一个请求都会包含一个 accept 值和一个 user-agent 值。Firefox 返回的 accept 值如下:

text/html,application/xhtml+xml,application/xml;

  这告诉服务器 Firefox 偏好 text/html。如果服务器不包含 text/html 数据,那么它可以发送 application/xhtml+xml。如果两者都没有的话,服务器会在列表中逐个查找,直到找到一个可以返回的 MIME 类型。

  WAP 1.x 浏览器需要 text/vnd.wap.wml,更现代的手机会需要 application/vnd.wap.xhtml+xml。只要多加注意,聪明的开发者便可以返回适当的数据。

  当然,这三种策略并不是相互排斥的。您可以全部选用,确保您的网站已经准备好为全球 33 亿的手机用户提供服务了。

0
相关文章