现在在做一个手机版的Blog网站,WAP1.x WAP2.0 Struts2
spring hibernate
  1. 项目里面既有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


  2. 不知道为什么一定要加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>

  3. 目前WAP 1.X还只能通过彩信业务上传图片
  4. WAP2.0(xthml)中使用<input type="file">上传文件必须指定enctype="multipart/form-data" method="post"
    使用multipart/form-data模式时,HTTPRequest的内容不是KEY:VALUE的格式而是被用分隔符(Bandary)分成多个部分的数据流,bandary由浏览器生成,有的是一组复杂的随机数为的是与真正的数据区分开
  5. 通过<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可以把图片内容传上来但是编码又不对。。。。

不知道是手机的问题 还是我们的程序有问题。
感觉现在手机上的浏览器还比较混乱,缺少统一的标准或者没有人来支持标准。