Tomcat4.0和Tomcat4.1下JSP页面中文问题解答

目前, Tomcat 作为一种出色的开放源代码的 JSP 服务器,目前在 JSP 的开发过程中获得了广泛的应用. 但是作为一款英语国家公司开发的软件, 在中文环境下不可避免的会出现一些乱码问题. 这里就 Tomcat 4.0和Tomcat 4.1 下的常见中文问题及其解决方法做一个总结. 这些方法都已经在 中文版 Windows 98 + JDK 1.3.1 和 中文版 Windows 2000 + JDK 1.3.1 下通过了测试. 另外在 IBM 的网站上有一个网页 http://www-900.ibm.com/developerWorks/cn/java/jsp_dbcsz/index.shtml 也讨论了这个问题.

企业建站必须是能够以充分展现企业形象为主要目的,是企业文化与产品对外扩展宣传的重要窗口,一个合格的网站不仅仅能为公司带来巨大的互联网上的收集和信息发布平台,成都创新互联公司面向各种领域:混凝土搅拌罐车网站设计营销型网站建设解决方案、网站设计等建站排名服务。


首先为了便于讨论, 这里首先列出了一些方便的工具方法, 便于我们的讨论. 这些方法如下所示:

 
 
 
  1. public String toChi(String input) {  
  2. try {  
  3. byte[] bytes = input.getBytes("ISO8859-1");  
  4. return new String(bytes);  
  5. }catch(Exception ex) {  
  6. }  
  7. return null;  
  8. }  
  9. // 对给定字符进行 URL 编码  
  10. public String encode(String value) {  
  11. if(isEmpty(value)) return "";  
  12. return java.net.URLEncoder.encode(value);  
  13. }    
  14. // 对给定字符进行 URL 解码  
  15. public String decode(String value) {  
  16. if(isEmpty(value)) return "";  
  17. return java.net.URLDecoder.decode(value);  

问题1. 浏览器中看到的 JSP页面中的汉字怎么都成了
可能原因如下: 您的页面中没有指定页面的字符集为中文. 解决方法(适用于Tomcat 4.0和Tomcat 4.1)是在页面中添加如下代码:

 
 
 
  1. <%@ page contentType="text/html;charset=gb2312" %> 
  2.  http-equiv="Content-Type" content="text/html; charset=gb2312"> 

问题2. 通过 POST 方法提交的表单的汉字都显示为乱码(在 Tomcat 4.0 下正常, Tomcat 4.1 下出现).
可能原因如下: POST 提交的字符串都是 ISO8859-1 编码的, 只要把它的字符集转换到中文就行了. 解决方法如下(适用于 Tomcat 4.1):

 
 
 
  1. // 单个的参数  
  2. String result = toChi(request.getParameter("parameterName"));  
  3. // 多个参数  
  4. String values[] = request.getParameterValues(name);  
  5. if(values != null) {  
  6. for(int i = 0; i < values.length; i++) {  
  7. values[i] = toChi(values[i]);  
  8. }  

问题3. 通过 GET 方法提交的表单的汉字都显示为乱码(在 Tomcat 4.0和Tomcat 4.1 下都出现).可能原因如下: GET 提交的字符串都是 ISO8859-1 编码的, 只要把它的字符集转换到中文就行了. 解决方法如下(适用于 Tomcat 4.1, Tomcat 4.0 下不能用于 page.jsp?username=中文):

 
 
 
  1. // 单个的参数  
  2. String result = toChi(request.getParameter("parameterName"));  
  3. // 多个参数  
  4. String values[] = request.getParameterValues(name);  
  5. if(values != null) {  
  6. for(int i = 0; i < values.length; i++) {  
  7. values[i] = toChi(values[i]);  
  8. }  

问题4. Cookie 中不能写入汉字或者汉字无法正确显示.可能原因如下: Tomcat 4.0 下自动把 Cookie 做了编码为 ISO8859-1 的存储, 而 Tomcat 4.1 下的 JSP 引擎不支持包含含有汉字的 Cookie.

Tomcat 4.0 下的解决方法:

 
 
 
  1. // 根据 Cookie 名称得到请求中的 Cookie 值, 如果 Cookie 值是 null, 则返回 ""  
  2. public String getCookieValue(HttpServletRequest request, String name) {  
  3. Cookie[] cookies = request.getCookies();  
  4. if(cookies == null) return "";  
  5. for(int i = 0; i < cookies.length; i++) {  
  6. Cookie cookie = cookies[i];  
  7. if(cookie.getName().equals(name)) {  
  8. // 需要对 Cookie 中的汉字进行 URL 反编码, 适用版本: Tomcat 4.0  
  9. return decode(cookie.getValue());  
  10. }  
  11. }  
  12. // A cookie might not return a null value, may return a ""  
  13. return "";  

Tomcat 4.1 下的解决方法:

 
 
 
  1. // 写入包含汉字 Cookie 的方法  
  2. response.addCookie(new Cookie("cookieName", encode("汉字")));  
  3. // 得到 Cookie 值的方法(同 Tomcat 4.0 的解决方法)  
  4. public String getCookieValue(HttpServletRequest request, String name) {  
  5. Cookie[] cookies = request.getCookies();  
  6. if(cookies == null) return "";  
  7. for(int i = 0; i < cookies.length; i++) {  
  8. Cookie cookie = cookies[i];  
  9. if(cookie.getName().equals(name)) {  
  10. // 需要对 Cookie 中的汉字进行 URL 反编码, 适用版本: Tomcat 4.0  
  11. return decode(cookie.getValue());  
  12. }  
  13. }  
  14. // A cookie might not return a null value, may return a ""  
  15. return "";  

问题5. 在 Tomcat 4.0 下 GET 请求(如: page.jsp?username=中文) 无法返回原来的值.原因: 与 Tomcat 引擎有关, 不论是否转换内码, 均无法返回原来的值, 但是有一个替代方法, 如下:
将URL地址改变为 "page.jsp?username=" + encode("中文")然后使用下列代码取回参数:

 
 
 
  1. // 单个的参数  
  2. String result = toChi(request.getParameter("parameterName")); 

文章标题:Tomcat4.0和Tomcat4.1下JSP页面中文问题解答
标题网址:http://www.shufengxianlan.com/qtweb/news37/263287.html

成都网站建设公司_创新互联,为您提供移动网站建设虚拟主机响应式网站标签优化动态网站关键词优化

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联