从Web应用程序访问静态文件(webapp / static / for inst。)

时间:2012-03-02 20:30:16

标签: java spring web-applications

我有一个具有以下结构的Web应用程序:

src
+ main
+-+ java
  + resources
  + webapp
  +-+ WEB-INF
    + static

静态目录是org.apache.catalina.servlets.DefaultServlet的服务器,否则由应用程序提供服务。我想要实现的是从应用程序访问静态目录。但是,一旦它部署在服务器上,该目录似乎“丢失” - 我无法在相对路径(new File())和类路径(新ClassPathResource())中访问它。我可以看到,target目录中缺少该目录,这可能是正确的,但我不知道我能做些什么。

感谢。

修改

  1. 也许不清楚,但目录static是WEB-INF的兄弟,而不是它的孩子。
  2. 静态目录可能包含2 GB的图像。因此,每次部署应用程序时都不希望复制此目录(因此将它放在类路径中可能不是一个好主意。)
  3. 我无法找到DefaultServlet的行为,我允许它访问此目录。它复制了其他地方的所有东西吗?或者是否通过绝对路径访问它?

2 个答案:

答案 0 :(得分:2)

我很确定类路径不能看到WEB-INF,你必须把它放在webapp文件夹中。更好的是,您可能希望使用mvc:resources标记。

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html

搜索mvc:资源以进行解释。

修改

如果将资源放在src / main / resources中,它们应该可用于ClassPathResource

答案 1 :(得分:1)

没有标准化的方法来访问WEB-INF下存储的文件。 WEB-INF文件夹的精神在于它包含框架(容器/服务器)读取的数据。它不被视为容器用户(您)直接读取的数据存储位置。根据您使用的容器软件(和版本)(Tomcat与JBoss vs. WebSphere与WebLogic等),您可能能够克服自己的方式进入WEB-INF,但它不能跨容器移植,所以我不推荐它。

考虑将文件放在其他位置,例如在类路径中或不是WEB-INF的webapp的子文件夹中。