使用/ META-INF / resources时,WEB-INF会去哪里?

时间:2018-07-31 12:15:13

标签: java-ee

我将所有Web资源都放入/META-INF/resources中,因此可以在不同的Web应用程序中重复使用它们。

但是web.xml内的WEB-INF/呢?我必须将其保留在src/main/webapp/中还是可以将其放在src/main/resources/下吗?

如果是这样,我必须放在哪里? src/main/resources/WEB-INF/还是src/main/resources//META-INF/resources/WEB-INF/

我正在使用Maven和Assembly插件来构建我的项目,而不是WAR插件。

2 个答案:

答案 0 :(得分:2)

总而言之,您可以。

从Servlet 3.0开始,您可以在常规jar文件中的Web应用程序之间共享Java类,Web资源和 web-fragment.xml 文件。这些罐子称为“网页片段”。

来自Servlet 3.1规范的第8.2.1节:

  

...

     

Web片段是Web应用程序的逻辑分区,以这种方式,Web应用程序中使用的框架可以定义所有工件,而无需要求开发人员在web.xml中编辑或添加信息。它几乎可以包含web.xml描述符使用的所有相同元素。但是,描述符的顶层元素必须是web-fragment,相应的描述符文件必须称为web-fragment.xml。与排序相关的元素在web-fragment.xml和web.xml之间也有所不同。请参阅第14章中的部署描述符部分中的Web片段相应模式。

     

如果框架打包为jar文件,并且具有部署描述符形式的元数据信息,则web-fragment.xml描述符必须位于jar文件的META-INF /目录中。

     

...

因此,您无需尝试以某种方式嵌入web.xml文件,只需将相同的内容放入META-INF / web-fragment.xml文件(它共享大部分web.xml XSD)。 / p>

您的Web资源进入您已经发现的META-INF /资源中。

总而言之,您可以轻松地在常规jar文件中构建共享组件。您真的不需要弄混maven-assembly-plugin即可完成此任务。

答案 1 :(得分:0)

在Maven项目中,web.xml的标准位置是src/main/webapp/WEB-INF,如果需要,可以更改它,但是在生成的.war文件中,web.xml 必须包含在WEB-INF文件夹中。

因此,将web.xml放在src/main/resources/META-INF内是行不通的。

对于较新的Servlet规范(我认为Servlet 3.0及更高版本),可以使用注释,并且web.xml不是必需的。

编辑: 请注意,web.xml是war文件(Web应用程序)的标准配置文件,在jar文件(库)中将被忽略