如何在WAR存档中更改静态文件的位置?

时间:2011-07-04 23:08:16

标签: java servlets

默认情况下,静态文件位于WEB-INF目录中(可以/images/logo.png访问):

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

我想更改结构并使用此结构(仍可以/images/logo.png访问):

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

如何使用web.xml

执行此操作

3 个答案:

答案 0 :(得分:3)

如果您使用HTTP GET直接访问WEB-INF下的文件,容器将会发出404 NOT FOUND错误消息。

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

答案 1 :(得分: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中的内容?

答案 2 :(得分:1)

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

如果您只希望文件夹结构为/static/images用于开发时组织目的,但部署URL为/images - 您可能需要更改构建脚本以复制/static/** } /

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

如果您在CSS中使用这些文件,那就是为什么您希望路径保持不变...更好地保留/static/css/images下的图像并在此处使用CSS中引用的图像。这样,无论你在哪里移动CSS文件夹,都不会破坏你的CSS。