ポートレットとポータルの作業を依頼されました。
ポートレットとサーブレットの違いを知りたいですか?
ポートレットはサーブレットとどのように/どこで (機能的に) 異なるのですか?
ポートレットとポータルの作業を依頼されました。
ポートレットとサーブレットの違いを知りたいですか?
ポートレットはサーブレットとどのように/どこで (機能的に) 異なるのですか?
ソースからの強化:サーブレットとポートレット
類似点
サーブレットとポートレットは、実装に Java を使用する Web ベースのコンポーネントです。
ポートレットは、サーブレットがサーブレット コンテナーによって管理されるように、ポートレット コンテナーによって管理されます。
ポートレットとサーブレットによって、静的コンテンツと動的コンテンツの両方を生成できます。
ポートレットとサーブレットのライフサイクルはコンテナによって制御されます
クライアント/サーバー モデルは、サーブレットとポートレットの両方に使用されます。
パッケージ化と展開は本質的に同じで、WAR/EAR です。
アプリケーション セッションは、サーブレット コンテナーとポートレット コンテナーの両方に存在します。これは、ポートレット コンテナー内のレンダリング フェーズからアクション フェーズ (またはそれより下位のフェーズ) までデータを共有する (粗いポートレット間通信) 方法の 1 つです。
サーブレットとポートレットはどちらも、それをサポートする同様のサーバー/VM 環境を使用します。ただし、ポートレットの場合、それを有効にするためにいくつかの追加構成が必要になる場合があります
ビルド/DI ツールは両方で類似しており、Ant、Maven、Gradle などがすべてサポートされています。ほとんど:) - これは Liferay 7 で少し変更されました。
相違点
サーブレットは完全な Web ページをレンダリングできますが、ポートレットは HTML フラグメントをレンダリングします。これらのフラグメントは、ポータルによって完全な Web ページに集約されます。
JSR 168 ポートレットのコンテンツ タイプは、cHTML、XHTML、WML のみです。他のコンテンツ タイプはサポートされません。
ポートレットは、body、frame、frameset、head、html、または title などのタグを含む HTML コードを生成できません。
サーブレットとは異なり、ポートレットには URL が添付されていないため、直接アクセスすることはできません。アクセスは、ポートレットを保持するポータル ページを介してのみ行われます。
ポートレットには、そのウィンドウの状態またはポートレット モードを操作するためのコントロールを提供できます。
1 つのポートレットの複数のインスタンスを同じページに配置できます。
ポートレットは、永続的な構成とカスタマイズ、プロファイル情報をサポートします。
ポートレットには 2 種類のリクエスト (つまり) を含めることができます。レンダリング リクエストとアクション リクエスト。
ポートレットには、セッション内に 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 コンテナーとは別にポートレット コンテナーを表示します。
ポートレットは、ポータルのコンテナーとコンポーネントを規制する JSR-168 標準の一部です。これは、Web コンテナー (およびサーブレット) の標準とは異なる標準です。これら 2 つの標準には確かに強い類似点がありますが、コンテナー、API、ライフサイクル、構成、デプロイなどで異なります。
ポートレットとサーブレットの主な違いは、サーブレットが常に 1 つのタイプのアクション( request ) に応答するのに対し、ポートレットは (ライフサイクルの性質とより強力なコンテナー バインディングのために) 2 つのタイプのアクション ( renderとrequest ) に応答する必要があることです。もちろん他にもありますが、ポータル開発を勉強したときに、これが 2 つの主な違いであることがわかりました。
ポートレットとサーブレットの両方が http 要求を受け取り、応答を返します。応答は通常、ブラウザーでレンダリングできる HTML です。ポートレットは「ポータル」のコンテキストで使用されます。これは、ユーザーに表示される 1 つのページに多くのパーツ (タイルと考えてください) があり、それぞれが異なるポートレットから来るという考えです。
これで、通常のサーブからその「タイル」効果を得ることができます (方法の例については、Struts + Tiles を参照してください)。ポートレットによって表示される内容は、個々のユーザーが好みに合わせて構成でき、ポートレットは相互に通信できます。一方のボタンを押すと、別のポートレットで何かが起こります。
サーブレットには Java 定義 (HTTP GET/POST 要求を処理するアプリケーション) があり、ポートレットにはユーザー インターフェイス定義があります。Windows Vista ウィジェットに似た特定の機能を実行するコンポーネント、またはスタック オーバーフローで使用される多くのコンポーネントです。サーバー側のサーブレットによってサポートされる必要はありません。しかし、Portlet 標準は Java とともに開発されました。O'Reilly には素晴らしいチュートリアルがあります。
基本的に、サーブレットは通常ブラウザのページ全体を占めるコンテンツを提供し(フレームを使用している場合を除く)、ポートレットはウィンドウでラップされたコンテンツを提供します。ポートレットを使用すると、複数のポートレットを並べて配置でき、それぞれが互いに異なるコンテンツと機能を提供できます。ポートレットは、あるタイプのアプリケーションに完全な対話を提供できますが、別のポートレットは、別のタイプのアプリケーションにコンテンツを提供できます。ポータルは、ページ上のすべてのポートレットへのハウスキーピング機能とセキュリティで保護された単一のエントリポイントを提供できます。それらの詳細(類似点/相違点)については、読み続けてください。ここにいくつかの類似点があります: