JSPのincludeの2つの使い方と違い


jspではincludeには2つの形式があることを知っています.それぞれ

<%@ include file=” ”%> 
<jsp:include page=” ” flush=”true”/>

前者は命令要素、後者は動作要素である.具体的にはどこで使いますか?どのようにそれらを使うのはどんな違いがありますか?これは多くの人がそれを見て考えている問題だと思います.次は一緒に見てみましょう.
通常、アプリケーション内のすべてのページの一部(タイトル、フッター、ナビゲーションバーなど)が同じ場合、includeを使用することを考慮できます.具体的には、いつ<%@include file="""%>、いつ
.この形式.まず理解しなければならないのはそれらの違いです.それらの使い方の違いを理解してこそ、いつ使うべきか、どのように選択すべきかを理解することができます.
<%@ include file=” ”%>
jspのinclude命令要素は、指定されたページの内容を読み込む.これらの内容を元のページと融合させます.(このプロセスは翻訳段階,すなわちjspがservletに変換される段階で行われる.
ここでは、jspページがブラウザにそのまま転送されず、すべてのjsp要素がまずサーバによって処理されなければならないことを知っています.これはjspページをservletに転送し,このservletを実行することによって達成される.サーバはjspページを処理するためにjspコンテナを必要とします.jspコンテナは通常servletの形式で実現され、このservletは構成され、jspページに対するすべての要求を処理することができる.
Jspコンテナは、jspページをservlet(jspページ実装クラス-JSP Page implementation classと呼ばれる)に変換し、このservletをコンパイルします.この2つのステップは翻訳段階を構成している.
これにより,jspページはinclude命令要素で指定されたページの実際の内容(すなわちコードセグメント)を導入したjspページに加え,ファイルを合成してjspコンテナによってservletに変換することが分かる.一時classファイルとjavaファイルが生成されるのがわかります.次に例を挙げます.
サーバはtomcatで、ページに導入されたjspファイルをtestと言います.jsp.導入するページをdateと言います.jsp.このjspファイルには時間に関するjspコードが格納されており、現在のコンテキストルートはtestに設定されています.
//======date.jspのソースファイル======//

<%@ page language=”java” contentType="text/html;charset=gb2312"%>
<%
  java.util.Date date=new java.util.Date();
  String date_cn ="";
  String dateStr = "";
  switch(date.getDay())
  {
      case 0:date_cn =" "; break;
      case 1:date_cn =" "; break;
      case 2:date_cn =" "; break;
      case 3:date_cn =" "; break;
      case 4:date_cn =" "; break;
      case 5:date_cn =" "; break;
      case 6:date_cn =" "; break;
  }
   dateStr = (1900+date.getYear()) + " " + (date.getMonth()+1) + " " + date.getDate() + " (  " + date_cn + ")";
%>
  document.write("<%=dateStr%>");
//======   test.jsp    =============//
<%@ page language=”java” contentType=”text/html;charset=gb2312”%>
<html>
<head>
<title>include     </title>
<jsp:include page=”date.jsp” flush=”true”/>
<%--@ include file=”date.jsp” %-->
  //      include          date.jsp    .
<head>
<body>
<table><tr><td>
  jsp include     .    。
</td></tr></table>
</body>
</html>

testでjspファイルには、「jspにおけるincludeの2つの使い方について.ご注目ください」というテキストが1行しか出力されていません.まず<%@include file="date.jsp"%>この形式でdateを導入する.jspというファイル.何か問題があると思いますか.エラーメッセージが表示されます.
HTTP Status 500 –
org.apache.jasper.JasperException:/date.jsp(0,0) Page directive: can't have multiple occurrences of contentType
以下には間違いがたくさんありますが、私たちはここを見るだけで問題の所在を知っています.ステータスコードはhttp 500サーバ内部エラーです.次のヒントを見てください.データjspページに複数のcontentTypeを指定することはできません.
原因はここにある.翻訳の段階でjspファイルのコードはそのままtestに追加する.jspページは、ファイルを合成します.合成されたファイルは同じです.
<%@ page language=”java” contentType=”text/html;charset=gb2312”%>
このコード.解決策はdate.jspファイルのこの削除.リフレッシュ後にtestを要求する.jspページ
お願いjspはページに次のように表示されます.
2003年12月10日13:12:40
jspにおけるincludeの2つの用法について.ご注目ください.
この時私たちはまだ何も発見できません.やはりtomcatの下の臨時ファイルを見に行きましょう.あそこへ行ってdateを見に行きます.jspファイルの内容がtestに追加されたかどうか.jspファイルにあります.
<注.ここのtomcatはEディスクルートディレクトリの下にあります>
目次
        E:\tomcat\work\Standalone\localhost\test.
このディレクトリの下に
test_jsp.JAvaとtest_jsp.classの2つのファイル.
ここのjavaファイルはjspコンテナがjspをservletに変換して得たtest_ですjsp.JAvaというファイル.
対応するtest_jsp.classこのファイルはコンパイルtest_jsp.JAvaというservletファイルで生成されたクラスファイルです.生成されたservletファイル(test_jsp.java)を開きます.この時私たちは発見します
testでjspファイルがservletファイルに変換すると、出力の間にtestではないものがいくつか加わる.jspページのコードは、新しく追加された内容がdateです.jspの中のコード:新しくどんな内容が入ったか、あるいは本当に新しい内容が入ったかどうかは自分でテストして見てください.ここでは詳しくは述べない.
以上が<%@include file="date.jsp"%>という形式で得られた結果である.
すなわち
<%@ include file=”date.jsp"%>を,testを要求する.jsp.
2003? ê 12??10?? 13:30:13
jspにおけるincludeの2つの用法について.ご注目ください.
ページに表示されます.我々が導入するdate.jspが出力した日付に中国語が文字化けした.何が原因ですか.
なぜならinclude動作要素は要求処理段階で実行するからである.(ここでは、要求処理フェーズについて説明する.
Jspコンテナは、前述のようにjspページをservletに変換する他、各要求を処理するためにjspページ実装クラスを呼び出す応答を生成する.この段階をリクエスト処理段階と呼ぶ.要求処理フェーズはクラスファイルのみを実行する.
だからinclude動作要素をページに導入するとき、実際にはdateを参照しただけです.jspというファイルが変換するコンパイルされたservletクラスのファイル.そうだなjspは単独のファイルとして実行するからtestされる.jspファイルの実行時に呼び出す.なぜなら.jspファイルには文字符号化が指定する.だから文字化けした.解決策はdate.jspファイルでさっき削除した
<%@ page language=”java” contentType=”text/html;charset=gb2312”%>
この行の文が追加された後、リフレッシュが再実行されます.このときのページの表示は正しい、include命令で正常に動作時と同じである.tomcatの下の一時ファイルをもう一度見ると見つかります.この時点でdateが1つ増えましたjsp.JAvaファイルとdate_jsp.classファイルこの2つのファイルの入手方法はtestと同じです.jsp.JAvaとtest_jsp.classファイルの入手方法は同じです.この時点test_をもう一度確認しますjsp.JAvaファイルのコードが見つかります.この時点で、新しいコードは1つだけ追加されました.
JspRuntimeLibrary.include(request, response, "date.jsp", out, true);
データをjspファイルのコードはtestに追加されます.jsp.
実行時にdateを導入しただけです.jspページの実行後に生じる応答.これは、これらのリソースが生成するタイプがjspページが生成するコンテンツのタイプと同じである限り、応答を生成できる任意のWebリソース(例えばservletまたはjspページ)を指定することができることを意味する.JSPコンテナは、内部の関数呼び出しにより指定するリソースを実行する.したがって、導入するリソースは、元の要求を処理するのに役立つので、これらのリソースは、要求の役割ドメイン内のすべてのオブジェクトにアクセスすることができる.およびすべての元の要求パラメータ.
ホームページが要求する場合、これらのページはまだホームページに導入されていないため、page属性に対して要求時の属性値を使用して、実行時の状況に応じてどのページを導入するかを決定することができます.また、導入するページ読み出しの要求パラメータを追加することもできる.


<jsp:include page=”<%=pageSelectedAtRuntime%>” flush=”true” >
<jsp:param name=”fitstParamer” value=”firstValue”>
<jsp:param name=”lastParamer” value=”lastValue”>
</jsp:include>

導入されたjspページを変更すると、ブラウザによって直接呼び出すjspページと同様に、導入されたページに対する扱い方が、直ちにそのページの最新バージョンを使用することができる.すなわち、容器はページの変化を検出する、自動的に翻訳段階に入り、ページの最新バージョンを得る.
(include動作要素は、jspの他の要素と同様に、動作体がない場合は「/」で終了する.以下のようにする.
” flush=”true”/>)
以下はincludeの2つの使い方の違いです
主に2つの面の違いがあります.
一:実行時間:
<%@include file="relativeURI"%>は翻訳フェーズで実行されます
要求処理フェーズで実行する.
2:導入内容の違い:
<%@ include file=”relativeURI”%>
静的テキスト(html,jsp)を導入する、JSPページがservletに変換される前に融合する.
実行ページまたはservletによって生成する応答テキストを導入する.
また、どちらの用法においてもfileとpageの属性は相対的なURIとして解釈する.スラッシュで始まると
環境に関するパスです.アプリケーションに付与URIの接頭辞に基づいて解釈し、スラッシュで始まる場合、ページ関連のパスは、このファイルに導入されたページが存在するパスに基づいて解釈する.URLの解釈方法については、関連資料や書籍を参照してください.
これは個人的な理解にすぎない.レベルが限られていますので、よろしくお愿いします.そしてみんなと交流することができることを望んで、共に進歩して、多く提案することを望みます.