jsp 开发wap 注意事项

JSP中中文的解决:
中国移动加入以下几句后,页面中可以直接写中文,不用转换,提交的中文直接request.getParameter("")获得,不用转换
<%@ page contentType="text/vnd.wap.wml;charset=gb2312"%>
<%response.setContentType("text/vnd.wap.wml;charset=UTF-8");%>
<%request.setCharacterEncoding("UTF-8");%>
中国联通加入以下几句后,页面中可以直接写中文,不用转换,提交的中文直接request.getParameter("")获得,不用转换
<%@ page contentType="text/vnd.wap.wml;charset=gb2312"%>
<%request.setCharacterEncoding("UTF-8");%>
操作系统liunx,Web Server tomcat
都是从实践中摸索出来的,业务已上线,没问题。
本人解决方案:
(1)在wml文件中定义为:
<?xml version="1.0" encoding="UTF-8"?>
(2)对提交数据采用post传递
<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方法设置
request.setCharacterEncoding("UTF-8");
response.setContentType(Const.CONTENT_TYPE);//Const.CONTENT_TYPE为:text/vnd.wap.wml;charset=UTF-8
①post提交处理表单:
一般都是直接request.getParameter("xxx")取过来的就是中文了,不需要再进行转码;
如增加成员
增加成员的post代码为:
<do type="accept" label="确定"><go href="/wapapp/servlet_wap" method="post" >
<postfield name="serviceID" value="0207"/>
<postfield name="groupname" value="xxxx"/>
<postfield name="groupcode" value="4"/>
<postfield name="aphone" value="$aphone"/>
<postfield name="aname" value="$(aname:e)"/>
</go></do>
在处理编号为”0207“的程序块中,对获得的参数是这样来处理的
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的就是中文,而联通的却不是,所以需要转码
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“的程序块中,对获得的参数是这样来处理的
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方法设置
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多选框
<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单选框
<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菜单,在手机的右键出现;)
<do type=".options." label="确认" optional="false">
    <go href="/wapapp/servlet_yxtwap?serviceID=0214"/>
  </do>
代表右软按键,一个“确定”按钮;
<do type=".Accept." label="返回" optional="false">
    <go href="../servlet_yxtwap?serviceID=0201"/>
  </do>
代表左软按键,一个“返回”按钮;
最好是这样:
<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>
返回刚才上页:
<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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值