wap项目:tomcat 字符编码解决方案

来源:互联网 发布:软件采购对比方案 编辑:程序博客网 时间:2024/05/16 08:33

 最近在做一个wap项目,由于各种手机的原因,要求wap网站对 字符编码、session、cookie,已经转向要求比较严格

虽然严格按照web项目中的编码设置方式设置字符编码,但在wap项目中,还是很有可能出现问题(部分页面没问题,部分有问题,很是烦)

以下就wap项目字符编码终极解决方案:

tomcat 目录下 conf/server.xml文件

字符编码解决方案 :<Connector port="80" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true" useBodyEncodingForURI="true" /> 

注意参数 useBodyEncodingForURI

在默认情况下,该参数为false。useBodyEncodingForURI则是根据响应该请求的页面的request.setCharacterEncoding参数对数据进行的重新编码(解码),不同的页面可以有不同的重新编码(解码)的编码。

另外还可以设置URIEncoding="指定编码",但不是很好的方法,如果tomcat有多个项目,每个项目编码不同,则行不通。

   URIEncoding和useBodyEncodingForURI区别是,URIEncoding是对所有GET方式的请求的数据进行统一的重新编码(解码),而useBodyEncodingForURI则是根据响应该请求的页面的request.setCharacterEncoding参数对数据进行的重新编码(解码),不同的页面可以有不同的重新编码(解码)的编码。
所以对于URL提交的数据和表单中GET方式提交的数据,可以修改URIEncoding参数为浏览器编码或者修改useBodyEncodingForURI为true,并且在获得数据的JSP页面中request.setCharacterEncoding参数设置成浏览器编码。

说明:

设置编码的方式可以有:

1. <%@ page language="java"  pageEncoding="UTF-8"%>

2. <%@ page contentType="text/vnd.wap.wml;charset=utf-8"%>

<?xml version="1.0" encoding="UTF-8"?>

3. <%
   request.setCharacterEncoding("UTF-8");

   %>

4. <% response.setCharacterEncoding("UTF-8");%>

解释

1、pageEncoding="UTF-8"的作用是设置JSP编译成Servlet时使用的编码。
   注意:如果JSP文件是以GBK为编码保存的,而在JSP中却指定pageEncoding="UTF-8",会引起JSP内部定义的字符串为乱码。
2、contentType="text/vnd.wap.wml;charset=utf-8"的作用是指定对服务器响应进行重新编码的编码。
3、request.setCharacterEncoding("UTF-8")的作用是设置对客户端请求进行重新编码的编码。
4、response.setCharacterEncoding("UTF-8")的作用是指定对服务器响应进行重新编码的编码。