struts中文编码解决办法(三种)

办法1: 
对于处理 Struts Framework 中文编码问题有多种方式,在此我们尝试继承 ActionServlet 类并覆盖 process 方法,于子类process 方法中设定请求编码。由此展现ActionServlet 扮演前端Controller 之特质。 
package myown.struts; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import org.apache.struts.action.ActionServlet; 
public class ActionServletUTF8Encoding extends ActionServlet { 
protected void process(HttpServletRequest request,HttpServletResponse response) 
throws java.io.IOException, javax.servlet.ServletException { 
//如果JSP用GB2312 
request.setCharacterEncoding("GB2312"); 
super.process(request, response); 


然后,在web.xml中,做如下设定即可: 
<servlet-name>action </servlet-name> 
<servlet-class> myown.struts.ActionServletUTF8Encoding </servlet-class> 

办法2: 
更改文件\org\apache\struts\util\PropertyMessageResources.java 
将第289行的:messages.put(messageKey(localeKey, key),props.getProperty(key)); 
改成下面的代码: 
String sProps = props.getProperty(key); 
try 

sProps = new String(sProps.getBytes("ISO-8859-1"),"GB2312"); 

catch (Exception e) 

e.printStackTrace(); 

messages.put(messageKey(localeKey, key),sProps); 
编译后替换原有STRUTS.JAR中的PropertyMessageResources类 


办法3: 
在工程中加入2个类filters.RequestDumperFilter、filters.SetCharacterEncodingFilter,修改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>GB2312 </param-value> 
</init-param> 
<init-param> 
<param-name>ignore </param-name> 
<param-value>true </param-value> 
</init-param> 
</filter> 
<filter-mapping> 
<filter-name>Set Character Encoding </filter-name> 
<url-pattern>*.do,/* </url-pattern> 
</filter-mapping> 
/** 
*SetCharacterEncodingFilter 代码如下 
*/ 
package filters; 
import javax.servlet.*; 
import java.io.IOException; 

public class SetCharacterEncodingFilter implements Filter { 

protected String encoding = null; 
protected FilterConfig filterConfig = null; 
protected boolean ignore = true; 

public void destroy() { 
this.encoding = null; 
this.filterConfig = null; 


public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) 
throws IOException, ServletException { 
if (ignore || (request.getCharacterEncoding() == null)) { 
String encoding = selectEncoding(request); 
if (encoding != null) 
request.setCharacterEncoding(encoding); 

chain.doFilter(request, response); 


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); 

你可能感兴趣的:(struts)