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

CCC*_*CCC 4 java resources

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

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

JB *_*zet 6

使用符合servlet-3.0的容器(例如Tomcat 7及更高版本),并将资源放在META-INF/resourcesjar文件中,这些文件将由容器提供,就像它们直接位于应用程序的根目录下一样.罐子本身必须在WEB-INF/lib.

Maven与你的问题没什么关系.如果您希望资源由应用程序提供,而不是在jar文件中,则将它们放在src/main/webapp标准Maven目录布局中.

如果你想构建一个包含这些资源的jar文件,那么这个jar文件应该由另一个Maven项目构建,并且是Maven war项目的依赖项之一.在jar项目中,资源必须在src/main/resources/META-INF/resources.

编辑:

假设文件已命名foo.png并位于imageswebapp根目录下的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)