2016-06-11 57 views
0

我一直在研究包含JSP文件的简单Java Web应用程序。我一直试图通过位于WAR文件上下文根中的JSP文件来访问驻留在WEB-INF/classes目录中的资源文件,如css文件和图像。访问位于WEB-INF文件夹内的资源

该项目结构是基于Maven War Plugin下的推荐结构创建的。我在这个论坛中经历了几个解决类似问题的解决方案,但他们都没有为这个新的结构工作。

我们如何从位于context-root的JSP文件中访问位于WEB-INF/classes目录中的资源? example WAR file with the mentioned structure

+0

我没有把它们放在WEB-INF中,实际上如果你检查我在Maven War Plugin上共享的链接,它会将图像,css文件等包装到WEB-INF/classes目录中。这是推荐的结构。 –

回答

2

如果你想通过HTTP访问这些资源,他们必须其他地方 - 都不能在WEB-INF。这个问题是重复的,因为它已被其他地方多次回答(只是查询这个问题的相关问题链接)。 Java web应用程序从不通过HTTP访问WEB-INF下的任何资源。但是,由于您的问题是关于“推荐”标准文件结构,请告诉您,您链接的文档在哪里容易引起误解:src/main/resources中的任何资源都将在类路径中结束,例如,在WEB-INF /类中。它不会以Web应用程序向全世界提供的目录结束。但是,文档使用图像,这表明图像可以在Web应用程序中使用。它不能。您可以通过类加载器访问它,例如:SomeClassFromYourWebapp.class.getResourceAsStream()。这更典型地通过.properties文件,.xml或类似的在运行时处理而不是在图像上处理。真正误导性的文档我会说(但它是正确的,只是误导)

从技术上讲,这将回答你的问题,“我如何从JSP访问资源?”,因为你可以在JSP中有这个代码。我相信你的问题是要求通过HTTP解决资源问题。

而且答案是:移动,你需要可通过HTTP src/main/webapp的资源和使他们摆脱WEB-INF。否则,他们只会在类路径上。

+0

这就是说,把资源放在WEB-INF或类路径中并且从这里为http服务是相当普遍的。例如,Spring为jsp做了这个工作。 – user2189998

+1

@ user2189998 for jsp:是的。然而,你永远无法将它们当作/WEB-INF/index.jsp(就像这个答案中的点)一样,但是你需要内部重定向魔术。即使(理论上)可能,我从来没有看到它为CSS和图像做过。如果你需要的只是一个带有URL的资源,那就太麻烦了。 –

+0

Olaf Kock如你所说,当我将它移动到src/main/webapp时,它确实有效。 –