简而言之,我有一个servlet将一个GET请求转发给一个JSP,我想"隐藏"来自用户的目标网址。
我的设置如下:
从浏览器访问时,servlet预处理传入的GET请求,并使用以下代码片段将其转发到JSP:
request.getRequestDispatcher("/WEB-INF/pages/page1.jsp").forward(request, response);
当用户看到JSP的内容时,所需的行为是浏览器维护URL" www.mydomain.com/pages/page1" ;.
不幸的是,浏览器一直切换到显示JSP的URL:" www.mydomain.com/WEB-INF/pages/page1.jsp" (在Chrome和Firefox中测试)
有谁能告诉我,可能导致这种行为的原因是什么?
来源: 这个解决方案在CodeRanch的答案中有所描述,他们在这个答案中成功地隐藏了#34; JSP的地址:http://www.coderanch.com/t/618800/JSP/java/Url-hiding
答案 0 :(得分:0)
在我的实现中做了一些广泛的讨论,我能够找出这个问题的原因。确切的源代码太复杂了,无法在此发布,实际上是无关紧要的。
问题是由这个模糊的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