strust 2受信URLパラメータが中国語であることは文字化けし問題の解決である

2810 ワード

ここ数日1つのウェブサイトをして、struts 2フレームワークを展示層として、web端のページとインタラクティブにして、その間に1つの問題に出会って、私は長い間困って、私のフロントエンドはajaxで非同期で1つのaction方法を呼び出して、リンクの中でパラメータ(中国語の)があって、actionの中でrequestが受け入れた後にパラメータはすべて文字化けになって、このJSPはstruts 2の中でコードを設定する場所を含めてUTF-8に設定したが、結局この問題が発生した.ネット上で長い間調べて、左は改めてまた改めて、ついにこの問題を解決して、解決策は以下の通りです:
1.パラメータの提出はPOST方式で行う
2.struts.propertiesファイルに追加:struts.locale=zh_CN, struts.i18n.encoding=UTF-8
3.tomcatのserver.xmlファイルに対応する8080ポート番号のファイルにuseBodyEncodingForURI="true"を追加し、 URIEncoding="UTF-8"
4.受信したパラメータを文字コード変換する:new String(request.getParameter(「パラメータ名」).getBytes(「ISO-8859-1」)、「UTF-8」);
この方法は最も力があって、私のはこのように解決したので、もしまだ解決していないならば、EncodeFilterを使いましょう!コードは次のとおりです.
package com.yun.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 EncodeFilter implements Filter{
	protected String encoding=null;   
	  protected FilterConfig filterConfig=null;   
	  protected boolean ignore=true;   
	   
	  public void destroy() {	   
	  }   
	   
	  public void doFilter(ServletRequest servletRequest,   
	  ServletResponse servletResponse, FilterChain filterChain)   
	  throws IOException, ServletException {   	   
	  HttpServletRequest request = (HttpServletRequest) servletRequest;   
	  HttpServletResponse response = (HttpServletResponse) servletResponse;   	   
	  String requestedWith = request.getHeader("x-requested-with");   
	  String type = request.getContentType();   
	  if (requestedWith != null && "XMLHttpRequest".equals(requestedWith)   
	  && null != type   
	  && ("application/x-www-form-urlencoded".equals(type)||"application/x-www-form-urlencoded; charset=UTF-8".equals(type))) {   	    
	  request.setCharacterEncoding("UTF-8");   
	  response.setCharacterEncoding("UTF-8");   
	  request.getParameterMap();   
	  }
	     	   
	  filterChain.doFilter(request, response);   	   
	  }   
	   
	  public void init(FilterConfig arg0) throws ServletException {   
	  // TODO Auto-generated method stub   	   
	  }   
	   
}

次に、プロファイルに次のものを追加します.

   encoding
   com.yun.action.EncodeFilter
   
   encoding
   UTF-8
   
   
   
   encoding
   /*
   

これで基本的に文字化けの問題は解決できますが、もしあなたを助けることができたら、トップを助けましょう.