【问题标题】:How can i read html anchor in java servlet?如何在 java servlet 中读取 html 锚点?
【发布时间】:2010-11-25 10:59:00
【问题描述】:

我需要从请求中获取所有参数,包括“#”之后的参数。 例子: 请求:http://myserver/m#q=abc 我需要我的服务器获取“#”之后的所有参数,因为它们在“?”之后的位置。 我怎样才能做到这一点? 10倍, 科比

【问题讨论】:

    标签: java html


    【解决方案1】:

    RFC 1738 中提到的锚点或 URL 片段在请求资源时不会由客户端发送到服务器。基本原理是片段 URL 用于识别资源中的位置,而不是服务器上的不同资源。为了识别资源中的位置,客户端需要从服务器获取完整的资源,这个过程不需要涉及到片段信息的传输(因为它对服务器没有任何意义)。

    如果您确实希望使用包含片段的 URL 通过查询字符串提交信息,则必须确保查询字符串位于 URL 片段之前。如果您自己构建请求,这可能是您的客户端代码中的错误。如果您负担得起,请将请求构造逻辑留给浏览器。

    如果您确实希望将片段字符 (#) 发送到服务器,那么您需要在查询字符串中对其进行编码,否则客户端(浏览器)在发送向服务器请求。

    关于 SO 的相关问题

    1. JSP Servlet anchor
    2. How to obtain anchor part of URL after # in php

    【讨论】:

      【解决方案2】:

      请记住,锚点是客户端概念,因此不应在服务器端使用它们。客户端不会将锚数据发送到服务器,因此您不能这样做。更好地使用 get 参数。

      【讨论】:

      • request.getRequestURI() 返回“m”,没有 q=abc request.getQueryString() 返回 null...
      • 你确定没有发到服务器吗?关于它的任何文件?如果可以确定我可以在 javascript 上重定向并将“#”替换为“?”,但我更喜欢不重定向(出于 SEO 原因)。
      • 我很好奇当您为站点添加书签时说 xyz.com#fragment 的情况:然后 xyz.com 重定向到 SSO 站点,用户在该站点登录并将被重定向到 xyz.com,因为 #片段从未发送到 SSO 服务(它可能在其查询字符串或 POST 参数中收到了类似 requestingApp=http%3A%2F%2Fxyz.com 的信息)
      • 嗯,是的,你失去了锚。您对此无能为力。
      【解决方案3】:

      你不能这样做。 URI spec 说:

      对文档特定部分的引用(包括片段标识符)可能看起来像

      http://www.myu.edu/org/admin/people#andy
      

      在这种情况下,字符串“#andy”不会发送到服务器,而是 由客户端保留并在整个对象已被使用时使用 检索到。

      【讨论】:

        猜你喜欢
        • 2023-03-20
        • 2016-04-19
        • 1970-01-01
        • 2023-04-01
        • 1970-01-01
        • 2016-12-19
        • 1970-01-01
        • 1970-01-01
        • 2015-12-25
        相关资源
        最近更新 更多