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を使いましょう!コードは次のとおりです.
次に、プロファイルに次のものを追加します.
これで基本的に文字化けの問題は解決できますが、もしあなたを助けることができたら、トップを助けましょう.
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
/*
これで基本的に文字化けの問題は解決できますが、もしあなたを助けることができたら、トップを助けましょう.