2

次のような関数を作成したいと思います。

void MyIncludeCompile(String TheFile) {
  "%><%@include file="+TheFile+"%><%";
}

独自のメソッドまたは関数を構築する include ディレクティブの代替手段を取得したいと考えています。

何かのようなもの:

org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, TheFile, out, false);

しかし、それは何かに適用できます:

void MyIncludeRun(String TheFile) {
  %><jsp:include page="+TheFile+"/><%";
}

つまり、実行時間ではなく翻訳時間です。ご覧のとおり、実行時のinclude アクションには、純粋な Java コードを使用した場合と同等のものがあります。

ディレクティブを含める代替手段はありますか?

4

1 に答える 1

0

私の答えはノーです。たとえば、独自のインクルード タグを実装して、<my:include file="theFile"/>独自のロジックをタグ ハンドラ クラスに入れることはできますが、翻訳時に実行することはできません。変換時に、JSP は通常の Java ファイル (Servletより正確には のサブクラス) に変換されます。ディレクティブ (および宣言) のみがサーブレット クラスに変更を加えることができます (スクリプトレットと式はサービス メソッドにコードを挿入し、タグは実行時に処理されます)。の実装の詳細はわかりませんがJspRuntimeLibrary、include メソッドのシグネチャにはリクエストとレスポンスのオブジェクトが含まれているため、実行時のリソースも含まれていると思います。

于 2013-11-05T21:16:52.173 に答える