2

我对 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”。但是当我尝试从 .java 代码转发到MyPage.jsp使用由 形成的字符串时request.getContextPath()+"/WEB-INF/JSP/MyPage.jsp",找不到 JSP;这会导致 404 错误 - “请求的资源 (/MyServer/WEB-INF/JSP/MyPage.jsp) 不可用”。如果我打电话"/WEB-INF/JSP/MyPage.jsp",我们将启动 JSP 页面。有人可以解释为什么预先挂起request.getContextPath()会导致失败,还有什么我应该使用的东西来确保 .JSP 的路径总是得到解决吗?

4

1 回答 1

4

RequestDispatcher已经相对于当前的 Web 应用程序上下文进行操作。您不需要预先设置上下文路径。

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

也可以看看:

于 2012-04-02T16:43:34.477 回答