我正在建立一个包含一些子文件夹的小站点。 我不知道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。
答案 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()
没有任何合理的商业理由。只是不要使用它。任何这样做的尝试毕竟是最可能的错误。