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就能夠了。但願能夠幫到更多由於中文亂碼煩心的朋友們
相關文章
相關標籤/搜索