JSPについての質問です。静的インクルードと動的インクルードの違いがわかりません。多くの参考書では、

・ディレクティブタグのインクルードは静的インクルードであり、取り込んだページを変更してもそれが反映されない
・アクションタグのインクルードは動的インクルードであり、取り込んだページの変更を反映する
と説明されています。しかし、実際に確かめてみると、どちらの場合も変更が反映されるようです。よくわからないのでご存知の方は教えてください。

回答の条件
  • 1人2回まで
  • 登録:2007/02/17 20:00:12
  • 終了:2007/02/24 08:24:45

ベストアンサー

id:Dworkers No.1

Dworkers回答回数3ベストアンサー獲得回数12007/02/17 21:35:42

ポイント43pt

JSP-A(画面全体) で JSP-B(メニュー部分) をインクルードすることを例にします。


■静的インクルードの場合

JSP-Aのコンパイル時にJSP-BのコードがJSP-Aの中に取り込まれて1つ?のクラスファイルが作成されます。

以後は、JSP-Aが更新されない限り、どんなにJSP-Bが更新されても再コンパイルはされません。

JSP-Bの変更を反映するにはJSP-Aも更新する必要がなります。


■動的インクルードの場合

JSP-AとJSP-Bはそれぞれでコンパイルされ2つのクラスファイルが作成されます。

JSP-Aが画面(HTML)を生成する際、JSP-Bをインクルードしている部分でJSP-Bが呼び出されます。

JSP-Aの更新有無に関わらずJSP-Bが呼び出されるタイミングで常にJSP-Bの更新有無がチェックされます。

JSP-Bが更新されていれJSP-Bは再度コンパイルされ、更新した内容が反映されます。


★アプリケーションサーバーの動作に関して

開発時は静的インクルードであってもJSP-A、JSP-B両方チェックしてくれた方が助かります。

この辺を考慮し、アプリケーションサーバーによっては静的/動的インクルードに関する動作を設定することが可能です。

アプリケーションサーバーでそのような設定が確認されてみてはいかがでしょうか?

id:javabenkyo

ありがとうございます。

ただ、アプリケーションサーバの設定の確認の仕方がわかりません。Tomcatを使用しているのですが(ヴァージョンは4.1)教えてください…

2007/02/17 22:12:08

その他の回答(2件)

id:Dworkers No.1

Dworkers回答回数3ベストアンサー獲得回数12007/02/17 21:35:42ここでベストアンサー

ポイント43pt

JSP-A(画面全体) で JSP-B(メニュー部分) をインクルードすることを例にします。


■静的インクルードの場合

JSP-Aのコンパイル時にJSP-BのコードがJSP-Aの中に取り込まれて1つ?のクラスファイルが作成されます。

以後は、JSP-Aが更新されない限り、どんなにJSP-Bが更新されても再コンパイルはされません。

JSP-Bの変更を反映するにはJSP-Aも更新する必要がなります。


■動的インクルードの場合

JSP-AとJSP-Bはそれぞれでコンパイルされ2つのクラスファイルが作成されます。

JSP-Aが画面(HTML)を生成する際、JSP-Bをインクルードしている部分でJSP-Bが呼び出されます。

JSP-Aの更新有無に関わらずJSP-Bが呼び出されるタイミングで常にJSP-Bの更新有無がチェックされます。

JSP-Bが更新されていれJSP-Bは再度コンパイルされ、更新した内容が反映されます。


★アプリケーションサーバーの動作に関して

開発時は静的インクルードであってもJSP-A、JSP-B両方チェックしてくれた方が助かります。

この辺を考慮し、アプリケーションサーバーによっては静的/動的インクルードに関する動作を設定することが可能です。

アプリケーションサーバーでそのような設定が確認されてみてはいかがでしょうか?

id:javabenkyo

ありがとうございます。

ただ、アプリケーションサーバの設定の確認の仕方がわかりません。Tomcatを使用しているのですが(ヴァージョンは4.1)教えてください…

2007/02/17 22:12:08
id:sadajo No.2

sadajo回答回数4919ベストアンサー獲得回数492007/02/17 23:03:02

id:javabenkyo

ありがとうございます。ただ、すでにこちらのページは見ておりました。

2007/02/17 23:47:21
id:b-wind No.3

b-wind回答回数3344ベストアンサー獲得回数4402007/02/17 23:20:10

ポイント26pt

JSP は一旦 Java コードに変換されてから、それが Servlet として実行されます。

静的 Include の場合 Include する方とされる方が一つのコードのなってからコンパイルされます。

動的 Include の場合 Include するほうとされるほうは別々のサーブレットして実行されます。


a.jsp,b.jsp,c.jsp の3ファイルがあり、a.jsp と b.jsp のそれぞれが c.jsp を Include しているとすると

静的 Include の場合

・a.jsp + c.jsp

・b.jsp + c.jsp

の2つのサーブレットが存在する事になります。

動的 Include の場合

・a.jsp

・b.jsp

・c.jsp

の3つのサーブレットが存在する事になります。


やり方にも寄りますが、数が多くなるとメモリ使用量とパフォーマンスに差が出てくることと、

c.jsp が状態を持つ変数を持っていた場合、その変数は静的 Include の場合 a.jsp,b.jsp のそれぞれの呼び出しで別々に管理され、

動的 Include の場合あくまで c.jsp の中にあるので a.jsp,b.jsp のそれぞれの呼び出し時に同じ変数が共有される事になります。

id:javabenkyo

ありがとうございます。

ただ、それをふまえたうえで、インクルードしたJSPの変更の反映になぜか差がないことが疑問だったのですが…

2007/02/17 23:50:17

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません