如何在 JSP 中 link 来自 /main/resources 的网络资源文件?
How to link a web resource file from /main/resources in JSP?
我的 java webapp
中有以下结构
-- main
-- java
-- resources
-- lib
-- css
-- style.css
-- webapp
-- WEB-INF
-- web.xml
--index.jsp
我怎样才能 link style.css 到我的索引 jsp?
<link rel="stylesheet" href="???">
这里应该是什么?
提前致谢
您需要将要交付给客户的资产放在您的webapp
目录下。否则,您将需要编写一个 servlet 来传送它们。
您可以在 Java Servlet 3.1 Specification 的第 10 章中找到所有详细信息。
Maven/main/resources
文件夹是classpath资源,不代表Java类,比如i18n属性文件和各种配置文件(text,xml, json, 等等)。这正是您希望通过 ClassLoader#getResourceAsStream()
获得的那些资源。
该文件夹不适用于 public 网络资源(即 public http://xxx
URL 可访问的文件)。你应该将这些网络资源文件放在 Maven /main/webapp
文件夹中(在 /WEB-INF
和 /META-INF
之外),就像你已经正确地为 JSP 文件所做的那样(这是也是 public 网络资源)。
因此,只需将 /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:
因此,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.
另请参阅:
- How to use relative paths without including the context root name?
- Browser can't access/find relative resources like CSS, images and links when calling a Servlet which forwards to a JSP
我的 java webapp
中有以下结构-- main
-- java
-- resources
-- lib
-- css
-- style.css
-- webapp
-- WEB-INF
-- web.xml
--index.jsp
我怎样才能 link style.css 到我的索引 jsp?
<link rel="stylesheet" href="???">
这里应该是什么?
提前致谢
您需要将要交付给客户的资产放在您的webapp
目录下。否则,您将需要编写一个 servlet 来传送它们。
您可以在 Java Servlet 3.1 Specification 的第 10 章中找到所有详细信息。
Maven/main/resources
文件夹是classpath资源,不代表Java类,比如i18n属性文件和各种配置文件(text,xml, json, 等等)。这正是您希望通过 ClassLoader#getResourceAsStream()
获得的那些资源。
该文件夹不适用于 public 网络资源(即 public http://xxx
URL 可访问的文件)。你应该将这些网络资源文件放在 Maven /main/webapp
文件夹中(在 /WEB-INF
和 /META-INF
之外),就像你已经正确地为 JSP 文件所做的那样(这是也是 public 网络资源)。
因此,只需将 /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:
因此,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.
另请参阅:
- How to use relative paths without including the context root name?
- Browser can't access/find relative resources like CSS, images and links when calling a Servlet which forwards to a JSP