servlets - 将共享代码和 web.xml 从 WAR 项目拆分为通用 JAR 项目

标签 servlets jakarta-ee web.xml modularity

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

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

最佳答案

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

enter image description here

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

enter image description here

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

enter image description here

它基本上是一个具有以下文件夹结构的 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/

相关文章:

java - ContextLoaderListener 和 ContextLoaderServlet 的区别

java - 在 Java EE 中处理文件

spring - Tomcat严重listenerStart错误

java - 聚合根与复合根有何不同?

rest - Jersey REST get 返回 java.lang.NoSuchMethodError

java - session 超时未发生

java - 属性文件作为 web.xml 中的初始参数

java - 如何使用JSP/Servlet将文件上传到服务器?

java - Ajax XMLHttpRequest 是否调用 servlet doFilter

java - 使用 HttpClient/MultipartEntity 流式传输上传