【问题标题】: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),还是不需要这样的文件?

【问题讨论】:

  • 据我所知,它只需要一个portlet.xml

标签: 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 文件格式 requiresrecommends web.xml

,这或多或少是个问题

只有在 Apperver 部署了 Web 应用程序后,Liferay 才会启动。 Liferay 本身并不关心 web.xml

基于这个争论(并且没有查看规范 - 所以我在这里给出一个有根据的猜测)我希望 JSR 286 不会对 web.xml 发表声明。但是,它可能引用了 servlet 规范,而这又可能需要/推荐/提及 web.xml。

如果 Appservers 需要它,或者如果它丢失了它们的行为是另一回事。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多