一尘不染

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

jsp

我对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使用from形成的字符串时request.getContextPath()+"/WEB- INF/JSP/MyPage.jsp",找不到JSP;这将导致404错误-“请求的资源(/MyServer/WEB-
INF/JSP/MyPage.jsp)不可用”。如果我打电话,"/WEB- INF/JSP/MyPage.jsp"我们将启动JSP页面。有人可以解释为什么挂起request.getContextPath()会导致此操作失败,还有什么我应该使用以确保始终解析到.JSP的路径吗?


阅读 769

收藏
2020-06-08

共1个答案

一尘不染

RequestDispatcher操作已经相对于当前Web应用程序上下文进行了操作。您无需在上下文路径前添加前缀。

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

2020-06-08