BlackBerry開發(fā)中應用程序之MDS服務參考
本文和大家重點學習一下BlackBerry開發(fā)中應用程序之MDS服務參考,主要包括HTTP請求,HTTP請求變量和HTTP響應等內(nèi)容,希望本文的介紹能讓你有所收獲。
BlackBerry開發(fā)中應用程序之MDS服務參考
HTTP請求[1]
一個客戶端建立一個連接,并且發(fā)送一個HTTP請求消息到服務器.服務器然后發(fā)送一個響應消息,這個消息通常包含了請求的資源.
- <method><resource_path><version>
- Header1:value1
- Header2:value2
- Header3:value3
- <optionalmessage>
HTTP請求變量
描述
method
方法名,指定了一個動作,例如GET,HEAD或POST.常用的方法是GET,它從服務器請求一個資源.
resource_path
指向請求資源的路徑,它是URL中的一部分,在主機名后面出現(xiàn).它也稱為請求URL(RequestURL).
version
你正在運行的HTTP版本,標記為”HTTP/x.x”.BES支持1.0和1.1版本.
Header
提供了關于請求的或在消息體里發(fā)送的對象的信息.
optionalmessage
HTTP消息可以包含數(shù)據(jù).在一個請求里,它是發(fā)送到服務器的用戶類型的數(shù)據(jù),或上傳的文件.當一個對象伴隨著此消息時,請求通常也包含定義它屬性的消息頭.
HTTP響應
在HTTP請求消息的接收之上,服務器發(fā)送一個響應消息,它通常包含了請求的資源.
- <HTTPversion><status_code><reason>
- Header1:value1
- Header2:value2
- Header3:value3
- <message>
HTTP響應變量
描述
HTTP_version
正在運行的HTTP版本,標記為”HTTP/x.x”.BES支持1.0和1.1版本.
status_code
狀態(tài)碼的數(shù)值,它反映了客戶端提出的請求的結果。例如,200(OK)說明了傳輸成功,404(NotFound)說明了請求的URL沒有找到。
reason
reason是和狀態(tài)碼相關的文本消息。
Header
消息頭提供了響應的信息,也提供了消息體中正在發(fā)送的對象的信息。
message
HTTP消息必須包含數(shù)據(jù)。在一個響應消息里,它提供了客戶端請求的的內(nèi)容。此響應也包含了定義它的屬性的消息頭。
注:應用程序應該檢查HTTP響應消息的狀態(tài)碼。任何不是200(OK)的狀態(tài)碼都說明當建立HTTP連接時發(fā)生了一個錯誤。#p#
Push請求響應狀態(tài)碼
為push請求連接服務,BlackBerryMDS返回2種響應碼:
lPAP(PushAccessProtocal)響應碼。
lRIMPush響應碼。
注:訪問[url]www.wapforum.org[/url]獲得更多關于PAP響應碼的信息。
RIMPush請求響應碼
RIMPush請求響應碼
描述
解釋
200
OK
請求成功完成。
400
任何其他的錯誤。
403
訪問控制錯誤,或者未知的郵件地址或特定的BlackBerryPIN。
服務器接收了請求,但是不能響應。
503
服務器忙,服務不可用。
當前,服務器不能管理請求,因為暫時的負載或服務器正在維護。
HTTPS支持
如果你的應用程序通過Internet訪問服務器,為了提過其他的驗證和安全,在TLS上建立一個安全的HTTP(HTTPS)連接。
HTTPS認證(Certificate)管理
當BlackBerry設備以代理模式請求一個HTTPS連接時,BlackBerryMDS服務為BlackBerry設備建立一個SSL連接。系統(tǒng)管理員配置MDS服務,要么允許連接到未信任的服務器,要么是限制訪問信任的服務器,這個配置僅適用代理模式下的連接。在end-to-end模式里,BlackBerry設備建立一個SSL連接。
在BlackBerry管理器里,系統(tǒng)管理員編輯MDS服務屬性,并且設置TLS和HTTP選項,為獲得更多信息,參看BES管理指南。
注:在MDS服務模擬器里,通過設置rimpublic.property文件來允許或拒絕訪問未信任的服務器。設置application.handler.https.allowUntrustedServer參數(shù)為true或false。參看177頁的“配置BlackBerryMDS模擬器”獲得更多信息。
如果MDS服務包含認證,MDS服務將信任一個服務器。
使用keytool安裝一個認證
1.保存認證。
2.將認證文件拷貝到MDS服務所在計算機上的C:\Java\j2re1.4.2\lib\security文件夾。
3.為了將認證導入到鍵存儲里,請使用keytool,它可以在JREbin文件夾下找到,例如C:\Java\j2re1.4.2\bin.例如,輸入:
keytool-import-file
訪問[url]http://java.sun.com/j2se/1.3/docs/tooldocs/win32/keytool.html[/url]獲得更多關于keytool的信息。
編碼轉化器
BlackBerryMDS支持插件的Java應用程序,稱為編碼轉化器,它處理BlackBerry設備發(fā)送和接收的數(shù)據(jù)。
MDS服務提供下列缺省的編碼轉化:
編碼轉化名
描述
WML>WMLC
將.wml(WirelessMarkupLanuage)轉化為一個壓縮的格式。
WMLScript>WMLScriptC
將MIDlet應用程序為BlackBerry格式。
JAD>COD:XML>WBXML
將xml文件轉化為下面的WAP二進制XML(.wbxml)MIME類型:application/vnd.wap.wbxml..
SVG>PME
將可svg(ScalableVectorGraphics)轉化為BlackBerry設備支持的pme(PlazmicMediaEngine)二進制格式.
圖像編碼轉化
將下列圖像的文件類型轉化為png文件:
Jpeg
Gif
Tiff
Pgm
Ppm
pnm:包含ASCII和二進制pbm,pgm和ppm文件
ico
wbmp
pbm
wbmp
bmp
注:圖像編碼轉化器將先前的圖像格式轉化為下面的.PNGMIME類型:image/vnd.rim.png.
你也可以編寫自己的編碼轉化器完成客戶化數(shù)據(jù)的處理.例如,如果你的應用程序正在和服務器交換數(shù)據(jù),而服務器不是為BlackBerry設備設計的,并且發(fā)送到服務器端的數(shù)據(jù)對BlackBerry設備來說沒有合適的格式.那么你可能編寫一個編碼轉化器.
一個編碼器可能改變數(shù)據(jù)格式或刪除冗余信息來降低網(wǎng)絡流量,并且支持BlackBerry設備上的簡單應用程序.例如,你可以編寫一個編碼轉化器將HTML內(nèi)容轉化為WML。.#p#
數(shù)據(jù)轉化處理
如果你專門編寫一個服務器端的應用程序支持一個BlackBerry設備上客戶應用程序,編碼轉化器就不需要了.你可以設計一個服務器應用程序一合適的格式輸出數(shù)據(jù).
在發(fā)送數(shù)據(jù)到BES之前,你也可以將數(shù)據(jù)處理作為一單獨的服務器端進程的一部分.
編碼轉化器API
主要的編碼轉化器類
描述
HttpContentTranscoder
此類提供方法來控制HTTP請求和響應的內(nèi)容和屬性.
HttpContentTranscoderException
本異常的拋出說明編碼轉化工程不成功.BlackBerry設備將把本異常作為IOException拋出.
HttpHeader
本類提供方法對HTTP請求和響應的消息頭進行操作.
HttpParameter
本類代表了HTTP查詢參數(shù).它提供獲取和設置參數(shù)名和值.
HttpRequest
本類擴展了HttpTransmission類,它代表了一個包含頭,參數(shù)和內(nèi)容的HTTP請求.
HttpResponse
本類擴展了HttpTransmission類,它代表了一個包含頭,參數(shù)和內(nèi)容的HTTP響應.
HttpTransmission
本類提供獲取和設置內(nèi)容,頭,以及HTTP請求和響應的參數(shù).
參看API參考獲得更多信息.
創(chuàng)建一個HTTP內(nèi)容編碼轉化器
為了創(chuàng)建一個HTTP內(nèi)容編碼轉化器來全面控制HTTP請求與響應內(nèi)容,擴展HttpContentTranscoder類.本編碼轉化器也可以修改,增加,或刪除HTTP請求與響應屬性.
編碼轉化器必須在net.rim.protocal.http.content.tanscoder.
編碼轉化器的位置要么在httpcontenttranscoder文件指定,要么由應用程序指定.
處理HTTP內(nèi)容編碼轉化器異常
任何由編碼轉化器拋出的異常將作為IOException被發(fā)送到應用程序.相關具體的消息也拷貝到IOException中.
注:為代替拋出一個異常到HTTP連接處理器,一個編碼轉化器也可能發(fā)送一個HTTP響應到一個應用程序,這表明發(fā)生了一個內(nèi)部的服務器錯誤.
選擇編碼轉化器
當BlackBerry設備請求內(nèi)容時,MDS服務決定客戶端請求的內(nèi)容類型和服務器響應的內(nèi)容類型的比較是否需要一個編碼轉化器.如果類型不一樣,MDS服務檢查httpcontenttranscoder.property文件來決定一個編碼轉化器是否可用來轉化內(nèi)容.
BlackBerry設備發(fā)送的HTTP請求里,x-rim-transcode-content頭指定了MDS優(yōu)化服務轉化內(nèi)容的輸入格式.如果內(nèi)容遇見以下情形,MDS數(shù)據(jù)優(yōu)化服務將轉化內(nèi)容:
l由x-rim-transcode-content頭指定的輸入格式也HTTP請求的Accept頭中指定,此HTTP請求是MDS服務發(fā)送到服務器的請求.
lWeb服務器響應一個內(nèi)容類型,或者輸出類型,它和BlackBerry設備接受的類型不同.
lhttpcontenttranscoder.property文件包含了一個編碼轉化器,此編碼轉化器可以將Web服務器發(fā)送到MDS服務的內(nèi)容轉化為BlackBerry設備可接受的類型.
為了判斷當push內(nèi)容時一個編碼轉化器是否需要,MDS服務檢查內(nèi)容類型(content-type)和服務器端應用程序的x-rim-transcode-content頭.如果2者相同,MDS數(shù)據(jù)優(yōu)化服務將頭文件指定的內(nèi)容轉為為BlackBerry可以顯示的格式.
httpcontenttranscoder.property文件將輸入的格式轉化為一個給出的編碼轉化器.在下面的例子中,httpcontenttranscoder.property文件將.wml輸入格式轉化為.wbxml或.wmlc.
content-type:text/vnd.wap.wml
x-rim-transcode-content:text/vnd.wap.wml
你也可以創(chuàng)建定制的編碼轉化器來重新格式化或者轉化應用程序請求的數(shù)據(jù).例如,有愧樂意編寫一個編碼轉化器將HTML內(nèi)容轉為為WML.參看196也的”創(chuàng)建編碼轉化器”獲得更多信息.
HTTP請求
MDS服務使用MIME類型決定附加到一個服務器HTTP響應的內(nèi)容格式是否和BlackBerry設備請求的內(nèi)容格式相匹配.
MDS服務測試一列可用的編碼轉化器,并且擴展Accept頭.例如,如果一個請求接受WML的MIME類型和一個編碼轉化器存在的HTML-to-WML,將HTML加到Accept頭.參看195頁的”映射編碼轉化器”獲得更多信息.
在HTTP請求里,應用程序可以包含2個頭來控制它接收的內(nèi)容的類型:
lAccept頭
lContent-Transcoder頭.
頭
描述
Accept
在HTTP請求的Accept頭里,應用程序列出它從內(nèi)容服務器接收的MIME類型.例如,如果應用程序可以接收WML或XML格式的內(nèi)容,它在HTTP請求里發(fā)送如下的消息頭:
Accept:text/wml,text/xml
缺省的,當Accept頭列出了不止一個MIME類型,MDS服務將從左到右分配引用,在這里列出的***個MIME類型假設為優(yōu)先的.
應用程序頁可以將質(zhì)量因子(Qualityfactor)賦值給MIME類型來表明優(yōu)先權.質(zhì)量因子范圍時0(***優(yōu)先權)到1(***優(yōu)先權),例如,下面的頭表明了編譯的WML(WMLC)是優(yōu)先的,但是WML是可接受的.
Accept:text/vnd.wap.wml;q=0.5,application/vnd.wap.wmlc;q=1
Content-Transcoder
Content-Transcoder頭是一個BlackBerry頭,在內(nèi)容返回到BlackBerry設備之前,它允許應用程序指定一個應用到任何內(nèi)容的特定編碼轉化器.使用Content-Transcoder頭覆寫MDS服務運用的缺省處理來選擇一個編碼轉化器.
HTTP響應
內(nèi)容服務器產(chǎn)生一個包含一個Content-Type頭的HTTP響應..Content-Type頭描述了一個特定數(shù)據(jù)包的MIME類型.例如,當內(nèi)容服務器一HTML格式返回內(nèi)容時,HTTP響應包含一個值為text/html的Content-Type頭.
MDS服務將應用程序的請求和內(nèi)容服務器的響應進行比較.下面的部分將描述MDS服務如何決定什么時候轉化內(nèi)容:
響應類型
描述
不需要編碼轉化
應用程序發(fā)送一個請求獲取WML格式的內(nèi)容.請求包含以下的頭:
Accept:text/vnd.wap.wml
在它的響應里,內(nèi)容服務器發(fā)送以下的頭:
Content-Type:text/vnd.wap.wml
因為服務器返回的內(nèi)容類型與BlackBerry請求類型相符,MDS服務不需要任何轉化.它將內(nèi)容毫無變化的轉發(fā)給BlackBerry設備.
需要編碼轉化
應用程序發(fā)動一個請求獲取內(nèi)容.請求包含一下內(nèi)容:
Accept:text/vnd.wap.wml;q=0.5,application/vnd.wap.wmlc;q=1
此消息頭表明應用程序接受WML或者編譯的WML格式(WMLC)的內(nèi)容.
在它的響應中,內(nèi)容服務器發(fā)送下面的頭:
Content-Type:text/vnd.wap.wml
因為服務器返回的內(nèi)容類型與BlackBerry請求類型不符,MDS服務搜索一個可以將MIME類型(WML)轉化為優(yōu)先的MIME類型(WMLC)的可用編碼轉化器.
如果一個適合的編碼轉化器不可用,MDS服務將WML內(nèi)容毫無變化的轉發(fā)給BlackBerry設備,因為初始請求表明BlackBerry設備應用程序接受WML內(nèi)容.
每個編碼轉化器都實現(xiàn)了一個方法創(chuàng)建一個哈希表,此哈希表映射作為來自內(nèi)容服務器的輸入,編碼轉化器接受的格式,以及作為輸出編碼轉化器創(chuàng)建的格式.
在啟動時,將自BlackBerry設備的HTTP請求轉發(fā)之前,MDS服務使用哈希表修改Accept頭域.例如,一個BlackBerry設備應用程序使用下面的Accept頭發(fā)送一個HTTP請求:
Accept:application/vnd.wap.wmlc,text/vnd.wap.wmlscriptc
在審查編碼轉化器映射表之后,MDS數(shù)據(jù)優(yōu)化服務加入下面的項到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
這個擴展的Accept頭現(xiàn)在列出了所有內(nèi)容服務器可以提供的MIME類型.#p#
映射編碼轉化器
httpcontenttranscoder.property文件在你的BlackBerryJDE安裝目錄的MDS\config子目錄下.它指定了MDS數(shù)據(jù)優(yōu)化服務如何管理應用程序與內(nèi)容服務器之間的多種內(nèi)容類型的交換.
下面是httpcontenttranscoder.property的一個實例:
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
每個入口使用了下面的格式:
在這里:
lInputType>是內(nèi)容服務器可用的MIME類型,或者default.
lOutputType>是BlackBerry設備請求的MIME類型.
lAction>是下列值之一:
n編碼轉化器包名,如vnd.wap.wml
nPass:在沒有改變下發(fā)送數(shù)據(jù).
nDiscard:放棄數(shù)據(jù),不發(fā)送它.
下面幾節(jié)解釋在httpcontenttranscoder.property文件里可能的輸入格式:
格式1
當服務器端可用的格式和BlackBerry設備請求的格式不同時,下面格式的入口指定了MDS完成的動作.
InputType->OutputType:TranscoderORRSV
例如,應用程序請求text/wml,但是內(nèi)容服務器只有text/xml.MDS服務找到下面的MIME類型入口:
Text/xml->Text/wml:vnd.wap.wml
根據(jù)本入口,MDS服務必須使用vnd.wap.wml編碼轉化器將XML內(nèi)容轉化為WML.
格式2
當服務器發(fā)送一個給定類型的內(nèi)容,不考慮BlackBerry設備請求的內(nèi)容,,下面格式的入口指定了MDS完成的動作.
InputType:TranscoderORRSV
例如,如果服務器僅有WML內(nèi)容(text/vnd.wap.xml),.MDS服務找到下面的MIME類型入口:
text/vnd.wap.wml:vnd.wap.wml
根據(jù)本入口,MDS服務必須使用vnd.wap.wml編碼轉化器將XML內(nèi)容轉化為WML.
缺省的入口
如果MDS服務不能為一個特定的MIME類型:
default:TranscoderorRSV
找到一個入口,一個缺省的入口指定了MDS服務完成的缺省動作.
例如,如果MDS服務不能為defualt:pass缺省入口的內(nèi)容找到一個入口,MDS服務將內(nèi)容毫無變化的轉發(fā)給BlackBerry設備.#p#
創(chuàng)建編碼轉化器
將HTML標記和內(nèi)容轉化為大寫
遵循編碼轉化器包層次結構(hierarchy)
在net.rim.protocol.http.content.transcoder.
packagenet.rim.protocol.http.content.transcoder.uppercasehtm
擴展HTTPContentTranscoder
一個編碼轉化器的類名必須為Transcoder.它擴展了HttpContentTranscoder類.
在本例中,一個公共類Transcoder定義了HTTP內(nèi)容編碼轉化器.
publicclassTranscoderextendsHttpContentTranscoder{…}
定義HTTP頭
為HTTP頭定義常數(shù)以及編碼轉化器加到這些頭的字符串.
- privatestaticfinalStringCONTENTTYPE_HEADER_NAME="Content-Type";
- privatestaticfinalStringCONTENTLENGTH_HEADER_NAME="Content-Length";
- privatestaticfinalStringACCEPT_HEADER_NAME="Accept";
- //AddthislinetotheAcceptheaderfieldifitexistswhen
- //theBlackBerrydeviceissuesanHTTPrequest.
- privatestaticfinalStringACCEPTLINE="text/html";
- //Thislineidentifiestheoutputcontenttypethatthistranscoderproduces.
- privatestaticfinalStringOUTPUT_TYPE="text/UPPERCASEHTML";
創(chuàng)建一個輸入和輸出類型的映射
getMapOfOutputToAcceptLine()的實現(xiàn)創(chuàng)建了一個編碼轉化器輸入和輸出類型之間的映射.
隨著啟動,MDS服務使用映射修改Accept消息頭域.MDS服務發(fā)送一個HTTP請求中修改的頭到一個HTTP服務器.
- publicHashMapgetMapOfOutputToAcceptLine(){
- HashMapmapping=newHashMap();
- mapping.put(OUTPUT_TYPE,ACCEPTLINE);
- returnmapping;
- }
設置連接URL
當BlackBerr設備請求一個打開的HTTP連接時,定義一個方法設置連接URL.
publicvoidsetURL(URLnewURL){
url=newURL;
}
定義BlackBerry設備的請求處理
在MDS服務將BlackBerry設備請求轉發(fā)到目標服務器之前,transcodeDevice(HttpRequest)的實現(xiàn)定義了任何對這些請求的處理.下面的例子不需要處理:
一個應用程序可以使用一個稱為Content-Transcoder的HTTP頭請求一個指定的編碼轉化器,
publicvoidtranscodeDevice(HttpRequestrequest)
throwsHttpContentTranscoderException{
//Implementation.
}
定義BlackBerry設備的響應處理
在MDS服務將BlackBerry設備響應轉發(fā)到目標服務器之前,transcodeDevice(HttpResponse)的實現(xiàn)定義了任何對這些響應的處理.下面的例子不需要處理:
publicvoidtranscodeDevice(HttpResponseresponse)
throwsHttpContentTranscoderException{
//Implementation.
}
定義服務器的請求處理
在MDS服務將它轉發(fā)到BlackBerry設備之前,transcodeServer(HttpRequest)的實現(xiàn)定義了任何對內(nèi)容服務器請求的處理需求.
- publicvoidtranscodeServer(HttpRequestrequest)
- throwsHttpContentTranscoderException{
- try{
- //Retrievetherequestcontent,which,inthiscase,isinHTML.
- byte[]requestrequestContent=request.getContent();
- if(requestContent!=null){
- //ConvertthecontenttoStringobject.
- StringrequestContentAsString=new
- String(requestContent).toUpperCase();
- //ConverttherequestContentAsStringtobytesagain.
- requestContent=requestContentAsString.getBytes();
- }
- else{
- //SendanHTMLmessagetoindicatethattheserver
- //isnotrespondingwithappropriatecontent.
- StringBuffersb=newStringBuffer();
- sb.append("<HTML>\n");
- sb.append("<HEAD>\n");
- sb.append("<TITLE>UPPERCASEHTMLTRANSCODERtitle>\n");
- sb.append("HEAD>\n");
- sb.append("<BODY>\n");
- sb.append("SERVERISNOTPUSHINGAPPROPRIATECONTENT\n");
- sb.append("BODY\n");
- sb.append("HTML>\n");
- requestContent=sb.toString().getBytes();
- }
- request.setContent(requestContent);
- //UpdatetheContent-Length
- HttpHeadercontentLengthHeader=
- request.getHeader(CONTENTLENGTH_HEADER_NAME);
- if(contentLengthHeader!=null){
- contentLengthHeader.setValue(""+requestContent.length);
- }
- else{
- //TheserverdidnotsendtheContent-Length.
- //Noupdateisneeded.
- }
- //UpdatetheContent-Type.
- HttpHeadercontentTypeHeader=
- request.getHeader(CONTENTTYPE_HEADER_NAME);
- if(contentTypeHeader!=null){
- contentTypeHeader.setValue(OUTPUT_TYPE);
- }
- else{
- //AddtheContentTypehereiftheserverdoesnotspecifyone.
- request.putHeader(newHttpHeader(
- CONTENTTYPE_HEADER_NAME,OUTPUT_TYPE));
- }
- }
- catch(Throwablet){
- thrownewHttpContentTranscoderException(t.toString());
- }
- }
#p#
定義服務器的響應處理
在MDS服務將它轉發(fā)到BlackBerry設備之前,transcodeServer(HttpResponse)的實現(xiàn)定義了包含來自于內(nèi)容服務器的內(nèi)容服務器響應的任何處理需求.如果響應不包含任何內(nèi)容,MDS服務將響應毫無變化的轉發(fā)給BlackBerry設備.
- publicvoidtranscodeServer(HttpResponseresponse)
- throwsHttpContentTranscoderException{
- try{
- //Retrievetheresponsecontent,whichinthiscaseisinHTML.
- byte[]responseresponseContent=response.getContent();
- if(responseContent!=null){
- //ConvertthecontenttoStringobject.
- StringresponseContentAsString=new
- String(responseContent).toUpperCase();
- //ConverttheresponseContentAsStringtobytesagain.
- responseContent=responseContentAsString.getBytes();
- }
- else{
- //Noresponseisreceivedfromtheserver.
- StringBuffersb=newStringBuffer();
- sb.append("<HTML>\n");
- sb.append("<HEAD>\n");
- sb.append("<TITLE>UPPERCASEHTMLTRANSCODERtitle>\n");
- sb.append("HEAD>\n");
- sb.append("<BODY>\n");
- sb.append("SERVERISNOTRESPONDING\n");
- sb.append("BODY\n");
- sb.append("HTML>\n");
- responseContent=sb.toString().getBytes();
- }
- response.setContent(responseContent);
- //UpdatetheContent-Length.
- HttpHeadercontentLengthHeader=
- response.getHeader(CONTENTLENGTH_HEADER_NAME);
- if(contentLengthHeader!=null){
- contentLengthHeader.setValue(""+responseContent.length);
- }
- else{
- //ServerdidnotsendContent-Lengthsonoupdateisrequired.
- }
- //UpdatetheContent-Type.
- HttpHeadercontentTypeHeader=
- response.getHeader(CONTENTTYPE_HEADER_NAME);
- if(contentTypeHeader!=null){
- contentTypeHeader.setValue(OUTPUT_TYPE);
- }
- else{
- //AddtheContentTypehere.
- response.putHeader(new
- HttpHeader(CONTENTTYPE_HEADER_NAME,OUTPUT_TYPE));
- }
- }
- catch(Throwablet){
- thrownewHttpContentTranscoderException(t.toString());
- }
- }
編譯和安裝編碼轉化器
1.編譯編碼轉化器的類文件,在類路徑里包含bmds.jar.
2.為編譯編碼轉化器創(chuàng)建一個jar文件.
3.以下面的任一方式安裝編碼轉化器.jar文件
lBES:將一個編碼轉化器.jar文件加到JRE的lib\jar目錄下.此.jar文件必須可訪問JavaVM.
l模擬器:將一個編碼轉化器.jar文件加到BlackBerryJDE的MDS\classpath目錄下.
4.打開httpcontenttranscoderslist.property文件,此文件在BlackBerryJDE安裝目錄的MDS\Config子目錄下.
5.為了指定何時使用編碼轉化器,加入一個或多個入口,.例如,為了使用uppercasehtml編碼轉化器將HTML內(nèi)容轉化為大寫的HTML,加入下面的入口:
text/html->text/UPPERCASEHTML:uppercasehtml
6.保存屬性文件.
7.重啟MDS服務或BlackBerryMDS模擬器.
- BlackBerry開發(fā)中Windows+eclipse環(huán)境配置及Helloworld
- 九步實現(xiàn)BlackBerry開發(fā)程序發(fā)布應用到app world
- BlackBerry開發(fā)中七步實現(xiàn)創(chuàng)建app world賬號
- BlackBerry開發(fā)環(huán)境中javaloader使用詳解
- 黑莓開發(fā)中黑莓手機程序訪問網(wǎng)絡能走代理服務器的三種方式