Servlets 将共享代码和web.xml从WAR项目拆分为公共JAR项目

Servlets 将共享代码和web.xml从WAR项目拆分为公共JAR项目,servlets,jakarta-ee,web.xml,modularity,Servlets,Jakarta Ee,Web.xml,Modularity,我有不同的webapp,它们共享web.xml配置的很大一部分。例如,某些servlet的映射方式对于所有应用程序都是相同的,但某些webapp具有自定义servlet、附加筛选器或共享托管bean 在我的IDE中,每个webapp都是一个不同的项目。我想将web.xml的公共部分重构为一个“公共”项目,并让所有特定于应用程序的web.xml扩展“公共”web.xml。有没有可能做到这一点?如果你在glassfish上部署你的应用程序,那么你可以将你的通用配置放在默认web.xml文件的域目录\

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


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

如果你在glassfish上部署你的应用程序,那么你可以将你的通用配置放在
默认web.xml
文件的
域目录\config\
位置下。

是的,你可以。假设Eclipse(您的问题历史记录确认您正在使用它),只需创建一个“Web片段项目”:

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

如有必要,您可以在主web项目的“Deployment Assembly”属性中对其进行(重新)配置(或以任何其他方式配置构建,使其最终成为主web项目的
/web-INF/lib
中的JAR)

它基本上是一个具有以下文件夹结构的Java项目:

CommonWebProject
|--com.example。。。(您可以在此处放置@WebServlet类)
|
|--META-INF
||--资源(您可以将共享web资源放在此处)
|| |--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兼容的IDE如下所示:


另见:
  • (如果您使用的是JSF)

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

我认为您试图实现的目标可以通过使用注释来实现。用所需的映射注释单个接口,并在需要的地方实现它。这将是一个好的开始+一些Maven魔术,它可以做你需要的。