JSP がコンパイルされることはありますか? 私が質問している理由は、Java EEアプリケーションをWebサーバーにデプロイするたびに、コンパイルされたときにWEB-INFフォルダーにサーブレットとBeanクラスファイルしか表示されず、そのJSPは表示されないためです。 、通常のリクエスト/レスポンス サイクルの論理フローと全体像について説明します。
4 に答える
基本的に:
サーブレットコンテナでは、JSPサーブレットは
.jsp
(通常)で終わる任意のURLにマップされます。これらの
.jsp
URLのいずれかが要求されると、要求はJSPサーブレットに送信されます。次に、このサーブレットは、JSPがすでにコンパイルされているかどうかを確認します。JSPがまだコンパイルされていない場合、JSPサーブレットはJSPを
Servlet
インターフェイスを実装するJavaソースコードに変換します。次に、このJavaソースコードをファイルにコンパイルし.class
ます。この.class
ファイルは通常、アプリケーションのサーブレットコンテナの作業ディレクトリのどこかにあります。JSPサーブレットがJSPソースコードからサーブレットクラスをコンパイルすると、リクエストをこのサーブレットクラスに転送するだけです。
特にJSPをプリコンパイルしない限り、これはすべて実行時に発生し、サーブレットコンテナの作業ディレクトリに隠されているため、「非表示」になります。また、これが「概念的に」行われることであることに留意してください。このワークフローでは、いくつかの最適化が可能です。
はい、コンパイルされています!
古いコンパイラは、Java ファイルとクラス ファイルを生成することさえありました。
新しいコンパイラ (少なくとも Sun JDK 6 update 30 以降) のように見えますが、メモリ内ですべてのバイトコード生成を実行できるため、アプリケーションwork
やtemp
ディレクトリにトレースは表示されません。
JSP はサーブレットにコンパイルされます。通常、コンテナに組み込まれている特別なコンパイラがあります。
古き良きウィキペディアから:
アーキテクチャ的には、JSP は Java サーブレットの高レベルの抽象化と見なすことができます。JSP は実行時にサーブレットに変換されます。各 JSP のサーブレットはキャッシュされ、元の JSP が変更されるまで再利用されます。