0

我正在建立一个带有一些子文件夹的小网站。我不知道一个 jsp 页面会有多少子文件夹,所以我需要一种方法来了解我的 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 没有找到。

4

1 回答 1

2

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

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

也就是说,在我使用 Java EE 的十多年里,没有一个明智的商业理由来使用ServletContext#getRealPath(). 根本不要使用它。毕竟,任何这样做的尝试很可能是完全错误的。

也可以看看:

于 2013-10-03T12:48:33.677 回答