Java Servlet getParameter 获取 URL 参数

2024-02-11

我正在构建一个网站,该网站将 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&param2=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(使用前将#替换为@)

Java Servlet getParameter 获取 URL 参数 的相关文章

随机推荐