如何为request.getRequestDispatcher()指定.JSP文件的路径?

时间:2012-04-02 16:38:58

标签: java jsp servlets requestdispatcher

我对request.getContextPath()的含义感到困惑。我的文件布局如下:

MyServer/WebContent:
    /Resources/MyImage.jpg
    /Resources/Scripts/MyScript.js
    /WEB-INF/JSP/MyPage.jsp

MyPage.jsp我可以通过

找到JavaScript和图片
<script src="${pageContext.request.contextPath}/Resources/Scripts/MyScript.js">

<img src="${pageContext.request.contextPath}/Resources/MyImage.img">

由此我得出结论,${pageContext.request.contextPath}动态地解析为“WebContent”文件夹,我理解这将解析为此文件夹,无论它的名称是什么。这是有效的。

然而,从所有这些我得出的结论是,在我的.java代码request.getContextPath()中也会动态地解析为“WebContent”。但是当我尝试使用从MyPage.jsp形成的字符串从.java代码转发到request.getContextPath()+"/WEB-INF/JSP/MyPage.jsp"时,无法找到JSP;这导致404错误 - “请求的资源(/MyServer/WEB-INF/JSP/MyPage.jsp)不可用”。如果我调用"/WEB-INF/JSP/MyPage.jsp",我们就会启动JSP页面。有人可以解释为什么预先挂起的request.getContextPath()会导致这种情况失败,还有什么我应该用来确保始终解决.JSP的路径吗?

1 个答案:

答案 0 :(得分:4)

RequestDispatcher已经相对于当前的Web应用程序上下文运行。您不需要预先添加上下文路径。

为什么在HTML中链接的JS / CSS / image / etc资源需要它只是因为它是必须通过正确的URL路径下载它们的webbrowser。常见的启动者错误是他们认为是网络服务器必须以某种方式通过本地磁盘文件系统路径自动包含它们。因此不是这样。它实际上是一个URL,就像您在浏览器的地址栏中输入的那样。

另见: