![](/img/trans.png)
[英]Servlet forwarding to JSP using RequestDispatcher causing 500 Internal Server Error
[英]Forwarding a request from servlet to JSP using RequestDispatcher doesn't hide the target URL
简而言之,我有一个将GET请求转发到JSP的servlet,并且我想“隐藏”用户的目标URL。
我的设置如下:
从浏览器访问后,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答案中进行了描述,在该解决方案中,它们成功地“隐藏”了JSP的地址: http : //www.coderanch.com/t/618800/JSP/java/Url-hiding
在对实现进行了一些深入研究之后,我得以找出导致此问题的原因。 确切的源代码太复杂了,无法在此处发布,实际上是无关紧要的。
该问题是由于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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.