服务器

位置:IT落伍者 >> 服务器 >> 浏览文章

Tomcat服务器下JSP页中文问题解决方法


发布日期:2020年05月22日
 
Tomcat服务器下JSP页中文问题解决方法

目前 Tomcat 作为一种出色的开放源代码的 JSP 服务器目前在 JSP 的开发过程中获得了广泛的应用 但是作为一款英语国家公司开发的软件 在中文环境下不可避免的会出现一些乱码问题 这里就 Tomcat 和 Tomcat 下的常见中文问题及其解决方法做一个总结 这些方法都已经在 中文版 Windows + JDK 和 中文版 Windows + JDK 下通过了测试

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

// 转换由表单读取的数据的内码到 GB

public String toChi(String input) {

try {

byte[] bytes = inputgetBytes(ISO);

return new String(bytes);

}catch(Exception ex) {

}

return null;

}

// 对给定字符进行 URL 编码

public String encode(String value) {

if(isEmpty(value)) return ;

return URLEncoderencode(value);

}

// 对给定字符进行 URL 解码

public String decode(String value) {

if(isEmpty(value)) return ;

return URLDecoderdecode(value);

}

问题 浏览器中看到的 JSP 页面中的汉字怎么都成了 ? ?

可能原因如下: 您的页面中没有指定页面的字符集为中文 解决方法(适用于Tomcat 和 Tomcat )是在页面中添加如下代码:

<%@ page contentType=text/html;charset=gb %>

<meta httpequiv=ContentType content=text/html; charset=gb>

问题 通过 POST 方法提交的表单的汉字都显示为乱码(在 Tomcat 下正常 Tomcat 下出现)

可能原因如下: POST 提交的字符串都是 ISO 编码的 只要把它的字符集转换到中文就行了 解决方法如下(适用于 Tomcat ):

// 单个的参数

String result = toChi(requestgetParameter(parameterName));

// 多个参数

String values[] = requestgetParametervalues(name);

if(values != null) {

for(int i = ; i < valueslength; i++) {

values[i] = toChi(values[i]);

}

}

问题 通过 GET 方法提交的表单的汉字都显示为乱码(在 Tomcat 和 Tomcat 下都出现)

可能原因如下: GET 提交的字符串都是 ISO 编码的 只要把它的字符集转换到中文就行了 解决方法如下(适用于 Tomcat Tomcat 下不能用于 pagejsp?username=中文):

// 单个的参数

String result = toChi(requestgetParameter(parameterName));

// 多个参数

String values[] = requestgetParametervalues(name);

if(values != null) {

for(int i = ; i < valueslength; i++) {

values[i] = toChi(values[i]);

}

}

问题 Cookie 中不能写入汉字或者汉字无法正确显示

可能原因如下: Tomcat 下自动把 Cookie 做了编码为 ISO 的存储 而 Tomcat 下的 JSP 引擎不支持包含含有汉字的 Cookie

Tomcat 下的解决方法:

// 根据 Cookie 名称得到请求中的 Cookie 值 如果 Cookie 值是 null 则返回

public String getCookievalue(HttpServletRequest request String name) {

Cookie[] cookies = requestgetCookies();

if(cookies == null) return ;

for(int i = ; i < cookieslength; i++) {

Cookie cookie = cookies[i];

if(cookiegetName()equals(name)) {

// 需要对 Cookie 中的汉字进行 URL 反编码 适用版本: Tomcat

return decode(cookiegetvalue());

}

}

// A cookie might not return a null value may return a

return ;

}

Tomcat 下的解决方法:

// 写入包含汉字 Cookie 的方法

responseaddCookie(new Cookie(cookieName encode(汉字)));

// 得到 Cookie 值的方法(同 Tomcat 的解决方法)

public String getCookievalue(HttpServletRequest request String name) {

Cookie[] cookies = requestgetCookies();

if(cookies == null) return ;

for(int i = ; i < cookieslength; i++) {

Cookie cookie = cookies[i];

if(cookiegetName()equals(name)) {

// 需要对 Cookie 中的汉字进行 URL 反编码 适用版本: Tomcat

return decode(cookiegetvalue());

}

}

// A cookie might not return a null value may return a

return ;

}

问题 在 Tomcat 下 GET 请求(如: pagejsp?username=中文) 无法返回原来的值

原因: 与 Tomcat 引擎有关 不论是否转换内码 均无法返回原来的值 但是有一个替代方法 如下:

将 URL 地址改变为 pagejsp?username= + encode(中文)然后使用下列代码取回参数:

// 单个的参数

String result = toChi(requestgetParameter(parameterName));

问题 JavaBean 里使用 <jsp:setProperty id=propName property=* /> 出现中文问题暂时未提供解决方案               

上一篇:Win2000 Server IIS和Tomcat5多站点配置

下一篇:Tomcat类加载机制