Java 使用RequestDispatcher将请求从servlet转发到JSP不需要';不要隐藏目标URL
简而言之,我有一个servlet将GET请求转发给JSP,我想对用户“隐藏”目标URL 我的设置如下:Java 使用RequestDispatcher将请求从servlet转发到JSP不需要';不要隐藏目标URL,java,jsp,servlets,forward,requestdispatcher,Java,Jsp,Servlets,Forward,Requestdispatcher,简而言之,我有一个servlet将GET请求转发给JSP,我想对用户“隐藏”目标URL 我的设置如下: 一个servlet,映射到URL“www.mydomain.com/pages/page1” 一个JSP,地址为“/WEB-INF/pages/page1.JSP”,相对于应用程序根。JSP驻留在WEB-INF目录中,以便不能直接从浏览器访问 从浏览器访问时,servlet预处理传入的GET请求,并使用以下代码段将其转发给JSP: request.getRequestDispatcher("/
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的回答中进行了描述,他们成功地“隐藏”了JSP的地址:对我的实现进行了广泛的探索,我能够找出这个问题的原因。确切的源代码太复杂,无法在此发布,事实上与此无关 这个问题是由这行模糊的Javascript引起的,它通过一个scriptlet(过时的实践)从一个单独的实用程序类拉入JSP
window.history.replaceState(null,document.title,sanitizedrl);
出于遗留原因,页面URL正在通过删除其查询字符串的一部分进行“清理”,然后“替换窗口历史记录的状态”。我不确定这是否符合页面重新加载的条件,但不必要的副作用是实际资源URL“www.mydomain.com/WEB-INF/pages/page1.jsp”的出现
一句话:如果您遇到类似的问题,请尝试查找扰乱窗口/文档状态的Javascript这应该可以正常工作。您能否在
web.xml
@W-S中发送您的servlet的完整doGet()
方法和servlet映射
,感谢您确认这也会起作用。这启发了我进行一些调试,并找到了问题的原因。见下面我的答案。
<script type='text/javascript'>
window.history.replaceState(null, document.title, sanitizedURL);
</script>