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