`
buerkai
  • 浏览: 169609 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

使用J2me网络编程访问网页内容

阅读更多
一、请求与响应的格式我们非常需要关注请求与响应格式的一至性,比如:客户端使用:HttpConnection c = (HttpConnection)Connector.open(urlStr);c.setRequestProperty("Content-Type", "application/xhtml+xml")表明自己识别的是:application/xhtml+xml类型的格式,服务器在传输时请按照相应格式给我组织响应的byte[]流;那么服务器最好按照客户端要求的格式来响应;这叫配套,如果请求和响应不配套就会出现很多怪问题,比如丢字,乱码等;至于配套的格式都有多少种,在网络上可以查到,我就不一一列举了,下面是一个关于Content-Type说明的地址:http://cocp.blogdriver.com/cocp/1221254.html
这个地址不知道会开放多久,如果访问不到,就在Google上查 ”Content-Type” 即可二、使用网关代理如果我们只能通过中国移动的cmwap接入点访问网站页面(cmwap接入点也是移动梦网的网关)或者我们要访问位于移动梦网内的页面,那么我们就必须指定用于访问这些页面的代码网关:10.0.0.172:80下面的例子表明了如何使用中国移动的代理网关;例一:通过URL拆分的方法使用代理网关Boolean UseAgent=true;if (!UseAgent) {c = (HttpConnection) Connector.open("http://" + “www.sina.com” + “/webui/index.html”, Connector.READ_WRITE, true);} else {c = (HttpConnection) Connector.open("http://10.0.0.172:80/" + “/webui/index.html”, Connector.READ, true);c.setRequestProperty("X-Online-Host", “www.sina.com”);}之所以这样来写url,是为了方便大家看清楚在使用代理网关时如何进行url的拆分;例二:不拆分URL,直接使用代理网关Boolean UseAgent=true;if (!UseAgent) {c=(HttpConnection)Connector.open(urlStr);} else {    c=(HttpConnection)Connector.open("http://10.0.0.172:80/"+urlStr);    c.setRequestProperty("X-Online-Host", urlStr);    c.setRequestProperty("Accept","*/*");}那两种方式有何区别?例一的方式是标准的写法,但是用这种方法访问移动梦网内的网页会有问题:无法得到正确的网页;这时候就要用第二种方法了。第一种方法能做的事情,第二种方法似乎都能做到,至少我还没有遇见过反例。至于这是为什么?我也不知道,知道的大仙如果感兴趣请回贴说明一下吧,小神在此先谢过。关于cmnet与cmwap,读者可以在google上查”活猴工作室”,这哥们是CTO,他的blog上有一些非常不错的文章;三、读取服务器响应的内容:我们通常用以下几种方式读取服务器端响应的内容:例一:按指定编码逐字符读取int ch=0;StringBuffer sb = new StringBuffer();InputStreamReader isr = new InputStreamReader(dis,"utf-8");try{while ((ch=isr.read())!=-1){        System.out.print((char)ch);        sb.append((char)ch);    }}catch(Exception ex){    sb.append("\r\n");    sb.append(ex.toString());}isr.close();这种方法的优点是:它是在读取文本内容时最方便的一种作法,不过这种作法有一个缺陷,如果服务器端使用asp.net,用Response.write(“”)的方法向客户端返回的话,isr.read()永远读不到-1,.net和java在数值的字节流转换上划的不是一套拳。这时候就只能依靠使用最外层的那个try{}catch()来捕获错误的方法来终止读取,因此,这种方法看起来似乎总有点傻乎乎的感觉;例二:先原样读取字节流,然后再对字节流进行转码;ByteArrayOutputStream baout = new ByteArrayOutputStream(1024);byte[] bytes = new byte[128];int size = 0;int TotalSize = 0;requestByte = null;while ((size = is.read(bytes)) != -1) {    baout.write(bytes, 0, size);    TotalSize += size;}bytes = null;responseByte = baout.toByteArray();String responseStr = new String(responseByte,"UTF-8");注:responseStr即为所求;这种方法忠实的读取出所有返回到客户端的字节流,并将这些字节流记录下来;不过,要想这种方法读取到正确的字节流,我们需要留意在第一节中所提到的内容:“请求与响应的格式”这种方法的好处是以不变应万变,万变不离其宗,管它服务器发来什么,不过都是一大堆的byte[]流而已,就像黑客帝国中的尼奥,他看破了这层byte[]流,想干嘛就干嘛。四、编码常用的汉字编码有:GB2313(GB2313-80)、GBK、UTF8、BIG5码,BIG5编码在港台用;常用的其它编码有:ASC-II、ISO-8859-1、Unicode为了获得网页的内容,当然要指定正确的编码了,不同的网页使用的编码会不同,所以使用相同的程序在访问不同的网页时会表现不同,这时千万别”大惊失色”,其实只是小问题;说到这里,我要说个很苦恼的事情:我在google上很难查到各种国家标准,可能是这些链接很少被人关注到,一直希望能找到这样一个网站,上面有各种国家发布的标准、法律文件等可以被广大人民群众方便的查询到。不但齐全完整,而且还能与时具进,不知哪位大仙能告诉我几个这种网站的网址?小神在此先谢过!下面这个网站是中国国家教育部网站下面收藏的GB2312-80字符集;用google翻出来的,如果想从教育部网站首页上找到它反而有点难度。另外,这个页面不知道能存放在那里多久。http://www.moe.edu.cn/edoas/website18/info16417.htm

分享到:
评论
2 楼 buerkai 2012-07-05  
怎么不能解决啊?现在很多手机都可以直连了,使用代理的话还会引入其他的问题。不过使用直连会涉及流量的问题。
1 楼 heweichao3307 2012-07-05  
你说的这种方式根本就不能解决实际问题,估计这些你都想当然或者就是从哪里抄袭来的!

相关推荐

    J2ME GPRS 网络编程

    **J2ME GPRS网络编程详解** Java 2 Micro Edition(J2ME)是Java平台的一个...J2ME网络编程文档(如提供的“J2ME网络编程.doc”)会进一步深入讲解这些概念,包括代码示例和最佳实践,帮助开发者快速掌握这一技术。

    J2ME里面的线程和网络

    在Java Micro Edition (J2ME)中,线程和网络编程是两个至关重要的概念,尤其对于开发移动设备上的应用程序来说。J2ME为资源有限的设备提供了轻量级的Java平台,因此理解和掌握这两个主题是编写高效、响应式以及能够...

    精通J2ME无线编程.pdf

    **精通J2ME无线编程** 是一本专注于Java Micro Edition(J2ME)技术在无线设备上应用开发的教程。J2ME是Java平台的一个子集,设计用于资源有限的嵌入式设备,如移动电话、PDA和智能家电。本教程适合初学者,通过深入...

    J2ME无线设备编程

    J2ME应用可以使用MIDP的HttpConnection类进行网络通信,实现网页浏览、数据下载等功能。此外,J2ME还可以通过JSR 82(蓝牙API)和JSR 180(WAP 2.0 API)实现无线通信。 ### 7. 文件系统和数据持久化 MIDP提供...

    tengge手机端j2me编程教程.doc

    【J2ME编程基础】 J2ME,全称Java 2 Micro ...以上内容涵盖了J2ME编程的基础知识,从工具准备、界面设计到游戏开发、网络和本地功能的利用,以及数据存储和基本类的使用。这些知识构成了J2ME应用程序开发的核心框架。

    j2me版wap浏览器源码

    J2ME网络编程** J2ME提供了javax.microedition.io.Connection接口来处理网络连接,包括HttpConnection和StreamConnection等子类。在WAP浏览器中,开发者会使用HttpConnection发送HTTP请求到WAP服务器,并接收...

    J2ME从入门到精通

    四、J2ME网络编程 1. **HTTP通信**: MIDP提供HttpConnection类,可以发送HTTP请求,实现网页访问或数据交换。 2. **TCP/UDP连接**: 通过SocketConnection类,可以建立TCP或UDP连接,进行双向数据传输。 五、数据...

    java-compcation.rar_J2ME 源码_j2me_手机移动通信_移动通信

    在这个例子中,"Java移动通信程序设计"可能包括使用J2ME的MIDP API来实现基本的通信功能,如发送和接收短信(SMS)、拨打电话、或者访问网络数据。可能还涵盖了如何使用J2ME的网络类,如`HttpConnection`和`...

    J2ME实现范例

    4. **网络编程**: J2ME的Connector类提供了对HTTP、WAP和其他协议的支持,使得在移动设备上进行网络数据交换成为可能。你可以使用HttpConnection和UrlConnection进行HTTP请求,获取网页信息或者发送POST数据。 5....

    J2ME程序开发全方位基础讲解汇总

    8. **网络编程** MIDP提供了HttpConnection类进行HTTP通信,可以实现网页浏览、数据下载等功能。此外,还有SocketConnection支持TCP/IP连接,适用于低级网络通信。 9. **设备特性** J2ME允许开发者访问设备特定的...

    用J2ME与ASP建立数据库连接.rar_http in j2me_j2me_j2me 3d_j2me asp

    总的来说,这个主题涵盖了移动开发中的网络通信和服务器交互,对于理解J2ME应用如何与服务器端动态脚本协同工作,以及如何实现移动设备的数据库访问具有重要意义。开发者需要熟悉J2ME的HttpConnection API,以及ASP...

    第十章无线网络开发--j2me开发.ppt

    GCF是一套专为J2ME设计的I/O和网络互联API,它简化了在移动设备上进行网络编程的复杂性。 - **GCF组成**:GCF包括`Connector`工厂类、`ConnectionNotFoundException`异常以及一系列接口,如`Connection`、`...

    J2ME-API.rar_j2me

    5. **网络编程**:通过HttpConnection类,开发者可以实现HTTP协议的网络通信,进行网页访问或数据交换。InputStream和OutputStream则用于处理网络数据的读写。 6. **数据存储**:RecordStore是J2ME中用来持久化数据...

    《J2ME嵌入式开发案例精解》-源码.zip

    3. **网络通信**:利用J2ME的HttpConnection和DataInputStream/OutputStream实现HTTP通信,进行网页访问或数据交换。 4. **数据存储**:探讨记录表管理器(Record Management System, RMS)的使用,这是J2ME中本地...

    《J2me开发大全》随书源代码

    5. **网络编程**:J2ME提供了基本的HTTP和TCP/IP支持,使得MIDlets可以连接到互联网,进行数据交换。例如,通过HttpConnection和StreamConnection接口,开发者可以实现网页浏览、数据下载和上传等功能。 6. **文件...

    j2me的wap浏览器

    总的来说,J2ME WAP浏览器的开发涉及到网络编程、XML解析、UI设计以及安全性等多个方面,是J2ME技术在移动设备上应用的一个典型实例。理解并掌握这些知识点对于构建自己的移动设备应用或扩展已有应用具有重要意义。

    J2ME习题答案(请和J2ME课件一起下载 才有效看懂)

    J2ME的习题通常涵盖以上各个领域,包括但不限于:J2ME的基本概念、MIDP与CLDC的区别、J2ME应用的结构、用户界面组件的使用、网络编程的实际操作以及RMS的数据存储方式。答案将详细解释每个问题的背景、关键概念和...

    IBM官方J2ME开发中文教程

    在学习过程中,读者可以通过解压后的文件`codefans.net`访问教程内容,这个文件很可能是教程的网页集合,需要在浏览器中打开查看。同时,配合实际的编程练习和IBM的无线工具包,将理论知识与实践结合,将更有利于...

    j2me相关知识03

    在J2ME中进行网络编程,我们通常会用到HttpConnection和SocketConnection。HttpConnection支持HTTP协议,方便获取网页内容和发送HTTP请求。SocketConnection则提供了低级别的TCP/IP通信,适用于需要建立持久连接或...

Global site tag (gtag.js) - Google Analytics