java—使用requestdispatcher将请求从servlet转发到jsp不会隐藏目标url

4dbbbstv  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(436)

简而言之,我有一个servlet,它将get请求转发给jsp,我想对用户“隐藏”目标url。
我的设置如下:
一个servlet,Map到url“www.mydomain.com/pages/page1"
一个jsp,地址为“/webinf/pages/page1.jsp”,相对于应用程序根。jsp驻留在web inf目录中,以便不能直接从浏览器访问。
从浏览器访问时,servlet预处理传入的get请求,并使用以下代码段将其转发给jsp:

request.getRequestDispatcher("/WEB-INF/pages/page1.jsp").forward(request, response);

期望的行为是浏览器维护url“www.mydomain.com/pages/page1,而用户看到jsp的内容。
不幸的是,浏览器总是切换到显示jsp的url:“www.mydomain.com/web-inf/pages/page1.jsp“(在chrome和firefox中测试)
谁能告诉我,是什么导致了这种行为?
来源:这个解决方案在这个coderanch答案中描述,在这个答案中,他们成功地“隐藏”了jsp的地址:http://www.coderanch.com/t/618800/jsp/java/url-hiding

brtdzjyr

brtdzjyr1#

在对我的实现进行了广泛的探索之后,我能够找出这个问题的原因。确切的源代码太复杂,无法在这里发布,事实上与此无关。
这个问题是由这行模糊的javascript引起的,它通过scriptlet(过时的实践)从一个单独的实用程序类拉入jsp。

<script type='text/javascript'>
  window.history.replaceState(null, document.title, sanitizedURL);
</script>

由于遗留的原因,页面url正在被“清理”,方法是删除其查询字符串的一部分,然后“替换窗口历史记录的状态”。我不确定这是否符合页面重新加载的条件,但不必要的副作用是实际资源url的出现www.mydomain.com/web-inf/pages/page1.jsp"
一句话:如果您遇到类似的问题,请尝试查找扰乱窗口/文档状态的javascript

相关问题