[forwarding] Struts2中action接收中文参数为乱码解决方法

老实说,中文乱码问题是每个程序员会经常遇到的问题,而且也是一个很头疼的问题。网上很多关于解决中文乱码的帖子,看几个之后你会发现大都是一样的。但是我们照着做,却还是无法解决乱码问题。我也是看了好多帖子,好多解决方法,最后把几个方法结合起来,修改一下就可以用了。废话少说,下面进入正题。

首先Struts默认的编码方式是utf-8,出现乱码首先检查jsp页面的编码方式是否也是utf-8,也许你会很奇怪,为什么统一了编码方式,还是出现乱码呢?原因是jsp网页发送请求request,默认编码是ISO-8859-1。也就是说,虽然你Jsp页面设置的编码方式是utf-8,但是把中文参数发送出去,系统默认把参数以ISO-8859-1编码方式放到request中了。

下面是针对post方式提交请求解决中文乱码的方法:

 

1.编写过滤器:

package org.filter;


import java.io.IOException;
import java.net.URLDecoder;
 
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.HttpServletResponse;
 
public class CharsetEncodingFilter implements Filter {
	
	@Override   
	public void doFilter(ServletRequest sRequest, ServletResponse sResponse,   
	        FilterChain filterChain) throws IOException, ServletException   
	{   
	    HttpServletRequest request = (HttpServletRequest) sRequest;   
	    HttpServletResponse response = (HttpServletResponse) sResponse;   
	    // 设置字符集   
	    request.setCharacterEncoding("utf-8");   
	    response.setCharacterEncoding("utf-8");   
	      
	    filterChain.doFilter(request, response);   
	}

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
		
	}   
	  
}
	

  

2.配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <!-- <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list> -->
  <!-- 过滤所有的请求的编码为utf-8 -->
  <filter>
    <filter-name>CharsetEncodingFilter</filter-name>
    <filter-class>org.filter.CharsetEncodingFilter</filter-class>
    
  </filter>
  <filter-mapping>
    <filter-name>CharsetEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  
  
  <filter>
      <filter-name>struts2</filter-name>
      <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
      <!-- <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> -->
  </filter>
  <filter-mapping>
  	<filter-name>struts2</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>
  
  
 
  
  
</web-app>

  

通过以上方法,把所有请求的编码方式都设成了utf-8。如果没有用到struts2,上面第二个<filter>开始的代码就不要写上了。用第一个filter就可以了。希望可以帮到更多因为中文乱码烦心的朋友们

posted @ 2013-12-06 22:41  盗草人  阅读(2080)  评论(0编辑  收藏  举报