最近工作中遇到一些中文乱码的问题,其中包括在struts1框架下,通过form的打拼的属性值,如果为中文的话,在Action中得到值全部为“?”
网上找了一些解决的方法,主要有两种,一是添加过滤器,二是重写 RequestProcessor。两种方法在我的系统中只有前者试验成功了,现在把这个解决方案分享一下,也算备份一下!
首先,定义一个过滤器 SetCharacerEncodingFilter.java
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.Filter;
import javax.servlet.FilterConfig;
import javax.servlet.FilterChain;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
public class SetCharacterEncodingFilter extends HttpServlet implements Filter {
protected String encoding = null;
protected FilterConfig filterConfig = null;
protected boolean ignore = true;
/*
* (non-Javadoc)
*
* @see javax.servlet.Filter#destroy()
*/
@Override
public void destroy() {
this.encoding = null;
this.filterConfig = null;
}
/*
* (non-Javadoc)
*
* @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest,
* javax.servlet.ServletResponse, javax.servlet.FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
MyRequest req = new MyRequest((HttpServletRequest) request, this.encoding);
chain.doFilter(req, response);
}
/*
* (non-Javadoc)
*
* @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
*/
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
String value = filterConfig.getInitParameter("ignore");
if (value == null) {
this.ignore = true;
} else if (value.equalsIgnoreCase("true")) {
this.ignore = true;
} else if (value.equalsIgnoreCase("yes")) {
this.ignore = true;
} else {
this.ignore = false;
}
}
/*
*
*/
protected String selectEncoding(ServletRequest request) {
return (this.encoding);
}
}
然后,再定义一个代理请求MyRequest.java,这是关键,这个类来处理数据的编码方式的转换
new String(input.getBytes("ISO-8859-1"), "UTF-8");
import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServletRequest;
public class MyRequest extends javax.servlet.http.HttpServletRequestWrapper {
HttpServletRequest request;
String formate;
public MyRequest(HttpServletRequest request, String format) {
super(request);
this.request = request;
this.format = format;
}
@Override
public String[] getParameterValues(String name) {
String strs[] = super.getParameterValues(name);
for (int i = 0; i < strs.length; i++) {
strs[i] = this.myEncoding(strs[i]);
}
return strs;
}
private String myEncoding(String input) {
String output = "";
try {
output = new String(input.getBytes("ISO-8859-1"), this.format);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return output;
}
}
最后再把这个过滤器配置到web.xml中去。
<filter>
<filter-name>Encoding</filter-name>
<filter-class>
com.asus.hzia.pms.server.SetCharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
分享到:
相关推荐
解决这个问题通常涉及到编码设置的调整,下面将详细介绍两种方法来解决Struts中的中文乱码问题。 **方法一:配置Filter** 1. **添加过滤器**:首先,我们需要在Web应用的`web.xml`文件中添加一个`...
本文将深入探讨如何解决Struts框架下的中文乱码问题。 首先,我们来看一个具体的实例。在登录验证的例子中,原本只要用户名(username)和密码(userpass)都是"123"就会返回成功页面。现在,我们将其升级,要求...
但在Struts 2.1.6版本中,这个配置对POST请求的中文乱码问题无效,这是一个已知的bug。升级到2.1.8.1或更高版本可以修复这个问题,因为官方已经改进了过滤器处理字符编码的方式。 2. **POST乱码问题**: POST请求...
本文将详细介绍几种解决Struts2中文乱码问题的方法。 #### 方法一:设置JSP页面编码 首先,可以在JSP页面中设置正确的字符集编码。例如,可以将页面编码设置为`GB18030`,这是一种兼容GB2312、GBK,并支持更多汉字...
下面将详细介绍如何解决Struts2中的中文乱码问题。 #### 一、理解中文乱码的原因 中文乱码主要出现在以下几个方面:页面乱码、Action乱码以及数据库乱码。具体来说: 1. **页面乱码**:指用户在浏览器中看到的...
本文将深入探讨Struts框架中中文乱码的问题,并提供一系列有效的解决方案。 ### Struts框架简介 Struts是一个开源的MVC(Model-View-Controller)框架,主要用于简化Java Web应用程序的开发。它基于Servlet和JSP...
Struts是一个非常流行的Java Web应用程序框架,用于构建和管理MVC(模型-视图-控制...如果你的项目中仍然存在乱码问题,建议参考提供的“Struts中文乱码解决方案.doc”文档,它可能包含了更详细的排查步骤和解决方案。
解决myeclipse Struts中文乱码问题视频
#### 二、Struts中文乱码问题分类 根据乱码出现的位置与场景不同,可将其大致分为以下几种类型: 1. **页面显示中文乱码** 2. **传递参数中文乱码** 3. **国际化资源文件乱码** 下面我们将针对每一种情况,详细...
总结来说,解决Struts下的汉字乱码问题,需要从页面、过滤器、服务器配置和Struts核心Servlet等多方面进行设置,确保在整个请求生命周期中,中文字符始终以正确的编码进行处理。这不仅涉及了前端的展示,还涉及到...
总结来说,解决Eclipse Struts中文乱码问题主要涉及页面编码设置、请求参数处理以及资源文件的正确编码。通过调整相应的配置和使用合适的工具,可以有效避免和解决这些问题,确保中文字符的正常显示和处理。
### Struts 1.2 中文乱码问题详解与解决方案 #### 一、问题背景及原因分析 在 Web 应用开发过程中,特别是在使用 Java 的 Struts 1.2 框架时,中文乱码问题是开发者经常遇到的一个难题。这不仅影响用户体验,还会...
在Struts2.0框架中,这一问题尤为突出,因为不当的编码设置会直接导致用户界面显示错误或者数据处理时出现乱码。本文将深入探讨如何在Struts2.0中解决中文乱码问题,确保应用程序能够正确地处理和显示中文字符。 ##...
这里我们将详细探讨如何解决 Struts 中的中文乱码问题。 一、在 Action 类中的解决方法: 当在 Action 类中遇到中文乱码问题时,可以使用以下代码进行转换。创建一个静态工具类,如 `Chinese`,并定义一个 `...
本DEMO是为了解决Struts2在处理中文输入时可能出现的乱码问题,确保系统能够正确地接收和显示中文字符。 首先,我们要理解乱码产生的原因。在Web应用中,数据的传输通常涉及多种编码方式,如HTTP请求的默认编码通常...
通过以上步骤,一般可以解决Struts 2.5.2框架下的中文乱码问题。但请注意,每个项目可能有不同的配置和需求,因此在实际应用中,还需要根据具体情况进行调试和调整。 在`myStruts`这个压缩包中,可能包含了示例代码...
本文将深入探讨一个关于Struts2在Internet Explorer(IE)浏览器中出现中文乱码的奇怪问题及其解决方案。 首先,中文乱码问题通常涉及到几个关键因素:数据库编码、开发文件编码和网页的Content-Type编码。在确保这...
本篇文章将详细介绍Struts2中出现中文乱码的原因及解决方案,帮助开发者更好地理解和解决这一问题。 #### 二、Struts2中文乱码问题概述 在Struts2应用中,当处理包含中文字符的数据时,可能会遇到乱码的问题。这种...
总结来说,解决Struts框架下Ajax发送中文乱码问题的关键在于: 1. 确保Ajax请求时设置正确的`Content-Type`,以UTF-8编码发送数据。 2. 在Struts配置文件中配置`CharacterEncodingFilter`或在Action中手动设置请求...