【问题标题】:How specify path to .JSP file for request.getRequestDispatcher()?如何为 request.getRequestDispatcher() 指定 .JSP 文件的路径?
【发布时间】:2012-04-02 16:38:57
【问题描述】:

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

【问题讨论】:

    标签: java jsp servlets requestdispatcher


    【解决方案1】:

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

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

    另见:

    【讨论】:

    • 感谢您的回复。如果我不应该引用上下文路径,我应该使用什么?我是否保证无论 WAR 是如何部署的,“/WEB-INF/JSP/MyPage.jsp”都将始终得到解决?如果不是,我应该使用什么来确保可移植性?再次感谢?
    • 如前所述,RequestDispatcher 操作已经相对于当前的 Web 应用程序上下文。如果不是这样,那将是一个安全漏洞,因为您将能够分派到恰好在同一台服务器上运行的完全不同的网络应用程序(甚至不是您的网络应用程序)。您无需担心这里的上下文路径。只需指定一个相对于 web 内容的路径,例如 /WEB-INF/some.jsp
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    相关资源
    最近更新 更多