JSPの基礎知識

JSPの動作原理を教えてください

テンアートニ 中越智哉
2001/3/13

 「JSPとは何ですか?」で、ServletとJSPでできる機能には、ほとんど違いがないと書きましたが、その理由は、JSPの動作原理に関係があります。クライアントがJSPを呼び出す際には、HTMLなどと同じように、「….jsp」というファイル名を指定した形式でリクエストがWebサーバに送信されます。JSPに対応したWebサーバでは、受信したリクエストのURLを解析し、.jspというファイルが指定されていた場合は、Webサーバ自身は処理を行わず、その処理を、JSPプロセッサに依頼します。そして、JSPプロセッサが、指定されたJSPファイルを解析して実行し、結果をクライアントに送信する、という流れになります。

 この仕組みそのものは、Servletに非常に近いものですが、JSPの面白いところは、JSPプロセッサの動作にあります。実は、JSPプロセッサは、指定されたJSPを解析し、これを、同じ動作を行うServletのソースコードに書き直してコンパイルし、できたクラスファイルをロードして実行する、という処理をしているのです。つまり、すべてのJSPファイルは、サーバ側でいったんServletに書き換えられて、Servletとして実行されているということなのです。

JSPはServletに変換されて実行される

 ですから、ServletとJSPでできる機能には、ほとんど違いはない、というより、Servletでできないことは、JSPでもできないわけですから、機能は同じといってしまってもよいでしょう。

 ところで、上の説明を読まれて、毎回、JSPが呼ばれるたびに、Servletのソースファイルを生成して、コンパイルして、というサイクルを繰り返していては、同じ処理を行うServletと比較して、パフォーマンスが悪くなってしまうのでは? と思われた方もいらっしゃることでしょう。もちろん、同じJSPを実行するたびに毎回このような処理を行っているわけではなく、一度、クラスファイルが生成され、ロードされたものについては、Servletのソースは生成せず、ロードされたメモリ上のインスタンスを実行するようになっていますので、2回目以降のリクエストについては、通常のServletを実行するのと変わらない応答速度になります。

2回目以降のリクエストでは生成済みのクラスファイルを利用する


「Java Solution FAQ」




Java Agile フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Java Agile 記事ランキング

本日 月間