server.xml で Tomcat のエンコーディングを適切に設定したにもかかわらず、param をデコードしない Java サーブレットの getParameter() に問題があります。
<Connector port.. URIEncoding="UTF-8"/>
生のクエリをデコードすると、デコードされたクエリが取得されますが、getParamter は単独ではデコードされません!
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("CharacterEncoding: "+ request.getCharacterEncoding());
System.out.println("Query String: "+ URLDecoder.decode(request.getQueryString(), "UTF-8");
System.out.println("Query param name: "+request.getParameter("name"));
...
私が得る結果は次のとおりです。
文字エンコーディング: UTF-8
クエリ文字列: name=日本語一番ぜソFOX_&'">•«Ç€Ö™»_αß_iİıI_Администратор_cœur d´Ouchy__عربي
クエリ パラメータ名: æ¥æ¬èªä¸çªãã½ï¼¦ï¼¯ï¼¸_&'">â¢â«ãâ¬ã⢻_αÃ_iİıI_ÐдминиÑÑÑаÑоÑ_cÅur dâ´Ouchy_ð ðª_ع ±Ø¨Ù
クエリと名前の値が同じではないことがはっきりとわかります。私のjspページでは、 <%@page contentType="text/html; charset=UTF-8" %> を使用しています