JSP には 2 つの形式の include があることは誰もが知っています。
<%@ include file=” ”%>
<jsp:include page=” ”lush=”true”/></P>
前者は指示要素、後者は行動要素です。それらは具体的にどこで使用されるのでしょうか?使い方と違いは何ですか?これを見た多くの人が思い浮かべる疑問ではないだろうか。以下を見てみましょう。 </P>
通常、アプリケーション内のすべてのページの特定の部分 (タイトル、フッター、ナビゲーション バーなど) が同じである場合は、include の使用を検討できます。具体的には、<%@ include file=""%> を使用する場合と、<jsp:include page=""lush="true"/> を使用する場合です。まず最初に理解するのは、それらの違いです。それぞれの使い方の違いを理解することでのみ、いつ使用するか、どのように選択するかがわかります。
<%@ include file=" ”%> の場合、jsp include ディレクティブ要素は指定されたページのコンテンツを読み取ります。そして、これらのコンテンツを元のページに統合します。 (このプロセスは、変換段階、つまり、jsp がサーブレットに変換される段階で実行されます。</P>
変換段階の説明は次のとおりです。 jsp ページをそのままブラウザに送信することはできず、すべての jsp 要素が最初にサーバーによって処理される必要があることがわかっています。これは、JSP ページをサーブレットに変換し、サーブレットを実行することによって行われます。サーバーには、JSP ページを処理するための JSP コンテナが必要です。 JSP コンテナは通常、サーブレットの形式で実装され、JSP ページに対するすべてのリクエストを処理するように構成されます。 </P>
Jsp コンテナは、JSP ページをサーブレット (JSP ページ実装クラスと呼ばれます。JSP ページ実装クラスと呼ばれます) に変換し、このサーブレットをコンパイルします。これら 2 つのステップは翻訳段階を構成します。</P>
このことから、jsp ページは、 include ディレクティブ要素で指定されたページの実際のコンテンツ (つまり、コード スニペット) を、それを導入する jsp ページに追加し、ファイルに合成された後、. JSPコンテナによるサーブレット。このとき、一時クラスファイルとJavaファイルが生成されることがわかります。ここに例を示します。 </P>
サーバーは tomcat を使用し、ページに導入される jsp ファイルは test.jsp と呼ばれます。インポートされたページは date.jsp という名前です。この JSP ファイルには時間に関連する JSP コードが格納されており、現在のコンテキスト ルートは test に設定されています。
//======date.jspのソースファイル======//
<%@ ページ言語="java" contentType="text/html;charset=gb2312"%>
<%
java.util.Date date=new java.util.Date();
文字列 date_cn = "";
文字列 dateStr = "";
スイッチ(日付.getDay())
{
case 0:date_cn = "日";
case 1:date_cn = "一";
case 2:date_cn = "二";
case 3:date_cn = "三";
case 4:date_cn = "四";
case 5:date_cn = "五";
case 6:date_cn = "六";
}
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>
<頭>
<title>include の 2 つの使用法</title>
<jsp:include page=”date.jsp” flash=”true”/>
<%--@ include file=”date.jsp” %-->
// ここでは、date.jsp ファイルを導入するために 2 つの異なる形式の include を使用します。
<頭>
<本文>
<テーブル><tr><td>
jsp での include の 2 つの使用法に注意してください。
</td></tr></table>
</body>
</html></P>
test.jsp ファイルでは、「jsp での include の 2 つの使用法について注意してください。」というテキスト行のみを出力します。ここで、最初に <%@ include file="date.jsp" %> という形式を使用します。 date.jsp ファイル。何か問題が起こる可能性はあると思いますか?このとき、次のエラー メッセージが表示されます。
HTTPステータス500?
org.apache.jasper.JasperException: /date.jsp(0,0) ページ ディレクティブ: contentType を複数回使用することはできません
以下に多数のエラーがありますが、問題がどこにあるのかを確認するには、これを見るだけで済みます。ステータス コードは http 500 サーバー内部エラーです。以下のヒントをもう一度見てください。 date.jsp ページでは複数の contentType を指定できません。</P>
その理由は次のとおりです。これは、変換フェーズ中に、ファイルを合成するために date.jsp ファイルのコードがそのままの状態で test.jsp ページに追加されたためです。合成されたファイルは同じになります。
<%@ page language=”java” contentType=”text/html;charset=gb2312”%>
このコード。解決策は、date.jsp ファイル内のこの文を削除することです。更新してから、test.jsp ページをリクエストします</P>
リクエストtest.jspは次のようにページに表示されます
2003年12月10日 13時12分40秒
jsp での include の 2 つの使用法に注意してください。 </P>
まだ何も見つかりません。 Tomcat 配下の一時ファイルを確認してみましょう。そこに移動して、date.jsp ファイルの内容が test.jsp ファイルに追加されているかどうかを確認します。
<注: ここでの Tomcat はドライブ E のルート ディレクトリにインストールされています>
目次
E:tomcatworkStandalonelocalhosttest。
このディレクトリには次のものが表示されます
test_jsp.java と test_jsp.class の 2 つのファイルがあります。 </P>
ここでのjavaファイルは、jspコンテナでjspをサーブレット化したtest_jsp.javaファイルです。 </P>
対応する test_jsp.class ファイルは、test_jsp.java サーブレット ファイルをコンパイルすることによって生成されたクラス ファイルです。生成されたサーブレット ファイル (test_jsp.java) を開きます。この時点で、test.jsp ファイルがサーブレット ファイルに変換されると、test.jsp ページにないコードが出力 <haed> の間に追加されることがわかります。新しく追加された内容は date のコードです。 jsp: どのような新しいコンテンツが追加されたか、または実際に新しいコンテンツが追加されたかどうかは、ここでは詳しく説明しませんので、テストして確認してください。
上記は、<%@ include file="date.jsp"%> 形式を使用して取得した結果です。
次に、 <jsp:include page="dae.jsp" flash="true"/> を使用します。つまり、
<%@ include file="date.jsp"%> を <jsp:include page="dae.jsp" flash="true"/> に置き換えて、test.jsp をリクエストします。
2003??12??10?? 13:30:13
jsp での include の 2 つの使用法に注意してください。 </P>
このとき、導入した date.jsp で出力した日付の漢字が文字化けしているのがページ上で確認できます。これは、リクエスト処理段階で include 動作要素が実行されるためです。リクエスト処理ステージについて説明する必要があります。前述したように、JSP ページをサーブレットに変換する役割に加えて、JSP コンテナは、各リクエストを処理して応答を生成するために JSP ページ実装クラスを呼び出す役割も担います。リクエスト処理ステージでは、クラス ファイルのみが実行されます。 </P>
したがって、ページに include アクション要素を導入する場合、実際には date.jsp ファイルが変換およびコンパイルされた後に生成されるサーブレット クラス ファイルのみが参照されます。この場合、date.jsp は実行後に別のファイルとしてテストされます。 .jsp ファイルの実行時に呼び出されます。date.jsp ファイルで文字エンコーディングが指定されていないため、文字化けが発生します。解決するには、date.jsp ファイル内で削除された文字を再置換します。
<%@ page language=”java” contentType=”text/html;charset=gb2312”%>
このステートメント行を追加した後、更新して再実行すると、tomcat の下にある一時ファイルを確認すると、ページは正しく表示され、 include ディレクティブを使用して通常に実行した場合と同じになります。この2つのファイルは、test_jsp.javaファイルとtest_jsp.classファイルと同じ方法で取得されます。このときのtest_jsp.javaファイルのコードを見ると、次のようになります。現時点では、新しいコード行のみが追加されていることがわかります。
JspRuntimeLibrary.include(request, response, "date.jsp", out, true);</P>
date.jsp ファイルのコードは test.jsp に追加されません。</P>
これは、実行時に date.jsp ページが実行された後に生成される応答を導入するだけです。つまり、これらによって生成される型であれば、応答を生成できる任意の Web リソース (サーブレットや JSP ページなど) を指定できます。リソースは jsp と同じです。ページによって生成されるコンテンツ タイプは同じです。JSP コンテナは内部関数呼び出しを通じて指定されたリソースを実行するため、これらのインポートされたリソースは元のリクエストの処理に役立ち、これらのリソースはすべてのオブジェクトにアクセスできます。リクエスト スコープ内とすべての元のリクエスト パラメータ。</P>
メイン ページがリクエストされた時点では、これらのページはまだメイン ページに導入されていないため、ページ属性の request-time 属性値を使用して、実行時の状況に基づいてどのページを導入するかを決定することもできます。また、いくつかのリクエストを追加することもできます。受信ページによって読み取られるパラメータ。
<jsp:include page="<%=pageSelectedAtRuntime%>" flash="true" >
<jsp:param name=”fitstParamer” value=”firstvalue”>
<jsp:param name=”lastParamer” value=”lastvalue”>
</jsp:include></P>
インポートされた JSP ページが変更された場合、そのページの最新バージョンはすぐに使用できます。これは、インポートされたページがブラウザーによって直接呼び出された JSP ページとまったく同じように扱われるためです。つまり、コンテナーがページの変更を検出します。 . と自動的に翻訳段階に入り、ページの最新バージョンを取得します。</P>
(インクルードビヘイビア要素は他のjsp要素と同じであることに注意してください。ビヘイビア本体がない場合は、「/」で終わる必要があります。次のようになります。
<jsp:include page="<%=pageSelectedAtRuntime%>" flash="true" />)</P>
include の 2 つの使用法の違いを次に示します。主な違いは 2 つあります。
1: 実行時間:
<%@ include file=”relativeURI”%> は変換フェーズ中に実行されます。
<jsp:include page="relativeURI" flash="true" /> はリクエスト処理フェーズ中に実行されます。
2:紹介内容の違い:
<%@ include file=”relativeURI”%>
静的テキスト (html、jsp) を導入し、サーブレットに変換される前に JSP ページと統合します。
<jsp:include page="relativeURI" flash="true" />実行ページまたはサーブレットによって生成された応答テキストを導入します。
また、どちらの使用法でも、ファイル属性とページ属性がスラッシュで始まる場合は、アプリケーションの URI に割り当てられたプレフィックスに従って解釈されます。スラッシュで始まらない場合は、このファイルが導入されているページのパスに従って解釈されます。URL の解釈方法の詳細については、関連資料を参照してください。本。