jsp include tag を使用して、他のアプリケーションによって動的に作成されたいくつかの html ページを自分のアプリケーション jsp ページにロードする必要があります<jsp:include page="${Htmlpath}" /> OR <jsp:include page="D:\MySharedHTML\test.html" />
。私の考えは、サーバー上に「MySharedHTML」のような共有フォルダーを作成し、他のアプリケーションがそこに html ファイルを作成できるようにすることです。私のアプリはフルパスを指定してアクセスします。しかし、jsp インクルードは「要求されたリソース D:\MySharedHTML\test.html は利用できません」と言っています。それを行う方法を入力します。前もって感謝します。
3 に答える
URL で利用できる必要があります。はD:\MySharedHTML\test.html
間違いなく有効な URL ではありません。有効な URL は次のようになりますhttp://localhost:8080/MySharedHTML/test.html
。
<jsp:include>
またはを使用する<c:import>
かどうかは、URL が内部 URL か外部 URL かによって異なります。は<jsp:include>
内部 URL でのみ機能します (つまり、同じ Web アプリケーション内のリソースであり、非公開で に隠されているリソースでもあります/WEB-INF
)。さらに<c:import>
、外部 URL でも動作します (したがって、完全に異なる webapp 内のリソースですが、それらはパブリックにアクセスできる必要があります。つまり、ブラウザーのアドレス バーに URL をコピーペーストするときに、目的のインクルード コンテンツを既に表示する必要があります)。
あなたの特定のケースでは、真の URL ではまったく利用できないサーバーのローカル ディスク ファイル システムの他の場所にあるようです。その場合、基本的に 2 つのオプションがあります。
そのパスのルート フォルダーを仮想ホストとしてサーバー構成に追加します。その方法は、何も言わなかったサーバーのメーカー/バージョンによって異なります。Tomcat を例にとると、次のエントリをその .xml に追加するだけ
/conf/server.xml
です。<Context docBase="D:\MySharedHTML" path="/MySharedHTML" />
このようにして、フォルダの内容はすべて
http://localhost:8080/MySharedHTML/*
、test.html
. この方法で使用できます<c:import>
(注:<jsp:include>
これは同じ webapp にないため、適用できません)。<c:import url="/MySharedHTML/test.html" />
ローカル ディスク ファイル システムへのプロキシとして機能するサーブレットを作成します。Servlet 3.0 / Java 7 を使用して
${Htmlpath}
いて、単に を返すように variable を変更できると仮定すると、次のようにtest.html
なります。@WebServlet("/MySharedHTML/*") public class PdfServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String filename = request.getPathInfo().substring(1); File file = new File("D:\\MySharedHTML", filename); response.setHeader("Content-Type", getServletContext().getMimeType(filename)); response.setHeader("Content-Length", String.valueOf(file.length())); response.setHeader("Content-Disposition", "inline; filename=\"" + URLEncoder.encode(filename, "UTF-8") + "\""); Files.copy(file.toPath(), response.getOutputStream()); } }
(まだ Servlet 3.0 / Java 7 を使用していない場合は、明らかな
web.xml
登録とInputStream
/OutputStream
ループのボイラープレートにフォールバックします)サーブレットは同じ webapp で実行されるため、
<jsp:include>
問題なく動作するはずです。<jsp:include page="/MySharedHTML/${HtmlFilename}" />
または、シンボリックリンク、ショートリンク、またはソフトリンクを使用して実現できるため、コーディングはあまり必要ありません。私の場合、私のアプリケーション Web コンテンツの下にある MySharedHTML のソフトリンクを D ドライブのパスに作成しました。
Tomcat サーバーでシンボリック リンクを有効にするには、デフォルトでシンボリック リンクが無効になっているため、Tomcat サーバーのconfフォルダーにある context.xml に以下の構成を追加する必要があります。
<Context allowLinking="true">
フルパスで含めません。フォルダー MySharedHTML はアプリケーション フォルダーの下にある必要があり、相対パスで含めます。
あなたのウェブアプリが
c:\Program Files\Apache Software Foundation\Tomcat\webapps\myapp\
そこに MySharedHTML を配置します
c:\Program Files\Apache Software Foundation\Tomcat\webapps\myapp\MySharedHTML
次に、相対パスで含めます。
<jsp:include page="./MySharedHTML/test.html" />