繁体   English   中英

在RequestDispatcher的前向URL中使用哈希符号

[英]Using hash symbol in forward URL with RequestDispatcher

我正在尝试将请求转发到另一个包含哈希符号('#')的URL:

request.getRequestDispatcher("/some/path.jsp#somehash").forward(request, response);

但是,Tomcat告诉我“请求的资源不可用”。 如果我从URL中删除哈希,一切正常。 哈希是不允许的,还是我不对他们对待?

#符号是浏览器的东西,而不是服务器的东西。 当您在浏览器中键入带有#的URL时,浏览器不会将该部分发送到服务器。 它在没有它的情况下发送URL,然后在获取页面时跳转到命名锚点。

当您要求容器为您获取该URL时,它不会将# /some/path.jsp#somehash与任何其他URL区别对待 - 它没有特殊含义,因此它会查找名为/some/path.jsp#somehash的JSP页面,这当然不存在。

你需要以某种方式在客户端保持跳转到锚点的逻辑。 也许您可以在结果页面上放置一些javascript以滚动到文档中的那一点。

URL片段纯粹是客户端。 RequestDispatcher#forward()完全是服务器端的。 前向给定URL中的内容不会发送到客户端。 但是,您可以使用HttpServletResponse#sendRedirect() 重定向到给定的URL。 然后,URL片段将被发送到客户端,并反映在浏览器地址栏中。 然而,重定向请求的缺点是当前请求将被填充并且将创建一个全新的请求。 如果那是不可承受的,那么你确实必须在JavaScript角落寻找解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM