JSR 286 仕様では、web.xml
ポートレットを含む WAR にファイルが存在する必要がありますか? 最初はそう思っていたのですが、 なしでポートレットを作成し、web.xml
それを Liferay にデプロイしたところ、問題なく動作しました。それは Liferay の拡張 (またはバグ) ですか、それともそのようなファイルを持つ必要はありませんか?
2 に答える
仕様を掘り下げる必要がありますが、この点に関しては、サーブレットの仕様に従っていると思います。ポートレット アプリケーションは、何よりもまずアプリケーション サーバーにデプロイされます。サーブレット仕様で web.xml が必要な場合、この要件を満たす必要があります。そうしないと、Appserver は WAR を展開しません (WAR ファイル形式がweb.xmlを必要とするか、または推奨するかどうかは多かれ少なかれ問題です)
Liferay は、Apperver が Web アプリケーションをデプロイした後にのみ起動します。Liferay 自体は web.xml を気にしません。
この議論に基づいて (そして仕様を見ずに - だから私はここで知識に基づいた推測をしています)、私は JSR 286が web.xml について声明を出さないことを期待しています。ただし、おそらくサーブレット仕様を参照しており、これにより web.xml が必要/推奨/言及される場合があります。
また、Appserver がそれを必要とするかどうか、またはそれがない場合にどのように動作するかは、また別の話です。
オラフが正しく言ったように、ポートレットは Web アプリケーションにすぎません。Liferay には、ポートレットの自動デプロイ時にトリガーされるリスナーがあります。戦争を爆発させ、必要な web.xml とコンテンツを追加します。ソースがあればロジックを確認できます。クラス名は PortletDeployer で、メソッドは getServletContent です。web.xml を追加して詰め込んだ後、FileUtil.touch を使用してタッチするだけです。