2022.08.19
WASの動作とWEB, Servlet, JSP
WASの動作とWEB, Servlet, JSP
(株)エクセンコンサルティング本部/APM パク・ジョンヒョン
Webアプリケーションサーバーとは?
Webアプリケーションサーバー方式は、Webサーバーが直接アプリケーションプログラムを処理するのではなく、Webアプリケーションサーバーに処理を渡し、アプリケーションサーバーがアプリケーションプログラムを処理します。 複数のユーザーが同じページを要求して複数のアプリケーションプログラムを処理するときは、1つのプロセスのみを割り当て、ユーザーの要求をスレッド方式(Servlet / JSP)で処理します。

– Note 複数の要求に1つのプロセスのみを割り当て、ユーザーの要求をスレッド化する方法
で処理します。
メモリを節約できるため、Servlet/JSP方式はCGI方式に比べて同時により多くのユーザーにサービスを行うことができます。
これは全体的なパフォーマンスの向上をもたらし、より信頼性の高いWebサービスを提供することが可能です。
Webサーバーの機能を構造的に分離して処理する目的で、下図のようにWebサーバーの
機能とコンテナの機能で構成されています。

Webサーバーとアプリケーションサーバー
WebサーバーとWebアプリケーションサーバーの違いは、実装されている言語が異なることです。
WebサーバーはCで実装され、WebアプリケーションサーバーはJAVAで実装され、実行時にクラス作業を行い、メモリ割り当て後の解除を自動的にGCが管理します。
● Webサーバは、Webでサーバ機能を処理するプログラムであり、HTTPというプロトコルに基づいてWebクライアントからの要求をサービスする機能を担い、処理された結果をクライアントに応答します。
● Webアプリケーションサーバは、Webサーバの機能を構造的に分離して処理するのが目的です。
business logic を実行します。
WASはWebサーバーの機能とコンテナの機能で構成されています。 コンテナはサーブレットコンテナです。

– Note ほとんどの商用化されたWebアプリケーションサーバーは、Webサーバーやコンテナ機能に加えて、エンタープライズ環境に必要なトランザクション、セキュリティ、トラフィック管理、DBコネクションプール、ユーザー管理などのさまざまな機能を提供するソフトウェアで開発されました。
J2EE技術をサポートするサーバーとして、Webサーバー機能にサーブレット/JSP処理とEJBの実行をサポートするサーバーとして提供されます。 なのでWASをJ2EEサーバーといいます。 サーバーと呼ばれるが実体が存在しない、つまり物理サーバーの概念ではない論理サーバーを指します。

上記の内容でWASの構造と性能について調べました。
MaxGauge for JAVAは、単純なWASモニタリングではなく、ビジネストランザクションパフォーマンスの観点からモニタリングするためのツールです。
MaxGauge for JAVAを介して収集されたパフォーマンス指標とロギングされたデータを介して問題の発生原因を正しく把握するためには、WEB、Servlet、JSPについてさらに調査し理解することが役立ちます。
まず、WEBを調べてみましょう。
WEB
Webプログラムの理解
基本的にはクライアント(Client)/サーバー(Server)方式の形です。
クライアント(ウェブブラウザ)がウェブサーバに要求(Request)すると、Webサーバがこれを処理した後、結果をクライアント(Webブラウザ)に応答(Response)するようになる仕組みです。

Webプログラミング言語の種類
個人用ホームページとは異なり、大量のデータ処理や多数の接続を同時に収容できることが
開発可能な言語です。
CGI、ASP、PHPなどがあり、ここではサーブレットとJSPについて学びます。
Servlet(Server + Applet)
JAVA言語に基づいて動的なcontentsを生成する技術です。 JAVAプログラムを書く形式とほぼ同じです。 JAVAコード内にHTMLタグが混在しているため、作業に対する分離的な側面として見ると効率性が低下します。 プログラマがプログラミングするのが難しく、修正するのが難しい欠点があります。
JSP(Java Server Pages)
JAVA言語ベースで作られています。 ASP、PHPのようにHTMLタグ間の間に動的なcontents生成を担当するJAVAコードが入っている形でサーブレットの形と違う形式をとっています。 動的contentsを生成するためにスクリプト言語形式でプログラムを作成することができ、開発者に容易な開発を可能にします。 JSPには、ユーザーがタグを直接定義して使用できるカスタムタグを指定する機能があり、効率的なWebサイトを構築できます。
- JSPがサーブレットに変換されます。
- 変換されたサーブレットがコンパイルされ実行されます。
Webアプリケーションの処理手順
ウェブアプリケーションとは、ウェブに基づいて実行されるプログラムを意味します。
したがって、Webプログラミングと
Webアプリケーションとの関係は、WebプログラミングによるWebアプリケーションの実装です。

● WebブラウザはWebサーバーにページを要求します。
● 対応するウェブサーバは、ウェブブラウザの要求を受け取り、要求されたページのロジックおよびデータベースとの連携のためにアプリケーションサーバに処理を要求します。
● Webアプリケーションサーバは、データベースとの連携が必要な場合、データベースとデータの処理を行います。
●logicおよびデータベースジョブの処理結果をWebサーバーに送信します。
● Webサーバは結果を再度Webブラウザに応答します。
l Webアプリケーションは、Webブラウザ、Webサーバー、Webアプリケーションサーバー、データベースで構成されています。
Webブラウザ | Web用クライアントであり、ユーザーの作業ウィンドウです。 |
Webサーバー | Webブラウザの要求を受け付けるところで、作業の結果をWebブラウザに応答するところです。 要求されたページのロジックとデータベースとの連携のためにアプリケーションサーバーにそれらの処理を要求するタスクを実行します。 |
Webアプリケーションサーバー | 要求されたページのlogicおよびデータベースとの連携を処理する部分です. |
データベース | データのリポジトリとしてWeb上で発生したデータはすべてここに保存されます。 |
ウェブの動作方法とウェブのコンポーネントの調査と整理を行います。
ウェブのリクエストとレスポンスのプロセスと処理プロセスを見ると、WebアプリケーションサーバーがWebサーバーとデータベースと連携して作業を進めることがわかります。
Webサーバーの役割は、クライアントの要求に応じて直接サービスするか、Webアプリケーションサーバーのコンテナを使用して要求を処理してクライアントに転送することです。
サーブレットへの要求が発生した場合、Webサーバーはサーブレットを処理するためにサーブレットコンテナに要求します。
次の章で、Webプログラミング言語であるServletとJSPについて学びましょう。
JSP, Servlet
JSP
JSPはJavaサーブレット技術を拡張し、Web環境でJavaのみでサーバーサイドモジュールを開発する技術です。
JSPもサーブレットと同様に、サーバーサイドでDBMSなどのバックエンドサーバーと連動してバックエンドサーバーのデータを処理し、Web上のエンドユーザーに表示でき、さまざまな条件に応じて表示できる内容を動的に処理します。
JSPはWebプログラミング言語の1つです。
Webプログラミング言語は、動的なページを生成するためのサーバー側スクリプト言語です。
そのような言語の中で、JSPはJavaに基づいて作られています。
– Note オブジェクト指向、プラットフォーム独立、ネットワーク指向、優れたセキュリティ、マルチスレッド機能、フレンドリーなコードが利点です。
JSPはJavaが持つ特徴をそのまま持っており、J2EEを構成する技術の一つです。

Servlet
サーブレットはマルチスレッドによってユーザーのニーズを処理し、その結果をエクスポートします。
CGIはクライアントをプロセスとして扱いますが、Servletはクライアントをスレッドとして扱います。
多くのクライアントのニーズを効果的に処理できます。 サーブレットオブジェクトは複数のスレッドが順番に処理するため、サーブレットのメソッドはマルチスレッドについて考慮しなければなりません。

1. クライアントのサービス要求(オブジェクト生成の有無チェック)
2. Yesの場合は作成せず、Noの場合オブジェクトを作成します(メモリにロード)
3. Invoker で生成された Thread で service method(response の内容が含まれる) を呼び出します。 クライアントごとに1つずつ生成されます。
4. 結果をクライアントに送信します。 このとき結果をmime typeに送りますが、Webブラウザのmime typeはtext/htmlです。
– Note Container はオブジェクト生成の有無をチェックしてオブジェクトが生成されていなければ生成します。
J2SE、J2EE、J2MEとサーブレット、JSPの関係
サーブレットとJSPはJ2SEゾーンではなくJ2EEゾーンであるため、JDK(J2SE)ではサーブレット関連APIがないため開発できません。
J2EE環境はJ2SE環境の上で運用されるため、J2EEに属するプログラミングを行うには、まずJ2SEがインストールされていなければならず、J2EEをサポートするサーバーが用意されていなければなりません。
動作方法
WebブラウザがJSPページをWebサーバーに要求すると、Webサーバーはこの要求を受け取ります。
ユーザーの要求を、WebサーバーがJSPファイルであることを認識し、ジョブをWebコンテナ(JSPコンテナ)に渡します。 このような要求を受けたWebコンテナは、対応するJSPページを見つけてJavaファイルに変換してからコンパイルすることになります。
コンパイルされたサーブレットは最終的にWebブラウザに応答し、ユーザーは応答の結果を表示します。 このプロセスは、JSPページが最初に要求されたときに一度だけ実行されます。 その後、同じページに対する要求があれば、変換されたサーブレットファイルでサービスを処理します。


実行コード方式(CGI) | スクリプト方式(Webアプリケーションサーバー) | |
コード形式 | コンパイルされた実行プログラム | コンパイルされていないスクリプトコード |
実行方法 | コンパイルされた機械語コードの直接実行 | スクリプトコードを解釈して実行 |
コード変更 | ソースコードを再コンパイルする必要がある | スクリプトコードを修正するだけです |
種類 | ほとんどのCGIプログラム | JSP, ASP, PHP |
実装 | Webブラウザリクエストの送信 | Webブラウザリクエストの送信 |
– Web サーバー要求を受信 | – Web サーバー要求を受信 | |
-プログラムの実行 | -スクリプトコードの翻訳 | |
-翻訳されたコードの実行 | ||
(翻訳が最初に一度だけ | ||
実行されるため速度が速い) | ||
コンテナ側とサービスAPI側の区別理由
J2EE は、コンテナ (Container) が管理するコンポーネント (container-managed component) グループとサービスAPI(Service API)グループに分けられます。 各分野ごとに専門家が個別のコンポーネントを一つ集中して開発すれば良いのです。 すでに提供されているサービスとコンテナを連携させることで、集中的なチューニングでパフォーマンスを向上させることができます。
– Note Connection Pooling など、一般的に使用されるコンポーネントやサービス分野とビジネスロジック開発を分けて作業することができます。
コンテナ
tomcatはコンテナの良い例です。
apacheなどのWebサーバーがユーザーからサーブレットに要求を受け取ったら、サーブレットを直接呼び出すのではなく、サーブレットを管理しているコンテナにこの要求を渡します。 このコンテナはサーブレットがデプロイされたコンテナです。 リクエストを受け取ったコンテナは、HTTP RequestとHTTP Responseオブジェクトを作成し、それを引数としてServlet doPost()またはdoGet()メソッドのいずれかを呼び出します。
●Webコンテナ。:JSPはサーバー側で動作し、Webサーバーと連動して動的なページを生成します。
JSPが動作する高サーバの環境ということです。
これは、JSPを使用するためにサーバー環境を構築する必要があり、基本的にWebサーバーとWebコンテナがインストールされている必要があります。 ほとんどのWebコンテナにはWebサーバー機能があります。
● サーブレットコンテナ。サーブレットを動作させることができる環境を提供するサーバープログラムです。つまりHTTPリクエストを受け取り、対応するサーブレットを動作させ、その結果をユーザーのブラウザに渡す機能を提供します。通常コンテナという理由は、サーブレットフレームワーク内で動作し、サーブレットが動作できる環境を提供し、その他必要な作業などを提供してくれるからです。 HTTPパラメータのparsingと結果配信をコントロール、Forwarding、Redirectingなどの機能をコンテナから提供してくれます。このときサーブレット開発者は自分が作ったサーブレットをこのコンテナに登録し、実際の動作をコンテナが知っているようになるために使われる言語です。
●JSPコンテナ :実際、JSPコンテナの意味はサーブレットコンテナの概念と同じです。 実際にはサーブレットコンテナがJSPコンテナになります。 JSPはPHP / ASPのように完全にスクリプト形式で動作せず、サーブレットに変換された後に実行されるためです。 JSPをサーブレットにコンパイルするのがJSPエンジンです。 tomcatの場合、JSPエンジンはJSPServletです。
つまり、JSPをコンパイルして動作させることを特定のサーブレットが担当しているのです。
JSP自体が完全なサーブレットでコンパイルされていないことがわかります。
JSPServletが駆動できるタイプのServletに変わります。
JSPコンテナはサーブレットに変換する過程でparsingプロセスがもう1つオンになっているもので、残りは同じです。
●EJBコンテナ: EJB specは、スケーラブルでマルチユーザー処理に安全なトランザクション機能を認識する分散型ビジネスアプリケーションコンポーネントを開発するために必要な標準化されたモデルを提供します。
EJBは、ビジネスロジックを実装したさまざまなコンポーネントをサーバーに分散させることで、持続可能なデータをオブジェクト指向の方法で表現できるようにします。
– Noteコンテナは、サーブレットとWebサーバーが互いに通信するための簡単な方法を提供し、サーブレットのライフサイクルを管理し、要求が入るたびに発生するスレッドに対するマルチスレッド化をサポートし、セキュリティ管理、JSPをサポートします。
J2EEは2種類のコンテナを提供します。 WebコンテナとEJBコンテナです。 WebコンテナはサーブレットとJSPの実行環境を提供し、EJBコンテナはEnterprise JavaBeansの実行環境を提供します。
サーブレットLifecycle

1. init( ) : 初期化とリソース割り当て。 1回だけ呼び出されます。 (コンテナごとに1個)
2. service():リクエストごとに1つずつ呼び出されます。 reload も該当
3.destroy( ) : リソース解除と消滅 1 回だけ呼び出されます。 管理 container が終了したときの timeoutになったとき、クラスの内容が変更されたとき、再コンパイル時に呼び出されます。
サーブレットが最初にロードされると、init()メソッドが実行されます。 init()メソッドでは、Servletはサービスに必要な初期化操作を実行し、init()メソッドはservice()メソッドを呼び出します。
初期化されたサーブレットは、クライアントからの要求があるたびにスレッドが生成され、並行してservice( ) method を実行する.
サーブレットはもはやサービスをしない場合はサーブレットエンジンによってメモリからアンロードされます。
このとき unload される前に destroy( ) method が実行されます。
service()メソッドは0回以上実行され、init()メソッドは複数回実行できますが、
destroy()メソッドを実行する必要があります。
WAS内部的にJSPをJAVAファイルに変換し、それを再度compileしてclassファイルに置き換えて実行を行います。 ページ自体がクラスになります。
Servlet はそれ自体が JAVA になっており、それを class で compile します。 サーブレットにさらに一歩進んだのがJSPです。
JAVAとHTMLを分離し、開発とデザインを区別することで複雑さを軽減し、アップグレードや事後管理をより便利にしています。
結論
WASを監視するために、WASのコンポーネントとそのコンポーネントが何であるかを調べました。
インターネットの発展により使用量が増加し、Web Serverの作業を細分化しました。
1階層だったシステムのますます増え、n階層にわかれました。
どの部分でどんな作業をしてどんな役割をするのかわからないと、障害が発生したときに原因を見つけることも難しくなりました。
そのため、WASエンジニアは各部門に対してどのような作業が行われているかをすぐに把握できなければならず、問題現象を見て問題が発生した地点で適切な対応を行うことができなけれいけません。