Java 如何为request.getRequestDispatcher()指定.JSP文件的路径?
我对request.getContextPath()的含义感到困惑。我的文件布局如下:Java 如何为request.getRequestDispatcher()指定.JSP文件的路径?,java,jsp,servlets,requestdispatcher,Java,Jsp,Servlets,Requestdispatcher,我对request.getContextPath()的含义感到困惑。我的文件布局如下: MyServer/WebContent: /Resources/MyImage.jpg /Resources/Scripts/MyScript.js /WEB-INF/JSP/MyPage.jsp 在MyPage.jsp中,我可以通过 及 由此我得出结论,${pageContext.request.contextPath}动态解析为“WebContent”文件夹,据我所知,无
MyServer/WebContent:
/Resources/MyImage.jpg
/Resources/Scripts/MyScript.js
/WEB-INF/JSP/MyPage.jsp
在MyPage.jsp
中,我可以通过
及
由此我得出结论,${pageContext.request.contextPath}
动态解析为“WebContent”文件夹,据我所知,无论该文件夹的名称如何,它都将解析为该文件夹。这是有效的
然而,从所有这些我得出结论,回到我的.java代码
请求中,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的路径始终得到解析?RequestDispatcher已经相对于当前web应用程序上下文运行。您不需要预先设置上下文路径
用HTML链接的JS/CSS/image/etc资源之所以需要它,仅仅是因为Web浏览器必须通过正确的URL路径下载它们。一个常见的开始错误是,他们认为是Web服务器以某种方式通过本地磁盘文件系统路径自动包含它们。因此,情况并非如此。它必须是一个URL,就像您在浏览器地址栏中输入的URL一样
另见:
RequestDispatcher
已经相对于当前web应用程序上下文运行。如果没有,这将是一个安全漏洞,因为您可以将它发送到一个完全不同的webapplication(甚至不是您的webapplication),它恰好运行在同一台服务器上。您不必担心这里的上下文路径。只需指定与webcontent相关的路径,如so/WEB-INF/some.jsp
。感谢您的回复。如果我不应该引用上下文路径,我应该使用什么?我是否可以保证“/WEB-INF/JSP/MyPage.JSP”将始终得到解决,无论战争如何部署?如果没有,我应该使用什么来确保可移植性?再次感谢?如上所述,RequestDispatcher
已经相对于当前web应用程序上下文运行。如果没有,这将是一个安全漏洞,因为您可以将它发送到一个完全不同的webapplication(甚至不是您的webapplication),它恰好运行在同一台服务器上。您不必担心这里的上下文路径。只需指定一个相对于webcontent的路径,如so/WEB-INF/some.jsp
。