2011-07-04 25 views
0

默认情况下,静态文件位于WEB-INF目录(如/images/logo.png访问):如何更改WAR档案中静态文件的位置?

foo.war 
    WEB-INF 
    web.xml 
    images 
     logo.png 

我想改变的结构和使用这一个代替(仍然可以访问如/images/logo.png):

foo.war 
    WEB-INF 
    web.xml 
    static 
    images 
     logo.png 

如何我可以用web.xml这样做吗?

+1

为什么???????????? –

+0

您提到的默认值不正确。 '/ WEB-INF' **中的文件不能直接访问**。也许你正在使用一些为你返回它们的servlet? – BalusC

回答

2

根据http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/WCC3.html,:

甲WAR具有特定目录结构 。 的顶级目录WAR是 应用程序的文档根目录。文档根目录是 ,其中存储JSP页面,客户端类 和存档以及静态Web资源 。

文档根目录包含子目录 名为WEB-INF,其中 包含下列文件和目录 :

的web.xml:Web应用程序 部署描述符标签库 描述符文件(见标签库 描述符)类:包含服务器端类的目录 : servlet,实用程序类和 JavaBeans组件lib:A 包含库的JAR归档文件 (标记库和任何 实用程序库被 调用的服务器端类)。

还可以创建在 任一文档根 应用特定的子目录 (即,包目录)或 WEB-INF/classes目录。

所以默认行为就是你要找的。您的文档根目录是否设置不正确,无法提供来自WEB-INF的内容?

1

您可以使用过滤器或URLRewriteFilter指向/images/*/static/images/*

如果你只是想你的文件夹结构是/static/images的开发时间组织的目的,但部署URL是/images - 你可能需要改变你的构建脚本来/static/**复制到/

我个人不会打扰我的静态文件是否被称为/static/images/images - 因为它们会在我的代码中引用(仅),我已经控制了它。

如果你在CSS中使用这些文件,这就是为什么你想要的路径保持不变...更好地保留图像在/static/css/images下,并有CSS中引用的图像在这里。通过这种方式,不管你移动CSS文件夹的位置,你都不会打扰你的CSS。

3

如果您使用HTTP GET直接访问WEB-INF下的文件,容器将反弹并显示404 NOT FOUND错误。

但现在,你说你可以通过/images/logo.png访问WEB-INF/images/logo.png,所以我觉得你的web应用程序最有可能实现这一结果被一些URLRewriteFilter mechainsim或在servlet级别的Java代码(如过滤器),或者通过你的网站应用程序的框架。我建议你检查一下你的Web应用程序,看看现在什么机制导致这个错误,并相应地配置你想要的结果。