Java EE应用程序中的样式路径

Sno*_*irl 1 html css java path

我有一个Java EE应用程序,在应用程序中我有以下结构.

WEB-INF
    layout
        header.jsp
    styles
        main.css
Run Code Online (Sandbox Code Playgroud)

我想包括在main.cssheader.jsp.我试图用以下内容(其中......是路径):

<link rel="stylesheet" href="..."> 
Run Code Online (Sandbox Code Playgroud)

但是,我似乎无法找到正确的道路.我已经尝试过以下各项而没有运气:

../styles/main.css
/styles/main.css
styles/main.css
/WEB-INF/styles/main.css
WEB-INF/styles/main.css
Run Code Online (Sandbox Code Playgroud)

什么是正确的道路?

Bal*_*usC 14

首先,/WEB-INF没有中间(前端控制器)servlet ,文件夹中的资源不能直接公开访问(这也包括JSP文件本身!<jsp:include>在webserver上运行,而不是在webbrowser上运行).所以你要把CSS(和JS和图像)文件放在/WEB-INF文件夹之外.

WebContent
 |-- WEB-INF
 |    `-- layout
 |         `-- header.jsp
 |-- styles
 |    `-- main.css
 :
Run Code Online (Sandbox Code Playgroud)

假设它现在在/styles/main.css,那么您可以按如下方式引用它:

<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/styles/main.css" />
Run Code Online (Sandbox Code Playgroud)

使用${pageContext.request.contextPath}(使用前导斜杠打印当前上下文路径并因此相对于域根保证CSS URL)本身并不是必需的,但它是您最安全的选择,因为当前请求URL未知.在HTML中,所有相对路径<link>,<script>,<img>,<a>,等元素是即开即用网页浏览器解析相对于当前请求的网址(如你在浏览器地址栏中看到).只要不清楚您的请求URL是什么,我就无法在不使用的情况下回答正确的CSS路径${pageContext.request.contextPath}.

也可以看看: