如何知道真实路径

时间:2013-10-03 12:45:12

标签: jsp

我正在建立一个包含一些子文件夹的小站点。 我不知道jsp页面会有多少subfoler,所以我需要一种方法来了解我的web应用程序的真实路径,以便做这样的事情:

<link rel="stylesheet" type="text/css" href="<%=realpath%>/Style.css" >

而不是这样做

<link rel="stylesheet" type="text/css" href="../Style.css" >
<link rel="stylesheet" type="text/css" href="../../Style.css" >
<link rel="stylesheet" type="text/css" href="../../../Style.css" >

我用过这个。

ServletContext context = session.getServletContext();
String path = getServletContext().getRealPath("/");

但它不起作用,即使路径似乎是正确的(当我在屏幕上打印时),当我打开jsp页面时,我找不到CSS。

1 个答案:

答案 0 :(得分:2)

你犯了一个概念上的错误。 Web浏览器通过URL下载CSS文件,同时解析检索到的HTML输出,而不是由Web服务器通过磁盘文件系统路径神奇地内联,同时产生您想象的HTML输出。所以整个“真实路径”方法是错误的。您应该准备一个有效的URL。如果您关心上下文路径的动态性,只需使用HttpServletRequest#getContextPath()动态打印上下文路径。

<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/Style.css" >

也就是说,在我使用Java EE十多年的时间里,使用ServletContext#getRealPath()没有任何合理的商业理由。只是不要使用它。任何这样做的尝试毕竟是最可能的错误。

另见: