JSP中中文的解決:
中國移動加入以下幾句後,頁面中可以直接寫中文,不用轉換,提交的中文直接request.getParameter("")獲得,不用轉換
Java代碼
<%@ page contentType="text/vnd.wap.wml;charset=gb2312"%>
<%response.setContentType("text/vnd.wap.wml;charset=UTF-8");%>
<%request.setCharacterEncoding("UTF-8");%>
中國聯通加入以下幾句後,頁面中可以直接寫中文,不用轉換,提交的中文直接request.getParameter("")獲得,不用轉換
Java代碼
<%@ page contentType="text/vnd.wap.wml;charset=gb2312"%>
<%request.setCharacterEncoding("UTF-8");%>
操作系統win2000,Web Server resin(或tomcat)
都是從實踐中摸索出來的,業務已上線,沒問題。
本人解決方案:
(1)在wml文件中定義為:
Java代碼
<?xml version="1.0" encoding="UTF-8"?>
(2)對提交數據采用post傳遞
Java代碼
<go href="/wapapp/servlet_wap" method="post">
<!-- go href="/servlet/wap86test" -->
<postfield name="serviceID" value="0002"/>
<postfield name="phone" value="$(phone:e)"/>
<postfield name="passwd" value="$(passwd:e)"/>
</go>
(3)後台轉換
移動——>
在servlet裡面的doget和dopost方法設置
Java代碼
request.setCharacterEncoding("UTF-8");
response.setContentType(Const.CONTENT_TYPE);//Const.CONTENT_TYPE為:text/vnd.wap.wml;charset=UTF-8
①post提交處理表單:
一般都是直接request.getParameter("xxx")取過來的就是中文了,不需要再進行轉碼;
如增加成員
增加成員的post代碼為:
Java代碼
<do type="accept" label="確定"><go href="/wapapp/servlet_wap" method="post" >
<postfield name="serviceID" value="0207"/>
<postfield name="groupname" value="按時的發射點222"/>
<postfield name="groupcode" value="4"/>
<postfield name="aphone" value="$aphone"/>
<postfield name="aname" value="$(aname:e)"/>
</go></do>
在處理編號為”0207“的程序塊中,對獲得的參數是這樣來處理的
Java代碼
String groupcode = request.getParameter("groupcode");
String groupName = request.getParameter("groupname");
String ctcPhone = request.getParameter("aphone");
String ctcName = request.getParameter("aname");
ctcName = ctcName.replaceAll(" ", "");
ctcName = ctcName.replaceAll(" ", "");
if (!UserType.equals(SysChinaMobile)) {//移動的話直接getparameter的就是中文,而聯通的卻不是,所以需要轉碼
Java代碼
try {
groupName = WapUtil.decode(groupName, "UTF-8");
ctcName = WapUtil.decode(ctcName, "UTF-8");
} catch (Exception e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
out.println(returnPrevPage(strErrosOnServerCallAdmin));
}
}
②get提交的url參數:
如果是通過get方式,或者是通過url來傳遞參數的話就不能用decode這個方法來實現轉碼,而是用togbk這個方法來實現;
而且如果是在servlet裡面打印wml頁面,碼制轉換也只能用togbk這個方法;
如:顯示個組信息首頁面
請求顯示修改組的頁面url為:/wapapp/servlet_wap?serviceID=0212&groupcode=6&groupname=%B0%B4%CA%B1%B5%C4%B7%A8333
在處理編號為”0212“的程序塊中,對獲得的參數是這樣來處理的
Java代碼
String groupcode = request.getParameter("groupcode");
String groupname = request.getParameter("groupname");
try {
groupname = WapUtil.togbk(groupname);
groupcode = WapUtil.togbk(groupcode);
}catch (Exception e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
out.println(returnPrevPage(strErrosOnServerCallAdmin));
}
聯通——>
在servlet裡面的doget和dopost方法設置
Java代碼
response.setContentType(Const.CONTENT_TYPE);//Const.CONTENT_TYPE為:text/vnd.wap.wml;charset=UTF-8
①post提交處理表單:
需要調用decode方法進行轉碼;
②get提交的url參數:
需要調用togbk方法進行轉碼
Waputil中最重要的幾個方法:
WapUtil.toUrl(String gbkStr) :如果有中文參數,需要用此方法轉換
WapUtil.gbk2unicode(String gbkStr):將中文轉成utf-8格式的文字,顯示在頁面上;
WapUtil.togbk(String Utfstr):將utf格式的文字轉成gbk格式,用於後台處理;
WapUtil.decode(String s, String encoding):將指定碼制格式的文字轉成gbk格式,用於後台處理;
1)wap多選框
Java代碼
<card id="phones" title="組信息">
<do type="prev" name="Prev" label="Back">
<go href="meeting.wml"></go></do>
<do type="accept"><go href="servlet_wap?serviceID=0124">
<postfield name="scity" value="1"/>
<postfield name="members" value="$members"/>
</go></do>
<p mode="nowrap">**選擇會議成員**
<select name="members" multiple="true">
<option value="138345657678">88(138345657678)</option>
<option value="1383456576786">88886(1383456576786)</option>
<option onpick="meeting.wml">[返回]</option>
</select>
</p>
</card>
2)wap單選框
Java代碼
<card>
<p>Please choice your favourite Web.<br/>
<select name="X">
<option value="S">sina</option>
<option value="Y">yahoo</option>
</select>
<p>
</card>
3)有關左右軟按鍵)(由手機浏覽器自動解析為menu菜單,在手機的右鍵出現;)
Java代碼
<do type=".options." label="確認" optional="false">
<go href="/wapapp/servlet_yxtwap?serviceID=0214"/>
</do>
代表右軟按鍵,一個“確定”按鈕;
Java代碼
<do type=".Accept." label="返回" optional="false">
<go href="../servlet_yxtwap?serviceID=0201"/>
</do>
代表左軟按鍵,一個“返回”按鈕;
最好是這樣:
Java代碼
<do type="options" name="Prev" label="返回"><go href="indexmember.wml"></go></do>
<do type="Accept" label="確定">
<go href="/wapapp/servlet_yxtwap?serviceID=0401">
<postfield name="name" value="$name"/>
<postfield name="nick" value="$nick"/>
<postfield name="call" value="$call"/>
</go>
</do>
返回剛才上頁:
Java代碼
<do type="options" name="Prev" label="返回"><prev/></do>
<do type="options" name="Prev" label="返回"><go href="index.wml"></go></do>
<do type="accept" label="確定">
<go href="/wapapp/servlet_wap" method="post">
<!-- go href="/servlet/wap86test" -->
<postfield name="serviceID" value="0002"/>
<postfield name="phone" value="$(phone:e)"/>
<postfield name="passwd" value="$(passwd:e)"/>
</go>
</do>
作者“SILON”