Maven /main/resources 文件夹用于存放不代表 Java 类的类路径资源,例如 i18n 属性文件和各种配置文件(文本、xml、json 等)。这正是您想通过ClassLoader#getResourceAsStream() 获得的资源。
该文件夹不适用于公共网络资源(即可通过公共http://xxx URL 访问的文件)。您应该将这些 Web 资源文件放在 Maven /main/webapp 文件夹(在 /WEB-INF 和 /META-INF 之外),就像您对 JSP 文件(也是公共 Web 资源)所做的那样。
所以,只需将 /lib 文件夹向下移动(我个人也会将该文件夹重命名为“resources”、“assets”或“static”,这更符合事实上的标准;一个“lib”文件夹名称即表明它充满了 JAR 文件)。
main
|-- java
|-- resources
`-- webapp
|-- lib
| `-- css
| `-- style.css
|-- WEB-INF
| `-- web.xml
`--index.jsp
鉴于此结构、/webapp 的示例部署上下文路径和在http://localhost:8080 上运行的示例服务器,CSS 文件应该可以通过以下绝对 URL 访问:
http://localhost:8080/webapp/lib/css/style.css
因此,JSP 页面的 HTML 表示中的以下任何 CSS 链接都应该这样做:
<link rel="stylesheet" href="http://localhost:8080/webapp/lib/css/style.css" />
<link rel="stylesheet" href="//localhost:8080/webapp/lib/css/style.css" />
<link rel="stylesheet" href="/webapp/lib/css/style.css" />
<link rel="stylesheet" href="${pageContext.request.contextPath}/lib/css/style.css" />
任你选。考虑到目标 URL 其他部分的动态性,建议使用最后一个。
另见: