2016-04-12 26 views
0

のTomcat 8にサーブレットによって復号化することはできません。ISO-8859-1エンコードされたURLが正しく、私はこのような単純なサーブレットを持って

public class MyServlet extends HttpServlet { 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     request.setAttribute("processedName", request.getParameter("name")); 
     request.setAttribute("processedQueryString", request.getQueryString()); 
     request.getRequestDispatcher("index.jsp").forward(request, response); 
    } 
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
     doGet(req, resp); 
    } 
} 

index.jspは、このようなものです:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Title</title> 
</head> 
<body> 
    <form action="MyServlet" method="get"> 
     Name: <input type="text" name="name"> 
     <input type="submit" value="Submit"> 
    </form> 
    <br> 
    After: <%=request.getAttribute("processedName") %> 
    <br> 
    Query String: <%=request.getAttribute("processedQueryString") %> 
</body> 
</html> 

フォームにThomásと入力して送信すると、Thom?sが印刷されます。

ブラウザでURLやJSPでのクエリ文字列の両方が、ブラウザが正しく%E1としてISO-8859-1 á文字をエンコードしているが、何らかの理由で.getParameterはそれを正しくデコードされていません。name=Thom%E1s

を表示します

ここでは、人々がISO-8859-1以外の文字を提出しようとしたときに(áと違って)このような投稿が多数見られました。 Tomcat 8はISO-8859-1をデコードのデフォルトとして使うべきではありませんか?

奇妙なことに、accept-charset="UTF-8"を自分のフォームに入れても機能します。メソッドをmethod="post"に変更した場合、それは機能します。 accept-charset="UTF-8"method="post"の両方を混ぜても機能しません(今はThomásが印刷されます)。

getメソッドではUTF-8を、postメソッドではISO-8859-1を待っているかのようです。

+0

この記事のガイドを確認してください。http://stackoverflow.com/questions/138948/how-to-get-utf-8-working-in-java-webapps –

答えて

0

プロパティorg.apache.catalina.STRICT_SERVLET_COMPLIANCEtrueに設定されている場合を除き、tomcat 8のデフォルトのURIエンコードはUTF-8です。ただし、ISO-8859-1です。

次を追加しようとすることができ、あなたの場合は

URIEncoding="ISO-8859-1" 

あなたserver.xmlファイルでConnector要素に。

すべての詳細については、tomcat documentationを参照してください。

関連する問題