我正在构建一个网站,该网站将 url 提交给 servlet 以进行分析。在客户端,我将 url 作为编码参数提交。例如...
Submit: http://www.site.com
Goes to: http://localhost/myservlet/?url=http%3A%2F%2Fwww.site.com
在服务器端,我的 servlet 请求参数,如下所示......
String url = request.getParameter("url");
我收到的是一个解码后的字符串:http://www.site.com http://www.site.com。到目前为止一切顺利——大多数情况下都按预期工作。
当 url 参数包含其自己的参数时,就会出现问题...
Submit: http://www.site.com?param1=1¶m2=2
Goes to: http://localhost/myservlet/?url=http%3A%2F%2Fwww.site.com%3Fparam1%3D1%26param2%3D2
在客户端站点上一切都很好,但在我的 servlet 中,当我获取参数时,我只收到部分 url 参数!
http://www.site.com?param1=1
它从我的输入 url 参数中删除了第二个参数!在将 url 参数提交到服务器之前,我肯定会对它进行编码...发生了什么事?
我无法在 Tomcat 6.0.29 上重现您的问题。还有更多的事情。也许链中的过滤器正在对请求对象执行某些操作?
无论如何,这里有一个SSCCE http://sscce.org具有单个 JSP 的风格:
<!DOCTYPE html>
<html lang="en">
<head>
<title>Test</title>
</head>
<body>
<p><a href="?url=http%3A%2F%2Fwww.site.com%3Fparam1%3D1%26param2%3D2">click here</a>
<p>URL: ${param.url}
</body>
</html>
复制、粘贴、运行它并单击链接。在这里我看到以下结果:
点击这里
URL:
使用像这样的简单 servlet 可以重现相同的情况,该 servlet 由浏览器地址栏直接调用:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().write(request.getParameter("url"));
}
Tomcat 顺便配置了URIEncoding="UTF-8"
在 HTTP 连接器中,但即使使用ISO-8859-1
(这是默认设置),行为与本例中的预期相同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)