2012-01-05 69 views
1

JSR 286規範是否要求在包含Portlet的WAR中存在web.xml文件?起初,我認爲是這樣,但後來我創建了一個沒有web.xml的portlet,將它部署在Liferay中,並且它的工作完美無瑕。那麼它是Liferay的擴展(或者錯誤),還是沒有必要擁有這樣的文件?JSR-286 portlet是否需要在其WAR文件中包含web.xml文件?

+0

就我所知,它只需要一個'portlet.xml'。 – home 2012-01-05 21:20:20

回答

1

正如Olaf所說的,portlet不過是一個web應用程序。 Liferay擁有一個在Portlet自動部署時觸發的偵聽器。它爆炸戰爭並添加web.xml和必要的內容。如果你有源代碼,你可以檢查邏輯。類名是PortletDeployer,方法是getServletContent。添加web.xml並填充後,他們只需使用FileUtil.touch就可以觸摸它。

+0

可以看到代碼[這裏](https://github.com/liferay/liferay-portal/blob/master/portal-impl/src/com/liferay/portal/tools/deploy/PortletDeployer.java#L239) 。因此,沒有'web.xml'的portlet WAR只能從部署者那裏獲得一個WAR。那麼,這不能回答我的具體問題,但無論如何澄清它!我想知道規範,但現在你的答案已經足夠了。 – brandizzi 2012-01-11 19:12:13

1

我真的需要挖掘規範 - 但我的假設是,它在這方面遵循servlet規範:portlet應用程序首先部署到應用程序服務器。如果servlet規範要求web.xml存在,那麼需要滿足這個要求。否則,應用服務器將不會部署WAR(這是或多或少的問題,如果WAR文件格式需要建議的web.xml

的Liferay一旦Apperver已部署Web應用程序只能一命嗚呼的Liferay本身不關心web.xml

基於這種爭論(並且沒有看規範 - 所以我在這裏給出一個有教養的猜測),我期望JSR 不作關於web.xml的聲明。但是,它可能引用了servlet規範,而這又可能需要/推薦/提及web.xml。

如果Appservers需要它,或者如果缺少它們,它們的行爲又是另一回事。

相關問題