我有不同的 webapps 共享大部分 web.xml 配置。例如,某些 servlet 的映射方式对于所有应用程序都是相同的,但某些 web 应用程序具有自定义 servlet、附加过滤器或共享托管 bean。
每个 webapp 在我的 IDE 中都是一个不同的项目。我想将 web.xml 的通用部分重构为“通用”项目,并让所有特定于应用程序的 web.xml 扩展“通用”web.xml。有没有可能做到这一点?
最佳答案
是的,你可以。假设 Eclipse(您的问题历史证实您正在使用它),只需创建一个“Web Fragment Project”:
并将其与向导中的主项目相关联:
如有必要,您可以在主 Web 项目的“部署程序集”属性中(或任何其他配置构建的方式,使其最终在 /WEB-INF 中以 JAR 形式结束)中(重新)配置它/lib
的主 Web 项目)。
它基本上是一个具有以下文件夹结构的 Java 项目:
CommonWebProject
|-- com.example... (you can put e.g. @WebServlet classes here)
|
|-- META-INF
| |-- resources (you can put shared web resources here)
| | |-- common.css
| | |-- common.js
| | |-- template.jsp
| | :
| |
| |-- beans.xml
| |-- web-fragment.xml
| `-- MANIFEST.MF
:
/META-INF/resources
文件夹中的任何内容都以与 WAR 的 webcontent 相同的方式解析(我的 Eclipse Luna SR1 没有预先创建 /resources
文件夹,因此您需要手动创建它)。而且,重要的是,已经在 WAR 中具有相同名称的任何资源(包括类!)将优先于 JAR 中的资源,因此您可以在必要时从 WAR 中“覆盖”公共(public) JAR 资源。
请注意,web-fragment.xml
文件的名称必须与此完全相同,因此不能使用 web.xml
。 IDE 应该只为您自动生成一个,但为了完整起见,与 Servlet 3.0 兼容的一个看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<web-fragment
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd"
version="3.0"
>
<!-- Put shared web.xml config here. -->
</web-fragment>
另见:
关于servlets - 将共享代码和 web.xml 从 WAR 项目拆分为通用 JAR 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30046979/