我有一个Web应用程序,其资源文件夹有一堆js和css文件.如何将它们暴露给网络以便能够在我的网页中引用它们?这些文件是如何引用的?
我还想稍后将这些资源放在一个单独的jar文件中(和上一个问题一样)也将它们暴露给Web.我怎么能用maven呢?我的意思是,将它们打包以便它们可以在META-INF /资源中.
使用符合servlet-3.0的容器(例如Tomcat 7及更高版本),并将资源放在META-INF/resources
jar文件中,这些文件将由容器提供,就像它们直接位于应用程序的根目录下一样.罐子本身必须在WEB-INF/lib
.
Maven与你的问题没什么关系.如果您希望资源由应用程序提供,而不是在jar文件中,则将它们放在src/main/webapp
标准Maven目录布局中.
如果你想构建一个包含这些资源的jar文件,那么这个jar文件应该由另一个Maven项目构建,并且是Maven war项目的依赖项之一.在jar项目中,资源必须在src/main/resources/META-INF/resources
.
编辑:
假设文件已命名foo.png
并位于images
webapp根目录下的META-INF/resources/images
文件夹中,或者位于jar文件的文件夹下,则使用相对路径或绝对路径从应用程序页面内引用该文件.假设您的应用程序的上下文路径是/myFirstApp
.图像的地址将是/myFirstApp/images/png
.现在请注意您的页面的URL /myFirstApp/bar/index.html
,您可以使用
<img src="../images/foo.png" />
Run Code Online (Sandbox Code Playgroud)
要么
<img src="/myFirstApp/images/foo.png" />
Run Code Online (Sandbox Code Playgroud)
绝对路径使用起来更容易,更安全,但您不应该硬化应用程序的上下文路径.因此,在JSP中,您将使用它
<img src="${pageContext.request.contextPath}/images/foo.png" />
Run Code Online (Sandbox Code Playgroud)
或者,使用JSTL:
<img src="<c:url value='/images/foo.png'/>" />
Run Code Online (Sandbox Code Playgroud)