2016-03-28 74 views
0

简而言之,我有一个将GET请求转发到JSP的servlet,我想从用户“隐藏”目标URL 。使用RequestDispatcher将请求从servlet转发到JSP不会隐藏目标URL

我的设置如下:

  1. 一个servlet,映射到URL “www.mydomain.com/pages/page1”
  2. 一个JSP,在地址“/ WEB-INF /页/第1页.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

+1

这应该工作得很好。你可以发送servlet的完整'doGet()'方法和'web.xml'中的'servlet-mapping'。 –

+0

@ W-S,感谢您确认您也希望这能够奏效。这激励我做一些调试,并找出问题的原因。请参阅下面的答案。 – paulkore

回答

0

已经做了一些广泛的关注着我的实现,我能隔离这个问题的原因。确切的源代码太复杂,不能在这里发布,实际上是不相关的。

这个问题是由这个模糊的Javascript行引起的,通过scriptlet(过时的做法)从单独的实用程序类中拉入到JSP中。

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

遗留原因,该页面的网址正在“消毒”通过删除其查询字符串的一部分,然后在“替换窗口历史状态”发生。我不确定这是否符合页面重新加载的要求,但不必要的副作用是显示实际资源URL“www.mydomain.com/WEB-INF/pages/page1.jsp”

Bottom行:如果您遇到类似的问题,请尝试查找与窗口/文档状态相关的Javascript