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

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

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

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

1.编写过滤器:

package apl.osm.action;

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.HttpServletResponse;


public class CharsetEncodingFilter implements Filter {

	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");   
	    //System.out.println("doFilter..");
	    filterChain.doFilter(request, response);   
	}


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

	public void init(FilterConfig arg0) throws ServletException {
		System.out.println("init");
	}   

}


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就可以了。

扫描二维码关注公众号,回复: 6532316 查看本文章

猜你喜欢

转载自blog.csdn.net/gmaaa123/article/details/90383771