【问题标题】:Splitting up shared code and web.xml from WAR project to common JAR project将共享代码和 web.xml 从 WAR 项目拆分为通用 JAR 项目
【发布时间】:2015-07-14 20:00:01
【问题描述】:

我有不同的 webapp,它们共享大部分 web.xml 配置。例如,某些 servlet 的映射方式对于所有应用程序都是相同的,但某些 web 应用程序具有自定义 servlet、附加过滤器或共享托管 bean。

在我的 IDE 中,每个 webapp 都是不同的项目。我想将 web.xml 的公共部分重构为“通用”项目,并让所有特定于应用程序的 web.xml 扩展“通用”web.xml。有没有可能做到这一点?

【问题讨论】:

标签: servlets jakarta-ee web.xml modularity


【解决方案1】:

是的,你可以。假设 Eclipse(您的问题历史证实您正在使用它),只需创建一个“Web Fragment Project”:

并将其与向导中的主项目相关联:

如有必要,您可以在主 Web 项目的“部署程序集”属性中(或任何其他配置构建的方式,使其最终在主 Web 项目的 /WEB-INF/lib 中作为 JAR 结束)中(重新)配置它)。

它基本上是一个具有以下文件夹结构的 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 中“覆盖”公共 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>

另见:

【讨论】:

    【解决方案2】:

    如果您在 glassfish 上部署应用,则可以将常用配置放在 default-web.xml 文件中的 domain-dir\config\ 位置下。

    【讨论】:

      【解决方案3】:

      通常 Web 服务器具有定义默认 web.xml 的功能,以满足您的要求。我建议为您正在使用的 Web 服务器探索该选项。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-03
        • 2014-12-08
        • 2019-04-11
        • 1970-01-01
        相关资源
        最近更新 更多