24

JSP がコンパイルされることはありますか? 私が質問している理由は、Java EEアプリケーションをWebサーバーにデプロイするたびに、コンパイルされたときにWEB-INFフォルダーにサーブレットとBeanクラスファイルしか表示されず、そのJSPは表示されないためです。 、通常のリクエスト/レスポンス サイクルの論理フローと全体像について説明します。

4

4 に答える 4

61

基本的に:

  • サーブレットコンテナでは、JSPサーブレットは.jsp(通常)で終わる任意のURLにマップされます。

  • これらの.jspURLのいずれかが要求されると、要求はJSPサーブレットに送信されます。次に、このサーブレットは、JSPがすでにコンパイルされているかどうかを確認します。

  • JSPがまだコンパイルされていない場合、JSPサーブレットはJSPをServletインターフェイスを実装するJavaソースコードに変換します。次に、このJavaソースコードをファイルにコンパイルし.classます。この.classファイルは通常、アプリケーションのサーブレットコンテナの作業ディレクトリのどこかにあります。

  • JSPサーブレットがJSPソースコードからサーブレットクラスをコンパイルすると、リクエストをこのサーブレットクラスに転送するだけです。

特にJSPをプリコンパイルしない限り、これはすべて実行時に発生し、サーブレットコンテナの作業ディレクトリに隠されているため、「非表示」になります。また、これが「概念的に」行われることであることに留意してください。このワークフローでは、いくつかの最適化が可能です。

于 2012-05-15T19:33:17.140 に答える
7

はい、コンパイルされています!

古いコンパイラは、Java ファイルとクラス ファイルを生成することさえありました。

新しいコンパイラ (少なくとも Sun JDK 6 update 30 以降) のように見えますが、メモリ内ですべてのバイトコード生成を実行できるため、アプリケーションworktempディレクトリにトレースは表示されません。

于 2012-05-15T19:26:50.667 に答える
7

JSP はサーブレットにコンパイルされます。通常、コンテナに組み込まれている特別なコンパイラがあります。

古き良きウィキペディアから:

アーキテクチャ的には、JSP は Java サーブレットの高レベルの抽象化と見なすことができます。JSP は実行時にサーブレットに変換されます。各 JSP のサーブレットはキャッシュされ、元の JSP が変更されるまで再利用されます。

于 2012-05-15T19:27:53.160 に答える