java - 如何在 servlet 中设置 URL anchor (哈希)?

标签 java url jakarta-ee servlets anchor

简单的问题!不知道为什么谷歌也不知道答案!

在 Java servlet 中,如何在返回给用户时设置 URL anchor (散列)?

最佳答案

URL anchor 仅由浏览器处理,甚至不会到达服务器(它不是请求的一部分)。

这意味着服务器端,无论是在您建议的 servlet 中还是使用任何其他服务器端技术(例如 PHP),您可以重定向到具有 URL anchor 的 URL已设置,但您无法检查您当前正在处理的请求中是否提供了 URL anchor 。

此限制阻止您设置 URL anchor 同时保持 URL 的其余部分不变,因为服务器无法区分带和不带 URL anchor 的地址。

所以,这个,你可以做:这个答案的规范地址是这个

http://stackoverflow.com/a/27988314/4402557

但是服务器将它重定向到这里

http://stackoverflow.com/questions/27987762/how-to-set-url-anchor-hash-in-servlets/27988314#27988314

请注意, anchor 之前的 URL 部分并不相同。

在 HTTP servlet 中,您可以通过使用传递给服务方法的 HTTPServletResponse 对象的 sendRedirect(String) 方法来实现这一点,例如

protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException {

    /* ... */

    response.sendRedirect("http://example.com/your/url#hash");
}

但是,这个,你不能做:重定向这个

http://example.com/some/url

对此

http://example.com/some/url#there

对于服务器而言,两者都是同一个地址,无法区分。这使得无法检查地址是否是第一个(没有 URL anchor 的地址)并且如果是则有条件地重定向。不检查就重定向当然会创建一个重定向循环。

但是,根据您要完成的具体目标,即使您不能在您的 servlet 中完成,您也可以使用客户端脚本(即 JavaScript)来实现。查看 window.location.hash 属性。

关于java - 如何在 servlet 中设置 URL anchor (哈希)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27987762/

相关文章:

url - 如何用服务器端语言获取哈希值?

Java网络应用程序: High Heap Usage and Blocked Threads - at the same time

java - java.util.Scanner 有那么慢吗?

java - 更改 .JSP 文件的名称

c# - 正则表达式 C#

java - 使用 Java Reflection 从对象列表中查找参数总和

java - 通过通用接口(interface)将 EJB 注入(inject)列表

java - 如何使用Spring MVC访问数据库

Java枚举自动递增条目?

java - 递归函数单独工作正常,但一起导致堆栈溢出错误