1

こんにちは、私は Java EE を学んでいる初心者です。doGet メソッドに次のコードを含むサーブレット (コントローラー) VersionOverview.java を作成しました。

RequestDispatcher view = request.getRequestDispatcher("WEB-INF/jsp/versions.jsp");
view.forward(request, response);

ファイル WEB-INF/jsp/versions.jsp には次の行が含まれています。

<div id="content">
  <jsp:include page="/WEB-INF/jspf/organization-filter.jspf" />
  ...
</div>

ファイル /WEB-INF/jspf/organization-filter.jspf には次の行が含まれています。

<form name="organization-filter" action="versions">
  <input type="text" id="org_name" name="org_name" value="<%= request.getAttribute("org_name") %>">
  <br>
  <input type="hidden" id="org_id" name="org_id" value="<%= request.getAttribute("org_id") %>">
  <br>
  <input type="submit" name="submit" value="Submit"/>
</form>

ページ /versions (上記のサーブレットにマップされている) を開くと、org_name という名前の空白の入力フィールドの代わりに、その中に次のテキストが表示されるため、organization-filter.jspf がコンパイルされていないようです。

<%= request.getAttribute(

以下に示すように、versions.jsp の include ディレクティブを変更すると、機能し始めます。

<div id="content">
  <%@include file="/WEB-INF/jspf/organization-filter.jspf" %>
  ...
</div>

jsp:include を使用すると機能しない理由を教えてください。前もって感謝します。ヴォイテック

4

1 に答える 1

3

jspfファイルは、includeディレクティブを使用して静的にインクルードされることになっているファイルです。

<%@ include file="someFile.jspf" %>

それがJSPです断片セグメントはであり、静的に含まれることになっているため、コンパイルしても意味がありません。

仕様の内容は次のとおりです。

デフォルトでは、拡張子.jspはトップレベルのJSPファイルを意味します。トップレベルのJSPファイル(クライアントによって直接呼び出されるか、別のページまたはサーブレットによって動的に含まれる)と静的に含まれるセグメントを区別することをお勧めしますが、必須ではありません。

  • .jsp拡張子は、最上位のJSPファイルに対応するファイルにのみ使用され、処理時にJSPページを形成します。
  • 静的に含まれるセグメントは、他の拡張子を使用します。この仕様の過去のバージョンでは、含まれているセグメントは「JSPフラグメント」と呼ばれていたため、拡張子.jspfが提案として提供されました。この拡張機能は、現在「jspセグメント」と呼ばれているにもかかわらず、一貫性の理由から引き続き提案されています。

動的に含める場合は、.jsp拡張子が必要です。しかし、この場合、静的インクルードを使用しない理由がわかりません。

于 2012-11-17T16:12:32.390 に答える