UTF-8に問題があります。クライアント(GWTで実現)は、次のように、URLにいくつかのパラメーターを指定して、サーブレットに要求を行います。
http://localhost:8080/servlet?param=value
サーブレットでURLを取得すると、UTF-8文字に問題があります。私はこのコードを使用します:
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String reqUrl = request.getRequestURL().toString();
String queryString = request.getQueryString();
System.out.println("Request: "+reqUrl + "?" + queryString);
...
したがって、このURLを呼び出すと:
http://localhost:8080/servlet?param=così
結果は次のようになります。
Request: http://localhost:8080/servlet?param=cos%C3%AC
文字エンコードを適切に設定するにはどうすればよいですか?
私は以前にこの同じ問題に遭遇しました。使用しているJavaサーブレットコンテナ)が不明ですが、少なくともTomcat 5.x(6.xについては不明)では、request.setCharacterEncoding()
メソッドには実際にはありませんGETパラメーターへの影響:サーブレットの実行時までに、GETパラメーターはTomcatによってすでにデコードされているため、setCharacterEncoding
は何もしません。
これを回避する2つの方法:
コネクターのURIEncoding設定をUTF-8に変更します。 http://Tomcat.Apache.org/Tomcat-5.5-doc/config/http.html を参照してください。
BalusCが提案するように、クエリ文字列を自分でデコードし、(ServletRequest APIを使用するのではなく)手動でパラメータマップに解析します。
お役に立てれば!
HttpServletRequest#getQueryString()javadoc から:
Returns:クエリ文字列を含む文字列、またはURLにクエリ文字列が含まれていない場合はnull。 値はコンテナによってデコードされません。
最後のステートメントに注意してください。したがって、 RL-decodeJava.net.URLDecoder を使用して自分で行う必要があります。
_String queryString = URLDecoder.decode(request.getQueryString(), "UTF-8");
_
ただし、パラメーターを収集する通常の方法は、単に HttpServletRequest#getParameter() を使用することです。
_String param = request.getParameter("param"); // così
_
正しいエンコーディングを使用するように設定した場合、servletcontainerはすでにURLデコードされています。 request.setCharacterEncoding()
は、リクエストURI(GET)ではなく、リクエスト本文(POST)にのみ影響します。 Mirageの回答も参照してください。
POST requestの場合、次の方法で問題を解決しました。
最後に、正しいutf-8キャラクターのデリリーを取得しました。文字列名= request.getParameter( "name");
名前に正しいutf-8文字列が含まれています。
HTTPリクエストパラメータのエンコーディングに影響する多くの要因があります。この問題のシーケンスガイドを参照できます。
1.フォームの受け入れ文字エンコードを確認します。
<form id="edit-box" name="edit-box-name" method="post" accept-charset="UTF-8">
2. httpサーバーのデフォルトの文字エンコード値を確認します。 Apache httpサーバーの場合、"AddDefaultCharset UTF-8"
文字列をhttpd.confファイルに。
3.バックエンドサーバーがある場合は、バックエンドサーバーの文字エンコード値を確認します。 Tomcatバックエンドサーバーの場合、「URIEncoding = "UTF-8"属性をコネクタに追加します。たとえば、
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>
...