将资源放在jar文件中并将它们暴露给Web

时间:2014-03-07 21:38:59

标签: java resources

  1. 我有一个Web应用程序,其资源文件夹中有一堆js和css文件。如何将它们暴露给网络以便能够在我的网页中引用它们?这些文件是如何引用的?

  2. 我还想稍后将这些资源放在一个单独的jar文件中(和上一个问题一样)也将它们暴露给网络。我怎么能用maven呢?我的意思是,打包它们以便它们可以在META-INF /资源中。

1 个答案:

答案 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'/>" />