人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: javabenkyo
●カテゴリ:インターネット ウェブ制作
✍キーワード:JSP かめ アクション インクルード タグ
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● Dworkers
●43ポイント ベストアンサー

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両方チェックしてくれた方が助かります。

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

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

◎質問者からの返答

ありがとうございます。

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


2 ● sadajo
●27ポイント

http://www.atmarkit.co.jp/fjava/rensai/jsp05/jsp05.html

◎質問者からの返答

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


3 ● b-wind
●26ポイント

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 のそれぞれの呼び出し時に同じ変数が共有される事になります。

◎質問者からの返答

ありがとうございます。

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ