2

jsp include tag を使用して、他のアプリケーションによって動的に作成されたいくつかの html ページを自分のアプリケーション jsp ページにロードする必要があります<jsp:include page="${Htmlpath}" /> OR <jsp:include page="D:\MySharedHTML\test.html" />。私の考えは、サーバー上に「MySharedHTML」のような共有フォルダーを作成し、他のアプリケーションがそこに html ファイルを作成できるようにすることです。私のアプリはフルパスを指定してアクセスします。しかし、jsp インクルードは「要求されたリソース D:\MySharedHTML\test.html は利用できません」と言っています。それを行う方法を入力します。前もって感謝します。

4

3 に答える 3

5

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 つのオプションがあります。

  1. そのパスのルート フォルダーを仮想ホストとしてサーバー構成に追加します。その方法は、何も言わなかったサーバーのメーカー/バージョンによって異なります。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" />
    

  2. ローカル ディスク ファイル システムへのプロキシとして機能するサーブレットを作成します。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}" />
    
于 2013-10-04T15:04:46.630 に答える
0

または、シンボリックリンク、ショートリンク、またはソフトリンクを使用して実現できるため、コーディングはあまり必要ありません。私の場合、私のアプリケーション Web コンテンツの下にある MySharedHTML のソフトリンクを D ドライブのパスに作成しました。

Tomcat サーバーでシンボリック リンクを有効にするには、デフォルトでシンボリック リンクが無効になっているため、Tomcat サーバーのconfフォルダーにある context.xml に以下の構成を追加する必要があります。

<Context allowLinking="true">
于 2013-10-08T09:53:33.280 に答える
0

フルパスで含めません。フォルダー 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" />
于 2013-10-03T17:14:57.990 に答える