`
k_lb
  • 浏览: 796093 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论
  • kitleer: 据我所知,国内有款ETL调度监控工具TaskCTL,支持ket ...
    kettle调度

关于MyEclipse6+struts中文乱码问题

 
阅读更多

参考《MyEclipse 6 java 开发中文教程》。
一、Tomcat JSP Web 开发中的乱码问题小结
1. 静态页面的乱码问题
文件的编码和浏览器要显示的编码不一致。
1) 检查文件原始的编码, 可以用记事本打开, 然后选择另存为来看;
2) 给当前页面加入一个指令来建议浏览器用指定的编码来显示文件字符内容。
<meta http-equiv="content-type" content="text/html; charset=GBK">
3) 如果系统是英文XP,没装东亚字符集支持, 也会显示乱码。
2. JSP 页面的乱码问题
1) page 指令有个 pageEncoding="GBK" 这个会指定当前页面保存的编码, 如果写成ISO8859-1 就不能保存汉字;
2) page 指令的 contentType="text/html; charset=ISO8859-1" 也会像静态页面一样让浏览器来优先选择一种编码。如果JSP 乱码的话,一般就显示成?,而且不管你给浏览器选什么样的编码,它都不能正确显示
3. 表单提交的乱码问题(Tomcat 特有)
1)POST 的乱码
a. 首先浏览器提交表单的编码是根据表单所在页面来决定的, 而不是根据提交后的JSP 页面的编码来决定的. 把所有的页面的编码都设置成一样的,例如 GBK。
b. 处理方式就是在获取参数之前设置编码:
request.setCharacterEncoding("GBK");
c. 可以用过滤器的方式来解决, Tomcat 已经带了一个现成的:
apache-tomcat-5.5.23/webapps/jsp-examples/WEB-INF/classes/filters/SetCharacterEncodingFilter.java
web.xml
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2) GET 方式的乱码
用 setCharacterEncoding() 不能解决. TOMCAT 的一个BUG, GET 方式传送的表单参数总是用的 ISO8859-1 编码. 我们要把它转成 GBK 方式。
String username = request.getParameter("username");
System.out.println(username);
// 转码, 先取得原始的二进制字节数组
byte[] data = username.getBytes("ISO8859-1");
// 根据新的字符集再构造新的字符串
username = new String(data, "GBK");
小结:
所有的页面(除了最后的 GET 的乱码问题)都用统一的编码(GBK 或者UTF-8), 就不会出现
乱码问题。
二、用过滤器来一次编码彻底解决表单参数的乱码问题
1、目前网上流行是用如下程序:
package filters;

import javax.servlet.Filter;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.FilterChain;
import java.io.IOException;
public class TomcatFormFilter implements Filter {
protected FilterConfig filterConfig;
protected String encodingName;
protected boolean enable;
public TomcatFormFilter() {
this.encodingName = "UTF-8";
this.enable = false;
}
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
loadConfigParams();
}
private void loadConfigParams() {
//encoding
this
.encodingName = this.filterConfig.getInitParameter("encoding");
//filter enable flag
String strIgnoreFlag = this.filterConfig.getInitParameter("enable");
if (strIgnoreFlag.equalsIgnoreCase("true")) {
this.enable = true;
}
else {
this.enable = false;
}
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
if(this.enable) {
request.setCharacterEncoding(
this.encodingName);
}
chain.doFilter(request, response);
}
public void destroy() {
}
}
然后,需要在web.xml中注册过滤器类:
<filter>
<filter-name>TomcatFormFilter</filter-name>
<filter-class>filters.TomcatFormFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
<init-param>
<param-name>enable</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>TomcatFormFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这段程序对静态页面、JSP页面以及表单POST乱码问题能够起到效果。在使用这段代码注意以下几点:
1)在JSP表单中如果未指定提交方式,控制器默认将按POST方式提交。
2)web.xml中,如果我们用<param-value>UTF-8</param-value>代替<param-value>GBK</param-value>,解决中文乱码没有效果。
3)对Tomcat服务器中表单GET方式的中文乱码问题是无能为力的。

为了彻底解决以上所有的中文乱码问题,推荐《MyEclipse 6 java 开发中文教程》一文中的例程如下(web.xml中的内容可参考以上不变):
package filters;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

public class TomcatFormFilter implements Filter {
class Request extends HttpServletRequestWrapper {
public Request(HttpServletRequest request) {
super(request);
}

// 转换由表单读取的数据的内码. 从 ISO 字符转到 GBK.
public String toChi(String input) {
try {
byte[] bytes = input.getBytes("ISO8859-1");
return new String(bytes, "GBK");
} catch (Exception ex) {
}
return null;
}

// Return the HttpServletRequest holded by this object.
private HttpServletRequest getHttpServletRequest() {
return (HttpServletRequest) super.getRequest();
}

// 读取参数 -- 修正了中文问题.
public String getParameter(String name) {
return toChi(getHttpServletRequest().getParameter(name));
}

// 读取参数列表 - 修正了中文问题.
public String[] getParameterValues(String name) {
String values[] = getHttpServletRequest().getParameterValues(name);
if (values != null) {
for (int i = 0; i < values.length; i++) {
values[i] = toChi(values[i]);
}
}
return values;
}
}
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpreq = (HttpServletRequest) request;
if (httpreq.getMethod().equals("POST")) {
request.setCharacterEncoding("GBK");
} else {
request = new Request(httpreq);
}
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
}
}

分享到:
评论

相关推荐

    Struts+Hibernate+MyEclipse+Tomcat+MySQL的乱码之解决篇

    Struts Hibernate MyEclipse Tomcat MySQL JSP 乱码 编码出错 内码设定

    Struts+Hibernate+MyEclipse+Tomcat+MySQL的乱码之解决

    显示界面,JSP 2.0 JAVA容器:Tomcat 5.X MVC构架:Struts 1.2 ORM工具:Hibernate 3 数据库:MySQL 5.0 编译IDE:MyEclipse 5.0

    解决Struts中文乱码问题

    解决myeclipse Struts中文乱码问题视频

    公告管理系统(JSP+Struts)(Java EE项目案例)

    如果上面5步都没问题,你就不存在中文乱码问题。 ====================================================== 数据库使用的是MySQL,其版本为5.0.45 版本。 数据库的用户名及密码均为root。 使用的时候,请参考附件...

    struts2文件下载(解决了中文乱码问题)

    Myeclipse 6.5, JDK1.6,Tomcat 6.0 未解决点击取消报错的问题,可能是jdk版本问题

    j2ee项目中中文乱码问题集锦

    j2ee项目中中文乱码问题集锦 》》》》 6 如果用Eclipse开发,把工程编码改为utf-8 7 用myeclipse提供的数据库前端工具,URL也进行设置 jdbc:mysql://localhost:3306/mysql?useUnicode=true&;characterEncoding=...

    《MyEclipse 6 Java 开发中文教程》前10章

    Tomcat JSP Web 开发中的乱码问题小结 164 第九章 开发Struts 1.x应用 166 9.1 介绍 166 9.2 创建Struts项目 168 9.2.1 创建Web项目 169 9.2.2 加入 Struts开发功能 169 9.3 使用Struts工具 171 9.3.1 Struts配置...

    java web技术开发大全(最全最新)

    4.7.3 实例:解决服务端程序读取中文请求消息的乱码问题 4.7.4 实例:用AJAX技术发送和接收中文信息 4.7.5 实例:在请求消息头和响应消息头中转输中文 4.8 小结 第5章 JSP技术 5.1 用MyEclipse编写第一个...

    java web开发技术大全

    4.7.3 实例:解决服务端程序读取中文请求消息的乱码问题 4.7.4 实例:用AJAX技术发送和接收中文信息 4.7.5 实例:在请求消息头和响应消息头中转输中文 4.8 小结 第5章 JSP技术 5.1 用MyEclipse编写第...

    网上书店系统(Struts+Hibernate)(Java EE项目案例)

    如果上面5步都没问题,你就不存在中文乱码问题。 ====================================================== 数据库使用的是MySQL,其版本为5.0.45 版本。 数据库的用户名及密码均为root。 使用的时候,请参考附件...

    struts2国际化的实例

    实现在struts2的配置中解决中文乱码问题的具体实例web代码,用MyEclipse完成的

    Struts1教程帮助大家学习吧

    在这篇文章中将以一个简单的例子(mystruts)来演示如何使用MyEclipse来开发、运行Struts程序,并给出了解决ActionForm出现乱码问题的方法。读者可以从本文中了解开发Struts 1.x程序的基本过程。

    strust2 datetime picker

    本例主要反映 strust2 不能显示datetimepicker日期的问题。 案例简单明了,亲测可用。 在struts2中,不能显示...本例中struts2-dojo-plugin-2.1.6.jar经过优化,不会出现乱码的日期。 项目可以直接导入myeclipse运行。

    struts2入门实例

    自己学习STRUT2时写的一个实例,用MYECLIPSE6.0开发的,里面包含了所需的JAR包,这个实例重写了FILTER过虑器,解决了中文乱码问题,请求编码在WEB.XML中修改,我设置的是UTF8编码,大家可以下下来看看效果,对于入门...

    网上文件管理系统(Struts)(Java EE项目案例)

    如果上面5步都没问题,你就不存在中文乱码问题。 ====================================================== 数据库使用的是MySQL,其版本为5.0.45 版本。 数据库的用户名及密码均为root。 使用的时候,请参考附件...

    从J2SE到J2EE知识点介绍

    3. 关于jsp在MyEclipse中打开的乱码问题 138 4. 关于html页面在eclipse中打开出现乱码情况 139 5. JSP页面通过URL传递中文参数的乱码问题 139 四、 Struts2 140 (一) 基于struts2的web应用的开发步骤 140 1. MVC设计...

    基于JSP企业车辆管理系统设计软件程序源码+数据库+WORD毕业设计论文文档.zip

    3.2中文乱码问题处理 16 第四章 系统功能实现 18 4.1系统登陆页面实现 18 4.2总体功能模块 19 4.2.1注册会员管理 20 4.2.1类别信息管理 22 4.2.3商品信息管理 24 4.2.4系统管理 26 4.2.5修改密码 28 4.2.6退出系统 ...

    个性化定制系统(Ajax+Spring+Hibernate)(Java EE项目案例)

    如果上面5步都没问题,你就不存在中文乱码问题。 ====================================================== 数据库使用的是MySQL,其版本为5.0.45 版本。 数据库的用户名及密码均为root。 使用的时候,请参考附件...

    Java Web应用详解.张丽(带详细书签).pdf

    11.3 Struts 开发中的中文乱码问题 11.4 Action 数据获取与传递 11.5 Struts 表单验证 第12章 标签库及其应用 12.1 Struts标签库基础知识 12.2 Struts标签库应用实例 12.3 JSTL基础知识 12.4 EL表达式基础...

Global site tag (gtag.js) - Google Analytics