回答:
ポートレットは、ポータルコンテナとコンポーネントを規制するJSR-168標準の一部です。これは、Webコンテナ(およびサーブレット)の標準とは異なる標準です。これら2つの標準の間には確かに強い類似点がありますが、コンテナ、API、ライフサイクル、構成、デプロイメントなどが異なります。
ポートレットとサーブレットの主な違いは、サーブレットは常に単一のタイプのアクション(要求)に応答する一方で、ポートレットは(ライフサイクルの性質とより強力なコンテナバインディングにより)レンダリングと要求の 2つのタイプのアクションに応答する必要があるということです。もちろんそれだけではありませんが、ポータル開発を研究したとき、これが2つのコアの違いであることがわかりました。
ソースから拡張:サーブレット対ポートレット
類似点
サーブレットとポートレットは、実装にJavaを使用するWebベースのコンポーネントです。
サーブレットは、サーブレットコンテナーによって管理されるのと同じように、ポートレットコンテナーによって管理されます。
静的コンテンツと動的コンテンツの両方を、ポートレットとサーブレットで生成できます。
ポートレットとサーブレットのライフサイクルはコンテナによって制御されます
クライアント/サーバーモデルは、サーブレットとポートレットの両方に使用されます
WAR / EARのパッケージ化とデプロイメントは基本的に同じです。
アプリケーションセッションは、サーブレットコンテナとポートレットコンテナの両方に存在します。これは、ポートレットコンテナでレンダリングフェーズからアクションフェーズ(またはそれより下位のフェーズ)にデータを共有する方法(粗いポートレット間通信)の1つです。
サーブレットとポートレットはどちらも、それをサポートする同様のサーバー/ VM環境を使用します。ただし、ポートレットの場合は、ティックするために追加の構成が必要になる場合があります。
ビルド/ DIツールはどちらも似ています-Ant、Maven、Gradleなどがすべてサポートされています。ほとんど:)-これはLiferay 7で少し変更されました。
相違点
サーブレットは完全なWebページをレンダリングできますが、ポートレットはHTMLフラグメントをレンダリングします。これらのフラグメントは、ポータルによって完全なWebページに集約されます。
JSR 168ポートレットのコンテンツタイプは、cHTML、XHTML、WMLのみです。他のコンテンツタイプはサポートしていません。
ポートレットは、本文、フレーム、フレームセット、ヘッド、html、タイトルなどのタグを含むHTMLコードを生成することはできません。
サーブレットとは異なり、ポートレットにはURLが添付されていないため、直接アクセスすることはできません。アクセスは、ポートレットを保持するポータルページを介してのみ行われます。
ポートレットには、ウィンドウの状態またはポートレットモードを操作するためのコントロールを提供できます。
単一のポートレットの複数のインスタンスを同じページに配置できます。
ポートレットは、永続的な構成とカスタマイズ、プロファイル情報をサポートします。
ポートレットには、2種類の要求vizがあります。レンダリング要求とアクション要求。
ポートレットには、セッション内に2つのスコープがあります。ポートレット間通信のアプリケーションスコープと、ポートレット内通信のポートレットスコープ。
ポートレットは、応答の文字セットエンコーディングを設定することも、HTTP応答ヘッダーを設定することもできません。
ポートレットはリクエストURLにアクセスできません。そのため、URLに追加されたクエリパラメータにアクセスできません。ポートレットはCookieを設定できません。
ポートレットAPIの代表的な方法があり
doView()
、doEdit()
、doHelp()
とprocessAction()
しながら、サーブレットのものがありますservice()
、doPost()
、doGet()
。サーブレット仕様 -JSR 369(サーブレット4.0)、JSR 340(サーブレット3.1)、JSR 315(サーブレット3.0)、JSR 154(サーブレット2.5および2.4)。 ポートレット仕様 -JSR 168(ポートレット仕様v1.0)、JSR 286(ポートレット仕様v2.0)、JSR 362(ポートレット仕様v3.0)
ポートレットの配備には、サーブレットアプリケーションとは異なるアプローチが含まれます。一部のプロバイダー(Liferay / Alfresco / WebSphere)は、サーバーの再起動を必要とせずにポートレットのホットデプロイメントをサポートしています。これは、OSGiなどの特別なライブラリを使用してアプリケーションをモジュール化せずにサーブレットの場合は不可能です。
編集 (コメントから)
ポートレットコンテナは、サーブレットコンテナ上に構築されています。したがって、最終的には、ポートレットはサーブレットコンテナ上で実行されると言えます。ただし、アプリの開発中は、サーブレット/ Java EEコンテナとは別にポートレットコンテナを表示します。
ポートレットとサーブレットの両方がhttp要求を受信して応答を返します。これは通常、ブラウザでレンダリングできる一部のHTMLです。ポートレットは「ポータル」のコンテキストで使用されます。つまり、ユーザーが表示する単一のページには多数のパーツがあり、タイルはそれぞれ異なるポートレットからのものであると考えています。
これで、通常のサーブ(その方法の例についてはStruts + Tilesを参照)から「タイル」効果を得ることができます。ポートレットからの追加のビットは、ポートレットがポータルによって提供されるより豊かな環境にあり、追加のAPIが提供されているためです。ポートレットが表示する内容は、個々のユーザーが好みに合わせて設定でき、ポーレットは互いに通信できます。あるボタンを押すと、別のポートで何かが発生します。
サーブレットにはJava定義(HTTP GET / POST要求を処理するアプリケーション)があり、ポートレットにはユーザーインターフェース定義があります。WindowsVistaウィジェットと同様の特定の機能を実行するコンポーネント、またはここでのスタックオーバーフローで使用される多くのコンポーネント。それらは必ずしもサーバー側のサーブレットによって支えられる必要はありません。しかし、ポートレット標準は、Javaとともに開発されました。O'Reillyには素晴らしいチュートリアルがあります。
基本的に、サーブレットは通常フレーム全体を使用している場合を除き、ブラウザのページ全体を占めるコンテンツを提供し、ポートレットはウィンドウによってラップされるコンテンツを提供します。ポートレットを使用すると、複数のポートレットを並べて配置でき、それぞれが他とは異なるコンテンツと機能を提供できます。ポートレットは、あるタイプのアプリケーションに完全な対話を提供できますが、別のポートレットは、別のタイプのアプリケーションにコンテンツを提供できます。ポータルは、いくつかのハウスキーピング機能と、ページ上のすべてのポートレットへの安全な単一のエントリポイントを提供できます。それらの詳細(類似点/相違点)については、読み続けてください。ここにいくつかの類似点があります: