【问题标题】:URL is being truncated when it is too longURL 过长时被截断
【发布时间】:2012-03-19 15:29:32
【问题描述】:

在 JSP 中,我传递 URL:

http://gmail.com/fs-bin/click?id=VFS63JhSk2k&offerid=99133.10000176&subid=0&u1=1945&type=4

到服务器。但是在服务器端,当从请求中获取 URL 时,req.getParameter("url"),我得到的只是:

http://gmail.com/fs-bin/click?id=VFS63JhSk2k

如何获取整个网址?

【问题讨论】:

    标签: java jsp url jakarta-ee


    【解决方案1】:

    你看到你的getParameter 开始分裂&了吗?这是因为像 http://myserver.com/test.jsp?param1=val1&url=http://gmail.com/fs-bin/click?id=VFS63JhSk2k&offerid=99133.10000176&subid=0&u1=1945&type=4&paramlast=valLast 这样的 URL 将被假定为带有参数的 URL

    param1=val1
    url=http://gmail.com/fs-bin/click?id=VFS63JhSk2k
    offerid=99133.10000176
    subid=0
    u1=1945
    type=4
    paramlast=valLast
    

    在将此 URL 作为参数传递之前,您需要在 JSP 中转义 &。可能的方法之一是

     URLEncoder.encode("http://gmail.com/fs-bin/click?id=VFS63JhSk2k&offerid=99133.10000176&subid=0&u1=1945&type=4", "UTF-8")
    

    【讨论】:

      【解决方案2】:

      您需要在使用之前对 url 进行编码。在作为参数传递之前替换​​ & 和其他特殊的 URL 字符

      //作为参数传递之前

          String url = "http://a.com?a=1&b=2&c=3";
          String encodedUrl = URLEncoder.encode(url,"UTF-8"); 
          System.out.println(" http://anotherdomain.com/page.jsp?url=" + encodedUrl);
      

      //关于JSP

          String decodedUrl = URLDecoder.decode(req.getParameter("url"),"UTF-8"); 
          System.out.println("Dncoded URL " + decodedUrl);
      

      【讨论】:

        【解决方案3】:

        URL url = new URL(request.getRequestURL().toString()); 会给你完整的 URL。

        您还可以获取 URL 的特定部分。检查 java.net.URL 的 java 文档。

        【讨论】:

        • 错误 - 来自 Javadoc "返回的 URL 包含协议、服务器名称、端口号和服务器路径,但不包括查询字符串参数。"
        • @JimGarrison:你是对的。它不包括查询字符串参数。我的错。
        • 感谢大家提供的信息。另一种方法是通过在 Tomcat_Homepath/conf/server.xml 中添加或增加参数“maxHttpHeaderSize”来避免这种情况
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多