自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

BlackBerry開(kāi)發(fā)中應(yīng)用程序之MDS服務(wù)參考

移動(dòng)開(kāi)發(fā)
BlackBerry開(kāi)發(fā)有很多值得學(xué)習(xí)的地方,本文向大家簡(jiǎn)單介紹一下BlackBerry開(kāi)發(fā)中應(yīng)用程序之MDS服務(wù)參考,希望本文介紹對(duì)你有所幫助。

本文和大家重點(diǎn)學(xué)習(xí)一下BlackBerry開(kāi)發(fā)中應(yīng)用程序之MDS服務(wù)參考,主要包括HTTP請(qǐng)求,HTTP請(qǐng)求變量和HTTP響應(yīng)等內(nèi)容,希望本文的介紹能讓你有所收獲。

BlackBerry開(kāi)發(fā)中應(yīng)用程序之MDS服務(wù)參考

HTTP請(qǐng)求[1]

一個(gè)客戶端建立一個(gè)連接,并且發(fā)送一個(gè)HTTP請(qǐng)求消息到服務(wù)器.服務(wù)器然后發(fā)送一個(gè)響應(yīng)消息,這個(gè)消息通常包含了請(qǐng)求的資源.

  1. <method><resource_path><version> 
  2.  
  3. Header1:value1  
  4.  
  5. Header2:value2  
  6.  
  7. Header3:value3  
  8.  
  9. <optionalmessage> 
  10.  

 


HTTP請(qǐng)求變量

描述

method
方法名,指定了一個(gè)動(dòng)作,例如GET,HEAD或POST.常用的方法是GET,它從服務(wù)器請(qǐng)求一個(gè)資源.

resource_path
指向請(qǐng)求資源的路徑,它是URL中的一部分,在主機(jī)名后面出現(xiàn).它也稱(chēng)為請(qǐng)求URL(RequestURL).

version
你正在運(yùn)行的HTTP版本,標(biāo)記為”HTTP/x.x”.BES支持1.0和1.1版本.

Header
提供了關(guān)于請(qǐng)求的或在消息體里發(fā)送的對(duì)象的信息.

optionalmessage
HTTP消息可以包含數(shù)據(jù).在一個(gè)請(qǐng)求里,它是發(fā)送到服務(wù)器的用戶類(lèi)型的數(shù)據(jù),或上傳的文件.當(dāng)一個(gè)對(duì)象伴隨著此消息時(shí),請(qǐng)求通常也包含定義它屬性的消息頭.

HTTP響應(yīng)

在HTTP請(qǐng)求消息的接收之上,服務(wù)器發(fā)送一個(gè)響應(yīng)消息,它通常包含了請(qǐng)求的資源.

  1. <HTTPversion><status_code><reason> 
  2.  
  3. Header1:value1  
  4.  
  5. Header2:value2  
  6.  
  7. Header3:value3  
  8.  
  9. <message> 
  10.  

 


HTTP響應(yīng)變量

描述

HTTP_version
正在運(yùn)行的HTTP版本,標(biāo)記為”HTTP/x.x”.BES支持1.0和1.1版本.

status_code
狀態(tài)碼的數(shù)值,它反映了客戶端提出的請(qǐng)求的結(jié)果。例如,200(OK)說(shuō)明了傳輸成功,404(NotFound)說(shuō)明了請(qǐng)求的URL沒(méi)有找到。

reason
reason是和狀態(tài)碼相關(guān)的文本消息。

Header
消息頭提供了響應(yīng)的信息,也提供了消息體中正在發(fā)送的對(duì)象的信息。

message
HTTP消息必須包含數(shù)據(jù)。在一個(gè)響應(yīng)消息里,它提供了客戶端請(qǐng)求的的內(nèi)容。此響應(yīng)也包含了定義它的屬性的消息頭。

注:應(yīng)用程序應(yīng)該檢查HTTP響應(yīng)消息的狀態(tài)碼。任何不是200(OK)的狀態(tài)碼都說(shuō)明當(dāng)建立HTTP連接時(shí)發(fā)生了一個(gè)錯(cuò)誤。#p#


Push請(qǐng)求響應(yīng)狀態(tài)碼

為push請(qǐng)求連接服務(wù),BlackBerryMDS返回2種響應(yīng)碼:

lPAP(PushAccessProtocal)響應(yīng)碼。

lRIMPush響應(yīng)碼。

注:訪問(wèn)[url]www.wapforum.org[/url]獲得更多關(guān)于PAP響應(yīng)碼的信息。

RIMPush請(qǐng)求響應(yīng)碼
RIMPush請(qǐng)求響應(yīng)碼
描述
解釋

200
OK
請(qǐng)求成功完成。

400
任何其他的錯(cuò)誤。


403
訪問(wèn)控制錯(cuò)誤,或者未知的郵件地址或特定的BlackBerryPIN。
服務(wù)器接收了請(qǐng)求,但是不能響應(yīng)。

503
服務(wù)器忙,服務(wù)不可用。
當(dāng)前,服務(wù)器不能管理請(qǐng)求,因?yàn)闀簳r(shí)的負(fù)載或服務(wù)器正在維護(hù)。

HTTPS支持
如果你的應(yīng)用程序通過(guò)Internet訪問(wèn)服務(wù)器,為了提過(guò)其他的驗(yàn)證和安全,在TLS上建立一個(gè)安全的HTTP(HTTPS)連接。


HTTPS認(rèn)證(Certificate)管理

當(dāng)BlackBerry設(shè)備以代理模式請(qǐng)求一個(gè)HTTPS連接時(shí),BlackBerryMDS服務(wù)為BlackBerry設(shè)備建立一個(gè)SSL連接。系統(tǒng)管理員配置MDS服務(wù),要么允許連接到未信任的服務(wù)器,要么是限制訪問(wèn)信任的服務(wù)器,這個(gè)配置僅適用代理模式下的連接。在end-to-end模式里,BlackBerry設(shè)備建立一個(gè)SSL連接。

在BlackBerry管理器里,系統(tǒng)管理員編輯MDS服務(wù)屬性,并且設(shè)置TLS和HTTP選項(xiàng),為獲得更多信息,參看BES管理指南。

注:在MDS服務(wù)模擬器里,通過(guò)設(shè)置rimpublic.property文件來(lái)允許或拒絕訪問(wèn)未信任的服務(wù)器。設(shè)置application.handler.https.allowUntrustedServer參數(shù)為true或false。參看177頁(yè)的“配置BlackBerryMDS模擬器”獲得更多信息。

如果MDS服務(wù)包含認(rèn)證,MDS服務(wù)將信任一個(gè)服務(wù)器。

使用keytool安裝一個(gè)認(rèn)證

1.保存認(rèn)證。

2.將認(rèn)證文件拷貝到MDS服務(wù)所在計(jì)算機(jī)上的C:\Java\j2re1.4.2\lib\security文件夾。

3.為了將認(rèn)證導(dǎo)入到鍵存儲(chǔ)里,請(qǐng)使用keytool,它可以在JREbin文件夾下找到,例如C:\Java\j2re1.4.2\bin.例如,輸入:

keytool-import-file-keystorecacerts

訪問(wèn)[url]http://java.sun.com/j2se/1.3/docs/tooldocs/win32/keytool.html[/url]獲得更多關(guān)于keytool的信息。


編碼轉(zhuǎn)化器

BlackBerryMDS支持插件的Java應(yīng)用程序,稱(chēng)為編碼轉(zhuǎn)化器,它處理BlackBerry設(shè)備發(fā)送和接收的數(shù)據(jù)。

MDS服務(wù)提供下列缺省的編碼轉(zhuǎn)化:

編碼轉(zhuǎn)化名
描述

WML>WMLC
將.wml(WirelessMarkupLanuage)轉(zhuǎn)化為一個(gè)壓縮的格式。

WMLScript>WMLScriptC
將MIDlet應(yīng)用程序?yàn)锽lackBerry格式。

JAD>COD:XML>WBXML
將xml文件轉(zhuǎn)化為下面的WAP二進(jìn)制XML(.wbxml)MIME類(lèi)型:application/vnd.wap.wbxml..

SVG>PME
將可svg(ScalableVectorGraphics)轉(zhuǎn)化為BlackBerry設(shè)備支持的pme(PlazmicMediaEngine)二進(jìn)制格式.

圖像編碼轉(zhuǎn)化
將下列圖像的文件類(lèi)型轉(zhuǎn)化為png文件:

Jpeg
Gif
Tiff
Pgm
Ppm
pnm:包含ASCII和二進(jìn)制pbm,pgm和ppm文件
ico
wbmp
pbm
wbmp
bmp

注:圖像編碼轉(zhuǎn)化器將先前的圖像格式轉(zhuǎn)化為下面的.PNGMIME類(lèi)型:image/vnd.rim.png.

你也可以編寫(xiě)自己的編碼轉(zhuǎn)化器完成客戶化數(shù)據(jù)的處理.例如,如果你的應(yīng)用程序正在和服務(wù)器交換數(shù)據(jù),而服務(wù)器不是為BlackBerry設(shè)備設(shè)計(jì)的,并且發(fā)送到服務(wù)器端的數(shù)據(jù)對(duì)BlackBerry設(shè)備來(lái)說(shuō)沒(méi)有合適的格式.那么你可能編寫(xiě)一個(gè)編碼轉(zhuǎn)化器.

一個(gè)編碼器可能改變數(shù)據(jù)格式或刪除冗余信息來(lái)降低網(wǎng)絡(luò)流量,并且支持BlackBerry設(shè)備上的簡(jiǎn)單應(yīng)用程序.例如,你可以編寫(xiě)一個(gè)編碼轉(zhuǎn)化器將HTML內(nèi)容轉(zhuǎn)化為WML。.#p#


數(shù)據(jù)轉(zhuǎn)化處理

如果你專(zhuān)門(mén)編寫(xiě)一個(gè)服務(wù)器端的應(yīng)用程序支持一個(gè)BlackBerry設(shè)備上客戶應(yīng)用程序,編碼轉(zhuǎn)化器就不需要了.你可以設(shè)計(jì)一個(gè)服務(wù)器應(yīng)用程序一合適的格式輸出數(shù)據(jù).

在發(fā)送數(shù)據(jù)到BES之前,你也可以將數(shù)據(jù)處理作為一單獨(dú)的服務(wù)器端進(jìn)程的一部分.

編碼轉(zhuǎn)化器API
主要的編碼轉(zhuǎn)化器類(lèi)
描述

HttpContentTranscoder
此類(lèi)提供方法來(lái)控制HTTP請(qǐng)求和響應(yīng)的內(nèi)容和屬性.

HttpContentTranscoderException
本異常的拋出說(shuō)明編碼轉(zhuǎn)化工程不成功.BlackBerry設(shè)備將把本異常作為IOException拋出.

HttpHeader
本類(lèi)提供方法對(duì)HTTP請(qǐng)求和響應(yīng)的消息頭進(jìn)行操作.

HttpParameter
本類(lèi)代表了HTTP查詢參數(shù).它提供獲取和設(shè)置參數(shù)名和值.

HttpRequest
本類(lèi)擴(kuò)展了HttpTransmission類(lèi),它代表了一個(gè)包含頭,參數(shù)和內(nèi)容的HTTP請(qǐng)求.

HttpResponse
本類(lèi)擴(kuò)展了HttpTransmission類(lèi),它代表了一個(gè)包含頭,參數(shù)和內(nèi)容的HTTP響應(yīng).

HttpTransmission
本類(lèi)提供獲取和設(shè)置內(nèi)容,頭,以及HTTP請(qǐng)求和響應(yīng)的參數(shù).

參看API參考獲得更多信息.

創(chuàng)建一個(gè)HTTP內(nèi)容編碼轉(zhuǎn)化器

為了創(chuàng)建一個(gè)HTTP內(nèi)容編碼轉(zhuǎn)化器來(lái)全面控制HTTP請(qǐng)求與響應(yīng)內(nèi)容,擴(kuò)展HttpContentTranscoder類(lèi).本編碼轉(zhuǎn)化器也可以修改,增加,或刪除HTTP請(qǐng)求與響應(yīng)屬性.

編碼轉(zhuǎn)化器必須在net.rim.protocal.http.content.tanscoder.包里定義,在這里,是映射文件中使用的編碼轉(zhuǎn)化器的標(biāo)志符.它的類(lèi)名必須是Transcoder.

編碼轉(zhuǎn)化器的位置要么在httpcontenttranscoder文件指定,要么由應(yīng)用程序指定.

處理HTTP內(nèi)容編碼轉(zhuǎn)化器異常

任何由編碼轉(zhuǎn)化器拋出的異常將作為IOException被發(fā)送到應(yīng)用程序.相關(guān)具體的消息也拷貝到IOException中.

注:為代替拋出一個(gè)異常到HTTP連接處理器,一個(gè)編碼轉(zhuǎn)化器也可能發(fā)送一個(gè)HTTP響應(yīng)到一個(gè)應(yīng)用程序,這表明發(fā)生了一個(gè)內(nèi)部的服務(wù)器錯(cuò)誤.


選擇編碼轉(zhuǎn)化器

當(dāng)BlackBerry設(shè)備請(qǐng)求內(nèi)容時(shí),MDS服務(wù)決定客戶端請(qǐng)求的內(nèi)容類(lèi)型和服務(wù)器響應(yīng)的內(nèi)容類(lèi)型的比較是否需要一個(gè)編碼轉(zhuǎn)化器.如果類(lèi)型不一樣,MDS服務(wù)檢查httpcontenttranscoder.property文件來(lái)決定一個(gè)編碼轉(zhuǎn)化器是否可用來(lái)轉(zhuǎn)化內(nèi)容.

BlackBerry設(shè)備發(fā)送的HTTP請(qǐng)求里,x-rim-transcode-content頭指定了MDS優(yōu)化服務(wù)轉(zhuǎn)化內(nèi)容的輸入格式.如果內(nèi)容遇見(jiàn)以下情形,MDS數(shù)據(jù)優(yōu)化服務(wù)將轉(zhuǎn)化內(nèi)容:

l由x-rim-transcode-content頭指定的輸入格式也HTTP請(qǐng)求的Accept頭中指定,此HTTP請(qǐng)求是MDS服務(wù)發(fā)送到服務(wù)器的請(qǐng)求.

lWeb服務(wù)器響應(yīng)一個(gè)內(nèi)容類(lèi)型,或者輸出類(lèi)型,它和BlackBerry設(shè)備接受的類(lèi)型不同.

lhttpcontenttranscoder.property文件包含了一個(gè)編碼轉(zhuǎn)化器,此編碼轉(zhuǎn)化器可以將Web服務(wù)器發(fā)送到MDS服務(wù)的內(nèi)容轉(zhuǎn)化為BlackBerry設(shè)備可接受的類(lèi)型.

為了判斷當(dāng)push內(nèi)容時(shí)一個(gè)編碼轉(zhuǎn)化器是否需要,MDS服務(wù)檢查內(nèi)容類(lèi)型(content-type)和服務(wù)器端應(yīng)用程序的x-rim-transcode-content頭.如果2者相同,MDS數(shù)據(jù)優(yōu)化服務(wù)將頭文件指定的內(nèi)容轉(zhuǎn)為為BlackBerry可以顯示的格式.

httpcontenttranscoder.property文件將輸入的格式轉(zhuǎn)化為一個(gè)給出的編碼轉(zhuǎn)化器.在下面的例子中,httpcontenttranscoder.property文件將.wml輸入格式轉(zhuǎn)化為.wbxml或.wmlc.

content-type:text/vnd.wap.wml

x-rim-transcode-content:text/vnd.wap.wml

你也可以創(chuàng)建定制的編碼轉(zhuǎn)化器來(lái)重新格式化或者轉(zhuǎn)化應(yīng)用程序請(qǐng)求的數(shù)據(jù).例如,有愧樂(lè)意編寫(xiě)一個(gè)編碼轉(zhuǎn)化器將HTML內(nèi)容轉(zhuǎn)為為WML.參看196也的”創(chuàng)建編碼轉(zhuǎn)化器”獲得更多信息.


HTTP請(qǐng)求

MDS服務(wù)使用MIME類(lèi)型決定附加到一個(gè)服務(wù)器HTTP響應(yīng)的內(nèi)容格式是否和BlackBerry設(shè)備請(qǐng)求的內(nèi)容格式相匹配.

MDS服務(wù)測(cè)試一列可用的編碼轉(zhuǎn)化器,并且擴(kuò)展Accept頭.例如,如果一個(gè)請(qǐng)求接受WML的MIME類(lèi)型和一個(gè)編碼轉(zhuǎn)化器存在的HTML-to-WML,將HTML加到Accept頭.參看195頁(yè)的”映射編碼轉(zhuǎn)化器”獲得更多信息.

在HTTP請(qǐng)求里,應(yīng)用程序可以包含2個(gè)頭來(lái)控制它接收的內(nèi)容的類(lèi)型:

lAccept頭

lContent-Transcoder頭.


描述

Accept
在HTTP請(qǐng)求的Accept頭里,應(yīng)用程序列出它從內(nèi)容服務(wù)器接收的MIME類(lèi)型.例如,如果應(yīng)用程序可以接收WML或XML格式的內(nèi)容,它在HTTP請(qǐng)求里發(fā)送如下的消息頭:

Accept:text/wml,text/xml

缺省的,當(dāng)Accept頭列出了不止一個(gè)MIME類(lèi)型,MDS服務(wù)將從左到右分配引用,在這里列出的***個(gè)MIME類(lèi)型假設(shè)為優(yōu)先的.

應(yīng)用程序頁(yè)可以將質(zhì)量因子(Qualityfactor)賦值給MIME類(lèi)型來(lái)表明優(yōu)先權(quán).質(zhì)量因子范圍時(shí)0(***優(yōu)先權(quán))到1(***優(yōu)先權(quán)),例如,下面的頭表明了編譯的WML(WMLC)是優(yōu)先的,但是WML是可接受的.

Accept:text/vnd.wap.wml;q=0.5,application/vnd.wap.wmlc;q=1

Content-Transcoder
Content-Transcoder頭是一個(gè)BlackBerry頭,在內(nèi)容返回到BlackBerry設(shè)備之前,它允許應(yīng)用程序指定一個(gè)應(yīng)用到任何內(nèi)容的特定編碼轉(zhuǎn)化器.使用Content-Transcoder頭覆寫(xiě)MDS服務(wù)運(yùn)用的缺省處理來(lái)選擇一個(gè)編碼轉(zhuǎn)化器.


HTTP響應(yīng)

內(nèi)容服務(wù)器產(chǎn)生一個(gè)包含一個(gè)Content-Type頭的HTTP響應(yīng)..Content-Type頭描述了一個(gè)特定數(shù)據(jù)包的MIME類(lèi)型.例如,當(dāng)內(nèi)容服務(wù)器一HTML格式返回內(nèi)容時(shí),HTTP響應(yīng)包含一個(gè)值為text/html的Content-Type頭.

MDS服務(wù)將應(yīng)用程序的請(qǐng)求和內(nèi)容服務(wù)器的響應(yīng)進(jìn)行比較.下面的部分將描述MDS服務(wù)如何決定什么時(shí)候轉(zhuǎn)化內(nèi)容:

響應(yīng)類(lèi)型
描述

不需要編碼轉(zhuǎn)化
應(yīng)用程序發(fā)送一個(gè)請(qǐng)求獲取WML格式的內(nèi)容.請(qǐng)求包含以下的頭:

Accept:text/vnd.wap.wml

在它的響應(yīng)里,內(nèi)容服務(wù)器發(fā)送以下的頭:

Content-Type:text/vnd.wap.wml

因?yàn)榉?wù)器返回的內(nèi)容類(lèi)型與BlackBerry請(qǐng)求類(lèi)型相符,MDS服務(wù)不需要任何轉(zhuǎn)化.它將內(nèi)容毫無(wú)變化的轉(zhuǎn)發(fā)給BlackBerry設(shè)備.

需要編碼轉(zhuǎn)化
應(yīng)用程序發(fā)動(dòng)一個(gè)請(qǐng)求獲取內(nèi)容.請(qǐng)求包含一下內(nèi)容:

Accept:text/vnd.wap.wml;q=0.5,application/vnd.wap.wmlc;q=1

此消息頭表明應(yīng)用程序接受WML或者編譯的WML格式(WMLC)的內(nèi)容.

在它的響應(yīng)中,內(nèi)容服務(wù)器發(fā)送下面的頭:

Content-Type:text/vnd.wap.wml

因?yàn)榉?wù)器返回的內(nèi)容類(lèi)型與BlackBerry請(qǐng)求類(lèi)型不符,MDS服務(wù)搜索一個(gè)可以將MIME類(lèi)型(WML)轉(zhuǎn)化為優(yōu)先的MIME類(lèi)型(WMLC)的可用編碼轉(zhuǎn)化器.

如果一個(gè)適合的編碼轉(zhuǎn)化器不可用,MDS服務(wù)將WML內(nèi)容毫無(wú)變化的轉(zhuǎn)發(fā)給BlackBerry設(shè)備,因?yàn)槌跏颊?qǐng)求表明BlackBerry設(shè)備應(yīng)用程序接受WML內(nèi)容.

每個(gè)編碼轉(zhuǎn)化器都實(shí)現(xiàn)了一個(gè)方法創(chuàng)建一個(gè)哈希表,此哈希表映射作為來(lái)自內(nèi)容服務(wù)器的輸入,編碼轉(zhuǎn)化器接受的格式,以及作為輸出編碼轉(zhuǎn)化器創(chuàng)建的格式.

在啟動(dòng)時(shí),將自BlackBerry設(shè)備的HTTP請(qǐng)求轉(zhuǎn)發(fā)之前,MDS服務(wù)使用哈希表修改Accept頭域.例如,一個(gè)BlackBerry設(shè)備應(yīng)用程序使用下面的Accept頭發(fā)送一個(gè)HTTP請(qǐng)求:

Accept:application/vnd.wap.wmlc,text/vnd.wap.wmlscriptc

在審查編碼轉(zhuǎn)化器映射表之后,MDS數(shù)據(jù)優(yōu)化服務(wù)加入下面的項(xiàng)到Accept頭里:

application/vnd.wap.wmlscript,text/wml,andtext/vnd.wap.wml

Accept:application/vnd.wap.wmlc,text/vnd.wap.wmlscriptc,application/vnd.wap.wmlscript,text/wml,text/vnd.wap.wml

這個(gè)擴(kuò)展的Accept頭現(xiàn)在列出了所有內(nèi)容服務(wù)器可以提供的MIME類(lèi)型.#p#


映射編碼轉(zhuǎn)化器

httpcontenttranscoder.property文件在你的BlackBerryJDE安裝目錄的MDS\config子目錄下.它指定了MDS數(shù)據(jù)優(yōu)化服務(wù)如何管理應(yīng)用程序與內(nèi)容服務(wù)器之間的多種內(nèi)容類(lèi)型的交換.

下面是httpcontenttranscoder.property的一個(gè)實(shí)例:

text/vnd.wap.wml->application/vnd.wap.wmlc:vnd.wap.wml

text/vnd.wap.wml->application/vnd.wap.wbxml:vnd.wap.wml

text/vnd.wap.wmlscript->application/vnd.wap.wmlscriptc:wmls

text/html->application/vnd.rim.html.filtered:html

text/vnd.wap.wml:vnd.wap.wml

text/vnd.sun.j2me.app-descriptor->application/vnd.rim.cod:vnd.rim.cod

default:pass

每個(gè)入口使用了下面的格式:

[->]:

在這里:

lInputType>是內(nèi)容服務(wù)器可用的MIME類(lèi)型,或者default.

lOutputType>是BlackBerry設(shè)備請(qǐng)求的MIME類(lèi)型.

lAction>是下列值之一:

n編碼轉(zhuǎn)化器包名,如vnd.wap.wml

nPass:在沒(méi)有改變下發(fā)送數(shù)據(jù).

nDiscard:放棄數(shù)據(jù),不發(fā)送它.

下面幾節(jié)解釋在httpcontenttranscoder.property文件里可能的輸入格式:

格式1

當(dāng)服務(wù)器端可用的格式和BlackBerry設(shè)備請(qǐng)求的格式不同時(shí),下面格式的入口指定了MDS完成的動(dòng)作.

InputType->OutputType:TranscoderORRSV

例如,應(yīng)用程序請(qǐng)求text/wml,但是內(nèi)容服務(wù)器只有text/xml.MDS服務(wù)找到下面的MIME類(lèi)型入口:

Text/xml->Text/wml:vnd.wap.wml

根據(jù)本入口,MDS服務(wù)必須使用vnd.wap.wml編碼轉(zhuǎn)化器將XML內(nèi)容轉(zhuǎn)化為WML.

格式2

當(dāng)服務(wù)器發(fā)送一個(gè)給定類(lèi)型的內(nèi)容,不考慮BlackBerry設(shè)備請(qǐng)求的內(nèi)容,,下面格式的入口指定了MDS完成的動(dòng)作.

InputType:TranscoderORRSV

例如,如果服務(wù)器僅有WML內(nèi)容(text/vnd.wap.xml),.MDS服務(wù)找到下面的MIME類(lèi)型入口:

text/vnd.wap.wml:vnd.wap.wml

根據(jù)本入口,MDS服務(wù)必須使用vnd.wap.wml編碼轉(zhuǎn)化器將XML內(nèi)容轉(zhuǎn)化為WML.

缺省的入口

如果MDS服務(wù)不能為一個(gè)特定的MIME類(lèi)型:

default:TranscoderorRSV

找到一個(gè)入口,一個(gè)缺省的入口指定了MDS服務(wù)完成的缺省動(dòng)作.

例如,如果MDS服務(wù)不能為defualt:pass缺省入口的內(nèi)容找到一個(gè)入口,MDS服務(wù)將內(nèi)容毫無(wú)變化的轉(zhuǎn)發(fā)給BlackBerry設(shè)備.#p#


創(chuàng)建編碼轉(zhuǎn)化器

將HTML標(biāo)記和內(nèi)容轉(zhuǎn)化為大寫(xiě)
遵循編碼轉(zhuǎn)化器包層次結(jié)構(gòu)(hierarchy)

在net.rim.protocol.http.content.transcoder. 包里定義HTTP內(nèi)容轉(zhuǎn)化器.所有HTTP內(nèi)容編碼轉(zhuǎn)化器必須在Transcoder包層次結(jié)構(gòu)里定義.

packagenet.rim.protocol.http.content.transcoder.uppercasehtm

擴(kuò)展HTTPContentTranscoder

一個(gè)編碼轉(zhuǎn)化器的類(lèi)名必須為T(mén)ranscoder.它擴(kuò)展了HttpContentTranscoder類(lèi).

在本例中,一個(gè)公共類(lèi)Transcoder定義了HTTP內(nèi)容編碼轉(zhuǎn)化器.

publicclassTranscoderextendsHttpContentTranscoder{…}


定義HTTP頭

為HTTP頭定義常數(shù)以及編碼轉(zhuǎn)化器加到這些頭的字符串.

  1. privatestaticfinalStringCONTENTTYPE_HEADER_NAME="Content-Type";  
  2.  
  3. privatestaticfinalStringCONTENTLENGTH_HEADER_NAME="Content-Length";  
  4.  
  5. privatestaticfinalStringACCEPT_HEADER_NAME="Accept";  
  6.  
  7. //AddthislinetotheAcceptheaderfieldifitexistswhen  
  8.  
  9. //theBlackBerrydeviceissuesanHTTPrequest.  
  10.  
  11. privatestaticfinalStringACCEPTLINE="text/html";  
  12.  
  13. //Thislineidentifiestheoutputcontenttypethatthistranscoderproduces.  
  14.  
  15. privatestaticfinalStringOUTPUT_TYPE="text/UPPERCASEHTML";  
  16.  

 

創(chuàng)建一個(gè)輸入和輸出類(lèi)型的映射

getMapOfOutputToAcceptLine()的實(shí)現(xiàn)創(chuàng)建了一個(gè)編碼轉(zhuǎn)化器輸入和輸出類(lèi)型之間的映射.

隨著啟動(dòng),MDS服務(wù)使用映射修改Accept消息頭域.MDS服務(wù)發(fā)送一個(gè)HTTP請(qǐng)求中修改的頭到一個(gè)HTTP服務(wù)器.

  1. publicHashMapgetMapOfOutputToAcceptLine(){  
  2.  
  3. HashMapmapping=newHashMap();  
  4.  
  5. mapping.put(OUTPUT_TYPE,ACCEPTLINE);  
  6.  
  7. returnmapping;  
  8.  
  9. }  
  10.  

 


設(shè)置連接URL

當(dāng)BlackBerr設(shè)備請(qǐng)求一個(gè)打開(kāi)的HTTP連接時(shí),定義一個(gè)方法設(shè)置連接URL.

publicvoidsetURL(URLnewURL){

url=newURL;

}

定義BlackBerry設(shè)備的請(qǐng)求處理

在MDS服務(wù)將BlackBerry設(shè)備請(qǐng)求轉(zhuǎn)發(fā)到目標(biāo)服務(wù)器之前,transcodeDevice(HttpRequest)的實(shí)現(xiàn)定義了任何對(duì)這些請(qǐng)求的處理.下面的例子不需要處理:

一個(gè)應(yīng)用程序可以使用一個(gè)稱(chēng)為Content-Transcoder的HTTP頭請(qǐng)求一個(gè)指定的編碼轉(zhuǎn)化器,

publicvoidtranscodeDevice(HttpRequestrequest)

throwsHttpContentTranscoderException{

//Implementation.

}

定義BlackBerry設(shè)備的響應(yīng)處理

在MDS服務(wù)將BlackBerry設(shè)備響應(yīng)轉(zhuǎn)發(fā)到目標(biāo)服務(wù)器之前,transcodeDevice(HttpResponse)的實(shí)現(xiàn)定義了任何對(duì)這些響應(yīng)的處理.下面的例子不需要處理:

publicvoidtranscodeDevice(HttpResponseresponse)

throwsHttpContentTranscoderException{

//Implementation.

}

定義服務(wù)器的請(qǐng)求處理

在MDS服務(wù)將它轉(zhuǎn)發(fā)到BlackBerry設(shè)備之前,transcodeServer(HttpRequest)的實(shí)現(xiàn)定義了任何對(duì)內(nèi)容服務(wù)器請(qǐng)求的處理需求.

  1. publicvoidtranscodeServer(HttpRequestrequest)  
  2.  
  3. throwsHttpContentTranscoderException{  
  4.  
  5. try{  
  6.  
  7. //Retrievetherequestcontent,which,inthiscase,isinHTML.  
  8.  
  9. byte[]requestrequestContent=request.getContent();  
  10.  
  11. if(requestContent!=null){  
  12.  
  13. //ConvertthecontenttoStringobject.  
  14.  
  15. StringrequestContentAsString=new 
  16.  
  17. String(requestContent).toUpperCase();  
  18.  
  19. //ConverttherequestContentAsStringtobytesagain.  
  20.  
  21. requestContent=requestContentAsString.getBytes();  
  22.  
  23. }  
  24.  
  25. else{  
  26.  
  27. //SendanHTMLmessagetoindicatethattheserver  
  28.  
  29. //isnotrespondingwithappropriatecontent.  
  30.  
  31. StringBuffersb=newStringBuffer();  
  32.  
  33. sb.append("<HTML>\n");  
  34.  
  35. sb.append("<HEAD>\n");  
  36.  
  37. sb.append("<TITLE>UPPERCASEHTMLTRANSCODERtitle>\n");  
  38.  
  39. sb.append("HEAD>\n");  
  40.  
  41. sb.append("<BODY>\n");  
  42.  
  43. sb.append("SERVERISNOTPUSHINGAPPROPRIATECONTENT\n");  
  44.  
  45. sb.append("BODY\n");  
  46.  
  47. sb.append("HTML>\n");  
  48.  
  49. requestContent=sb.toString().getBytes();  
  50.  
  51. }  
  52.  
  53. request.setContent(requestContent);  
  54.  
  55. //UpdatetheContent-Length  
  56.  
  57. HttpHeadercontentLengthHeader=  
  58.  
  59. request.getHeader(CONTENTLENGTH_HEADER_NAME);  
  60.  
  61. if(contentLengthHeader!=null){  
  62.  
  63. contentLengthHeader.setValue(""+requestContent.length);  
  64. }  
  65.  
  66. else{  
  67.  
  68. //TheserverdidnotsendtheContent-Length.  
  69.  
  70. //Noupdateisneeded.  
  71.  
  72. }  
  73.  
  74. //UpdatetheContent-Type.  
  75.  
  76. HttpHeadercontentTypeHeader=  
  77.  
  78. request.getHeader(CONTENTTYPE_HEADER_NAME);  
  79.  
  80. if(contentTypeHeader!=null){  
  81.  
  82. contentTypeHeader.setValue(OUTPUT_TYPE);  
  83. }  
  84.  
  85. else{  
  86.  
  87. //AddtheContentTypehereiftheserverdoesnotspecifyone.  
  88.  
  89. request.putHeader(newHttpHeader(  
  90.  
  91. CONTENTTYPE_HEADER_NAME,OUTPUT_TYPE));  
  92. }  
  93. }  
  94.  
  95. catch(Throwablet){  
  96.  
  97. thrownewHttpContentTranscoderException(t.toString());  
  98. }  
  99. }  
  100.  

#p#

 

定義服務(wù)器的響應(yīng)處理

在MDS服務(wù)將它轉(zhuǎn)發(fā)到BlackBerry設(shè)備之前,transcodeServer(HttpResponse)的實(shí)現(xiàn)定義了包含來(lái)自于內(nèi)容服務(wù)器的內(nèi)容服務(wù)器響應(yīng)的任何處理需求.如果響應(yīng)不包含任何內(nèi)容,MDS服務(wù)將響應(yīng)毫無(wú)變化的轉(zhuǎn)發(fā)給BlackBerry設(shè)備.

 

  1. publicvoidtranscodeServer(HttpResponseresponse)  
  2.  
  3. throwsHttpContentTranscoderException{  
  4.  
  5. try{  
  6.  
  7. //Retrievetheresponsecontent,whichinthiscaseisinHTML.  
  8.  
  9. byte[]responseresponseContent=response.getContent();  
  10.  
  11. if(responseContent!=null){  
  12.  
  13. //ConvertthecontenttoStringobject.  
  14.  
  15. StringresponseContentAsString=new 
  16.  
  17. String(responseContent).toUpperCase();  
  18.  
  19. //ConverttheresponseContentAsStringtobytesagain.  
  20.  
  21. responseContent=responseContentAsString.getBytes();  
  22.  
  23. }  
  24.  
  25. else{  
  26.  
  27. //Noresponseisreceivedfromtheserver.  
  28.  
  29. StringBuffersb=newStringBuffer();  
  30.  
  31. sb.append("<HTML>\n");  
  32.  
  33. sb.append("<HEAD>\n");  
  34.  
  35. sb.append("<TITLE>UPPERCASEHTMLTRANSCODERtitle>\n");  
  36.  
  37. sb.append("HEAD>\n");  
  38.  
  39. sb.append("<BODY>\n");  
  40.  
  41. sb.append("SERVERISNOTRESPONDING\n");  
  42.  
  43. sb.append("BODY\n");  
  44.  
  45. sb.append("HTML>\n");  
  46.  
  47. responseContent=sb.toString().getBytes();  
  48.  
  49. }  
  50.  
  51. response.setContent(responseContent);  
  52.  
  53. //UpdatetheContent-Length.  
  54.  
  55. HttpHeadercontentLengthHeader=  
  56.  
  57. response.getHeader(CONTENTLENGTH_HEADER_NAME);  
  58.  
  59. if(contentLengthHeader!=null){  
  60.  
  61. contentLengthHeader.setValue(""+responseContent.length);  
  62.  
  63. }  
  64.  
  65. else{  
  66.  
  67. //ServerdidnotsendContent-Lengthsonoupdateisrequired.  
  68.  
  69. }  
  70.  
  71. //UpdatetheContent-Type.  
  72.  
  73. HttpHeadercontentTypeHeader=  
  74.  
  75. response.getHeader(CONTENTTYPE_HEADER_NAME);  
  76.  
  77. if(contentTypeHeader!=null){  
  78.  
  79. contentTypeHeader.setValue(OUTPUT_TYPE);  
  80. }  
  81.  
  82. else{  
  83.  
  84. //AddtheContentTypehere.  
  85.  
  86. response.putHeader(new  
  87.  
  88. HttpHeader(CONTENTTYPE_HEADER_NAME,OUTPUT_TYPE));  
  89. }  
  90. }  
  91.  
  92. catch(Throwablet){  
  93.  
  94. thrownewHttpContentTranscoderException(t.toString());  
  95. }  
  96. }  
  97.  

 

編譯和安裝編碼轉(zhuǎn)化器

1.編譯編碼轉(zhuǎn)化器的類(lèi)文件,在類(lèi)路徑里包含bmds.jar.

2.為編譯編碼轉(zhuǎn)化器創(chuàng)建一個(gè)jar文件.

3.以下面的任一方式安裝編碼轉(zhuǎn)化器.jar文件

lBES:將一個(gè)編碼轉(zhuǎn)化器.jar文件加到JRE的lib\jar目錄下.此.jar文件必須可訪問(wèn)JavaVM.

l模擬器:將一個(gè)編碼轉(zhuǎn)化器.jar文件加到BlackBerryJDE的MDS\classpath目錄下.

4.打開(kāi)httpcontenttranscoderslist.property文件,此文件在BlackBerryJDE安裝目錄的MDS\Config子目錄下.

5.為了指定何時(shí)使用編碼轉(zhuǎn)化器,加入一個(gè)或多個(gè)入口,.例如,為了使用uppercasehtml編碼轉(zhuǎn)化器將HTML內(nèi)容轉(zhuǎn)化為大寫(xiě)的HTML,加入下面的入口:

text/html->text/UPPERCASEHTML:uppercasehtml

6.保存屬性文件.

7.重啟MDS服務(wù)或BlackBerryMDS模擬器.
 

  1. BlackBerry開(kāi)發(fā)中Windows+eclipse環(huán)境配置及Helloworld
  2. 九步實(shí)現(xiàn)BlackBerry開(kāi)發(fā)程序發(fā)布應(yīng)用到app world
  3. BlackBerry開(kāi)發(fā)中七步實(shí)現(xiàn)創(chuàng)建app world賬號(hào)
  4. BlackBerry開(kāi)發(fā)環(huán)境中javaloader使用詳解
  5. 黑莓開(kāi)發(fā)中黑莓手機(jī)程序訪問(wèn)網(wǎng)絡(luò)能走代理服務(wù)器的三種方式

 

 

責(zé)任編輯:佚名 來(lái)源: mobile.csdn.net
相關(guān)推薦

2010-05-22 16:57:09

BlackBerry開(kāi)

2011-03-31 13:15:18

BlackBerry

2010-06-12 16:41:10

BlackBerry開(kāi)

2011-06-07 09:10:41

BlackBerry 開(kāi)發(fā)

2011-06-07 09:36:41

BlackBerry 應(yīng)用程序

2010-06-08 16:47:18

BlackBerry開(kāi)

2011-04-01 11:01:02

應(yīng)用程序BlackBerryJava

2010-09-10 08:32:45

android marApp CatalogApp Store

2010-12-27 08:27:52

BlackBerry應(yīng)用

2009-07-14 16:40:31

MyEclipse開(kāi)發(fā)

2009-06-25 17:08:14

2011-04-13 15:09:06

JavaBlackBerry

2012-06-07 09:15:14

ibmdw

2009-08-14 17:27:30

C#Windows應(yīng)用

2010-11-25 10:05:22

Visual StudSilverlightWCF

2013-02-21 14:14:40

開(kāi)發(fā)Tizen

2013-02-21 14:15:41

開(kāi)發(fā)Tizen

2012-02-08 15:06:31

ibmdw

2022-09-19 00:37:13

SaaS云計(jì)算開(kāi)發(fā)

2014-05-31 22:54:37

Azure移動(dòng)服務(wù)應(yīng)用程序
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)