【问题标题】:Do JSR-286 portlets require a web.xml file in their WAR files?JSR-286 portlet 的 WAR 文件中是否需要 web.xml 文件?
【发布时间】:2023-04-05 04:22:01
【问题描述】:
JSR 286 规范是否要求在包含 portlet 的 WAR 中存在 web.xml 文件?起初,我是这么想的,但后来我创建了一个没有web.xml 的portlet,将它部署在Liferay 中,它完美地工作。那么它是 Liferay 的扩展(或 bug),还是不需要这样的文件?
【问题讨论】:
标签:
java
liferay
portlet
web.xml
jsr296
【解决方案1】:
正如 Olaf 所说,portlet 只不过是一个 Web 应用程序。 Liferay 有一个监听器,它在 portlet 自动部署时被触发。它引爆了战争并添加了 web.xml 和必要的内容。如果您有来源,您可以检查逻辑。类名是 PortletDeployer,方法是 getServletContent。添加 web.xml 并填充后,他们只需使用 FileUtil.touch 触摸它。
【讨论】:
-
可以看到代码here。所以,一个没有web.xml 的portlet WAR 只需从部署者那里得到一个。好吧,这并没有回答我的具体问题,但无论如何都会澄清它!我想知道规范,但现在你的回答就足够了。
【解决方案2】:
我真的必须深入研究规范 - 但我的假设是它在这方面遵循 servlet 规范:portlet 应用程序首先部署到应用程序服务器。如果 servlet 规范要求 web.xml 存在,则需要满足此要求。否则 Appserver 不会部署 WAR(如果 WAR 文件格式 requires 或 recommends web.xml
,这或多或少是个问题
只有在 Apperver 部署了 Web 应用程序后,Liferay 才会启动。 Liferay 本身并不关心 web.xml
基于这个争论(并且没有查看规范 - 所以我在这里给出一个有根据的猜测)我希望 JSR 286 不会对 web.xml 发表声明。但是,它可能引用了 servlet 规范,而这又可能需要/推荐/提及 web.xml。
如果 Appservers 需要它,或者如果它丢失了它们的行为是另一回事。