Java servlet 的参数值未解码

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

我得到的结果如下:

字符编码:UTF-8

查询字符串:name=日本语一番ぜソFOX_&'">•«Ç€Ö™»_αß_i???I_Администратор_cœur d´Ouchy_𠀀𠄂𪛖_ Seer 巴

查询参数名称: æ¥æ‐èªä¸çªã¸_&'">â⫤àââ»_αà_iä°ä±I_ÐдÐ⁄иниÑÑÑаÑЪÑ_cÅur dâ´ Ouchy_ð ð ðª_Ø1رءÙ

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

最佳答案

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

不清楚您使用的是哪个 IDE,但如果是 Eclipse,您需要编辑 server.xml文件位于工作区的 Servers 项目中,而不是 Tomcat 自己的 /conf/server.xml文件

enter image description here

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

enter image description here

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

另请参阅

关于Java servlet 的参数值未解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10790206/

相关文章:

Python:获取 URL 路径部分

javascript - 无法获取 URL.createObjectURL 中的数据

url - Arduino 以太网客户端仅使用 IP 地址无法工作

java - 从 servlet 过滤器提供静态文件

java - 如何在自定义标签中使用doTag方法添加cookie?

java - 如何启用枚举继承

java - GATE根据查询注释ON TOKEN注释句子

java - Servlet 在应该重定向时给出了空白页面

java - 套接字 - Java 客户端和 NodeJS 服务器

java - PreparedStatements 应该抛出异常而不是警告