2

request.getContextPath() の意味について混乱しています。私のファイルレイアウトは次のとおりです。

MyServer/WebContent:
    /Resources/MyImage.jpg
    /Resources/Scripts/MyScript.js
    /WEB-INF/JSP/MyPage.jsp

で、MyPage.jspJavaScriptと画像を見つけることができます

<script src="${pageContext.request.contextPath}/Resources/Scripts/MyScript.js">

<img src="${pageContext.request.contextPath}/Resources/MyImage.img">

これから、「WebContent」フォルダーに動的に解決されると結論付け${pageContext.request.contextPath}ました。これは、名前に関係なく、このフォルダーに解決されることを理解しています。それは働いています。

ただし、これらすべてから、私の .java コードrequest.getContextPath()でも動的に "WebContent" に解決されると結論付けました。しかし、.java コードからMyPage.jspから形成された文字列を使用して転送しようとするrequest.getContextPath()+"/WEB-INF/JSP/MyPage.jsp"と、JSP が見つかりません。これにより、404 エラー - 「要求されたリソース (/MyServer/WEB-INF/JSP/MyPage.jsp) は利用できません」が発生します。呼び出す"/WEB-INF/JSP/MyPage.jsp"と、JSP ページが起動します。事前保留request.getContextPath()が原因でこれが失敗する理由を誰かが説明できますか?.JSPへのパスが常に解決されるようにするために使用する必要があるものは他にありますか?

4

1 に答える 1

4

RequestDispatcher、現在の Web アプリケーション コンテキストに対してすでに動作しています。コンテキスト パスを先頭に追加する必要はありません。

HTML でリンクされた JS/CSS/image/etc リソースに必要な理由は、適切な URL パスでそれらをダウンロードしなければならない Web ブラウザーだからです。よくある初心者の間違いは、何らかの方法でローカル ディスク ファイル システム パスによってそれらを自動インクルードする必要があるのは Web サーバーであると彼らが考えていることです。したがって、これは真実ではありません。ブラウザのアドレスバーに入力するような URL でなければなりません。

以下も参照してください。

于 2012-04-02T16:43:34.477 に答える