Java servlet参数值未解码

时间:2012-05-28 20:41:10

标签: java url servlets encoding getparameter

我遇到了java servlet的getParameter()问题,即使我已经在server.xml中正确设置了Tomcat的编码,它也不解码参数。

 <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"));
    ...

我得到的结果如下:

CharacterEncoding:UTF-8

查询字符串:name =日本语一番ぜソFOX_&amp;'“&gt;•«Ç€Ö™»_αß_iİıI_Администратор_cœurd'Ouchy__عربي

查询参数名称:æ¥æ¬èªä¸çªãã½ï¼|OX_&amp;'“&gt;••••••I I dÂ'Ouchy_ðdðª_عرOU

你可以清楚地看到查询和名称的值不一样! 在我的jsp页面中,我正在使用&lt;%@ page contentType =“text / html; charset = UTF-8”%&gt;

1 个答案:

答案 0 :(得分:2)

我知道这涉及GET请求。设置<Connector URIEncoding="UTF-8">应该这样做。它不起作用只能意味着您从像Eclipse这样的IDE内部运行Tomcat,并且在/conf/server.xml编辑Tomcat自己的配置时,IDE尚未配置为接管Tomcat自己的配置。

目前还不清楚你正在使用哪个IDE,但如果它是Eclipse,你需要 编辑工作区的服务器中的server.xml文件相反,而不是Tomcat自己的/conf/server.xml文件

enter image description here

通过双击 Servers 视图中的Tomcat服务器条目并相应地更改服务器位置部分,将Eclipse配置为控制Tomcat的安装。

enter image description here

回到您的调查/修复尝试:request.getCharacterEncoding()未被用于解码GET查询字符串(因为它超出了Servlet API的控制范围),它仅用于解码POST请求主体。 <%@page pageEncoding="UTF-8"%>只会设置响应的字符编码,后续表单会提交。

另见