`
gxhslcww
  • 浏览: 78811 次
  • 性别: Icon_minigender_1
  • 来自: 南通
社区版块
存档分类
最新评论

J2ME应用设计指南——联网重定向

阅读更多

HTTP 1.1协议允许Web服务器临时改变资源的位置,也就是说你访问的资源在另外一个地址。这时候服务器返回的响应代码是302,而新的地址存放在Header中,Header的名称是Location。正常情况下,客户端浏览器应该指向临时的访问地址。但是,移动终端设备差距很大,在处理302返回码的时候,设备之间的行为差异很大。

下面的代码可以用来处理重定向问题,但是在部分设备中会导致应用程序出错。

Connection c = (HttpConnection) Connector.open(uri);

  int status = c.getResponseCode(); 
String new_uri = c.getHeaderField("Location"); // new_uri is null on some devices
if (status == 302) {
  c.close();
  c = (HttpConnection) Connector.open(new_uri); // Breaks here
}
 
由于重定向是HTTP 1.1的特性,那么所有1.1兼容的设备都需要考虑这个问题。下面介绍如何解决这个问题。

事实证明在某些设备上,底层的网络协议栈处理重定向的问题,302响应码告诉应用程序内部的处理流程。应用程序应该等待直到响应码等于302。但是有些设备不能正确地从响应中解析出Location字段,这样Location字段的内容是null,响应码存储在了响应的内容之中。有经验的工程师会采用下面的解决办法。

1)解析响应,在Location或者响应的内容中查找新地址,如果找到的话关闭以前的连接,转向新的连接。

2)如果什么没有找到的话,那么等待10-1000ms,直到状态码从302转变为200。马上处理响应,当作没有错误发生。

下面的代码能够很好的解决重定向的问题,供大家参考和完善。

Connection c = (HttpConnection) Connector.open(uri); 
int status = c.getResponseCode(); 
String redirection = httpConnection.getHeaderField("Location");
if (status == HttpConnection.HTTP_TEMP_REDIRECT) {
  if (redirection != null) {
    // This the standard HTTP 1.1 behaviour, move on to the redirection uri (basically restarting again).
  } else {
    // Parse the content of the HTTP response, if any.
    // Lookup for a "Location" header, if found, set value to the redirection variable
    if (redirection != null) {
    // Since location was found, fall back to the standard behaviour.
    } else {
      long begin_wait = System.currentTimeMillis();
      while (System.currentTimeMillis() - begin_wait < 1000 || response != 200) {
        sleep(100);
        response = httpConnection.getResponseCode();
      };
      if (response == 200) {
        // Once again we're back on tracks, continue processing as if no error has ever happen 
      } else {
        // Here we're really hopeless. Either the server did provided a valid redirection uri, 
        // or the device did not preserved it. The best option is probably to fail by throwing an exception.
      };
    };
  };
} else // Handle other error codes here
};

// Handle success here (status == 200)

您还可以了解一下Http协议的细节,http://www.ietf.org/rfc/rfc2616.txt原文地址

分享到:
评论

相关推荐

    java基于J2ME的游戏开发——贪吃蛇论文.docx

    "java基于J2ME的游戏开发——贪吃蛇论文" J2ME(Java 2 Micro Edition)は、近年来随着各种不同设备、尤其是移动通信设备的飞速发展而诞生的新的开发技术。J2ME 是Java平台的微型版,专门为资源有限的设备设计,...

    基于j2me的手机游戏——superTank

    《基于J2ME的手机游戏——SuperTank》是一款利用Java ME(J2ME)平台开发的经典坦克对战游戏。J2ME,全称Java 2 Micro Edition,是Java技术的一个分支,专门用于嵌入式设备和移动设备上的应用程序开发,如早期的智能...

    使用j2me编程的游戏——俄罗斯方块

    《使用J2ME编程的游戏——俄罗斯方块》 在移动设备和嵌入式系统中,J2ME(Java 2 Micro Edition)是一个广泛使用的平台,用于开发轻量级的应用程序,尤其是游戏。在这个主题中,我们将深入探讨如何利用J2ME来编写...

    J2me手机游戏源码——供初学者学习——数独

    1. **用户界面(UI)设计**:J2ME使用MIDP(Mobile Information Device Profile)作为其UI框架,通过Canvas类创建自定义图形界面。源码中的界面设计展示了如何绘制游戏面板,以及如何处理用户的触摸或按键输入。 2....

    基于J2ME的主要技术——以“贪吃蛇”游戏为例

    ### 基于J2ME的主要技术——以“贪吃蛇”游戏为例 #### 引言 随着通信技术的快速发展,移动通信技术的规模不断扩大,同时也带动了手机性能的显著提升。这一变化促进了手机休闲娱乐市场的蓬勃发展。在众多手机应用...

    j2me源码——蓝牙联网实现五子棋

    《J2ME源码——蓝牙联网实现五子棋详解》 在移动开发领域,Java 2 Micro Edition(J2ME)是一种广泛应用于嵌入式设备和移动设备的Java平台,尤其在早期智能手机和平板电脑中占据重要地位。本文将深入探讨一个基于...

    J2ME程序设计——手机游戏与应用程序PDF(谢晓勇,黄奇).rar

    《J2ME程序设计——手机游戏与应用程序》是由谢晓勇和黄奇合著的一本专业书籍,主要探讨了如何利用Java 2 Micro Edition (J2ME) 平台进行手机游戏和应用程序的开发。J2ME是Java平台的一个子集,特别针对嵌入式设备和...

    j2me Inside J2VM——源代碼

    《J2ME Inside J2VM——源代码》是关于Java Micro Edition(J2ME)在Java Virtual Machine(J2VM)内部工作原理的深入解析,它涵盖了J2ME的源代码层面,帮助开发者理解J2ME应用程序如何在有限资源的设备上运行。...

    j2me手机游戏——扫雷

    《j2me手机游戏——扫雷》是一款基于Java 2 Micro Edition (J2ME) 平台开发的经典游戏,旨在为手机用户提供与Windows系统扫雷相似的娱乐体验。这款扫雷游戏具有高度的适应性,能够自动适应不同屏幕尺寸,同时配备了...

    J2ME通用进度条,解决联网、线程操作等候问题

    在Java 2 Micro Edition (J2ME)平台上开发应用程序时,常常会遇到用户需要等待联网操作或线程执行完毕的情况,比如数据下载、文件上传等。这种情况下,为用户提供一个可视化的进度条能够显著提高用户体验,让用户...

    J2ME应用程序性能优化

    J2ME应用程序性能优化J2ME应用程序性能优化

    j2me应用小实例j2me_pro

    **J2ME应用小实例——深入理解J2ME_pro** J2ME,全称为Java 2 Micro Edition,是Java平台的一个子集,主要用于嵌入式系统和移动设备,如手机、PDA等。J2ME_pro是针对这个平台的一系列实践教程,旨在帮助开发者深入...

    J2ME应用软件测试指南.pdf

    J2ME应用软件测试指南.pdf

    基于Eclipse环境的J2ME应用程序开发

    总结,基于Eclipse的J2ME应用程序开发涉及多个环节,从环境配置、项目创建、代码编写、UI设计到测试和发布。每个步骤都需要细致操作和理解,只有这样,才能充分利用Eclipse的强大功能,开发出高效、稳定的J2ME应用。...

    j2me手机游戏——俄罗斯方块!

    根据给定的信息,我们可以分析并总结出关于J2ME(Java 2 Micro Edition)手机游戏——俄罗斯方块的重要知识点。 ### J2ME简介 J2ME(Java 2 Platform, Micro Edition)是Sun Microsystems为嵌入式设备和移动设备...

    基于Eclipse环境的J2ME应用程序开发实例源码

    【基于Eclipse环境的J2ME应用程序开发实例源码】是一个关于使用Eclipse集成开发环境进行J2ME(Java 2 Micro Edition)应用编程的教学资源。J2ME是Java平台的一个子集,主要用于嵌入式设备和移动设备,如手机、智能...

    J2ME应用程序开发指南

    【J2ME应用程序开发指南】 Java 2 Micro Edition (J2ME) 是一种针对嵌入式设备和移动设备的应用程序开发平台,它允许开发者利用Java编程语言创建可以在资源有限的设备上运行的应用程序。J2ME的核心是Java虚拟机...

    J2ME学习笔记 入门 学习经验

    j2me学习笔记【7】——复选框的应用 j2me学习笔记【8】——TextField的使用实例 j2me学习笔记【9】——List中复选框的使用实例 j2me学习笔记【10】——Ticker类实现在屏幕上横向滚动文本 j2me学习笔记【11】——捕获...

    大学本科毕业设计 J2ME手机游戏的实现——五子棋

    【标题】:“大学本科毕业设计 J2ME手机游戏的实现——五子棋”是指通过Java Micro Edition(J2ME)技术在移动设备上开发的一款五子棋游戏。J2ME是Java平台的一个分支,主要用于嵌入式设备和移动设备,如早期的智能...

    J2ME应用教程》图书详细资料信息 - China-Pub.zip

    《J2ME应用教程》是一本专注于Java Micro Edition(J2ME)技术的图书,旨在帮助读者深入理解和掌握J2ME平台的应用开发。J2ME是Java技术在嵌入式设备、移动设备如手机和掌上电脑上的一个重要分支,主要用于开发小型、...

Global site tag (gtag.js) - Google Analytics