現在在做一個手機版的Blog網站,WAP1.x WAP2.0 Struts2
spring hibernate
- 項目里面既有wml(WAP 1.x)又有xhtml(WAP 2.0)所以contenType一定要寫成這個樣子:
<property name="contentType">
???? <value>application/vnd.wap.xhtml+xml; charset=UTF-8</value>
?</property>
如果只有wml可以寫成application/vnd.wap
ko.cn (空中網)是???? text/vnd.wap.wml;charset=UTF-8
wap.baidu.com ? ?? wap版: text/vnd.wap.wml;charset=UTF-8
??????????????????????????? xhtml版:application/xhtml+xml
wap.pdx.cn(萬蝶網) text/vnd.wap.wml;charset=UTF-8
不知道為什么一定要加charset=UTF-8 否則瀏覽器會把頁面當成是一個文件,一訪問就問你要不要下載,其實我們項目里還有PC版的內容 所以是在每個手機版的action中指定contentType
<action?name="login" class="。。。。。.LoginAction"?method="login">
???? <result?name="success">
????????? <param?name="location">/pages/wap/user_info.ftl</param>
????????? <param?name="contentType">
?????????????? application/vnd.wap.xhtml+xml;?charset=UTF-8
????????? </param>
????? </result>
????? <result?name="input">
????????????????。。。。。
?????? </result>
</action>
- 目前WAP 1.X還只能通過彩信業務上傳圖片
- WAP2.0(xthml)中使用<input type="file">上傳文件必須指定enctype="multipart/form-data" method="post"
使用multipart/form-data模式時,HTTPRequest的內容不是KEY:VALUE的格式而是被用分隔符(Bandary)分成多個部分的數據流,bandary由瀏覽器生成,有的是一組復雜的隨機數為的是與真正的數據區分開
- 通過<input type="file">上傳時服務器總是報文件為空,但是文件名等信息還是在的
于是將手機上傳的request和PC上傳的request打印出來進行比較
做Filter攔截request
InputStream?is?=?request.getInputStream();
FileOutputStream?fs?=?new?FileOutputStream("c:/out.text");
??? byte[]?buffer?=?new?byte[1024];
??? int?byteread?=?0;
??? while?((byteread?=?is.read(buffer))?!=?-1)?{
??????? fs.write(buffer,?0,?byteread);
??? }
手機版上傳的request
--******_EMBIDER_MULTIPART_BOUNDARY_******
Content-Disposition:?form-data;?name="struts.token.name";
struts.token
--******_EMBIDER_MULTIPART_BOUNDARY_******
Content-Disposition:?form-data;?name="struts.token";
Q0DRQ8WNNX164DOMQQUPGQ0H4S01KS4W
--******_EMBIDER_MULTIPART_BOUNDARY_******
Content-Disposition:?form-data;?name="picture.name";
kmtp
--******_EMBIDER_MULTIPART_BOUNDARY_******
Content-Disposition:?form-data;?name="categoryId";
689
--******_EMBIDER_MULTIPART_BOUNDARY_******
Content-Disposition:?form-data;?name="photo";?filename="wps://FLASH/pht/gen/SB.jpg.jpg"
Content-Type:?image/jpeg
--******_EMBIDER_MULTIPART_BOUNDARY_******
Content-Disposition:?form-data;?name="picture.description";
--******_EMBIDER_MULTIPART_BOUNDARY_******--
PC上傳的request
------------oLFSA1p2rcCZQCkW4ECi1x
Content-Disposition:?form-data;?name="struts.token.name"
struts.token
------------oLFSA1p2rcCZQCkW4ECi1x
Content-Disposition:?form-data;?name="struts.token"
73ZFOP68ALP9CNKDIDBK2AG9HLX86K0R
------------oLFSA1p2rcCZQCkW4ECi1x
Content-Disposition:?form-data;?name="picture.name"
from?pc
------------oLFSA1p2rcCZQCkW4ECi1x
Content-Disposition:?form-data;?name="categoryId"
689
------------oLFSA1p2rcCZQCkW4ECi1x
Content-Disposition:?form-data;?name="photo";?filename="Skypahontas.png"
Content-Type:?image/png
塒NG
??
IHDR???`???`???鈽w8???sBIT|d???????pHYs????逸~???%tEXtSoftware?Macromedia?Fireworks?MX?2004噕???tEXtCreation?Time?11/7/05壣唒??-IDATx滍統?Wy?9繚譯綮?砘-[迧dY?^€伉?醊H笜礞^????BH竃HX!,I|????0?a駟
偏l????賈,蚳泒闄^渟?Y秄$?銩<5]]S誡烑=飝消?諾??0??馃K,?嘣礩鐢}爺県≌hO8攍?@揌爥?-鼏玝悕.S.炻Z塉@T褫6\?€8﹞?≌?馪?sQ榀~tru3棿溋籛q綷娏"k€Z1X颽b蟔?'??
慮司奬菦q??8?8
X番殘塜鐕lj喭])赱欼$?9諚&;窄綫~?x!9鶹燂9c?︸f/?鋤S楆?{$槤j鵒E纜錢諘?鱐?娠D?M?yI=腆?|??詭S|兜某????IEND瓸`
------------oLFSA1p2rcCZQCkW4ECi1x
Content-Disposition:?form-data;?name="picture.description"
------------oLFSA1p2rcCZQCkW4ECi1x--
發現手機根本就沒有把圖片內容上傳。我們測試用的手機是MOTO KRCR,而且在wap.pdx.cn wap.baidu.com上效果相同。
又找了一部Nokia NXX在上面安裝Opera,結果不能生成bandary直接被reject掉
SonyEricsson可以把圖片內容傳上來但是編碼又不對。。。。
不知道是手機的問題 還是我們的程序有問題。
感覺現在手機上的瀏覽器還比較混亂,缺少統一的標準或者沒有人來支持標準。