0

だから、私は次のようなURLマッピングを処理できるサーブレットを書き込もうとしています。

domain/context/servlet/resource_id

以前は、URLパターンを指定していたとき、次のことを行っていました。

/ myServlet

しかし、私が達成しようとしていることのために、私はやっています...

/ myServlet / *

私が実行している問題

静的ファイル(css / js / etc)に相対パス(つまり、WebContentフォルダーに対するファイルの場所のみ)を使用していたので、/myServlet/*マッピングを使用しているので、すべての静的ファイルに対する要求があります。 myServletによって処理されています。したがって、基本的に、静的リソースは次のように解決されます。

domain / context / myServlet / relative_path_I_provide

とは対照的に

ドメイン/コンテキスト/relative_path_I_provide

相対パスに依存するのではなく、リソースの絶対パスを作成するだけで、これを自分で修正できると確信しています。しかし、疑問に思っているのですが、/myServlet/*URLパターンを使用しているのに、静的リソースの解決されたパスが変更されるのはなぜ/myServletですか?

編集:

私のフォルダ構造は次のようなものです

WebContent
   |
   |
   |-- debug
         |
         |-- css
              |
              |-- file.css

そして私はそれらを次のようなリンクタグに追加しています:

<link href="debug/css/file.css" rel="stylesheet" type="text/css">
4

2 に答える 2

2

わかりました、それはそれを説明します。パス情報のない相対URLを使用しているため、ブラウザはこれらのURLを含むリソースと同じディレクトリに相対URLを解決します。サーブレットがにマップされたとき/myServlet、それは「ディレクトリ」としてパスに表示されませんでした。つまり、参照される最後のリソースでした。

したがって、サーブレットのURLは形式domain/context/myServletであるため、これらの相対URLもに解決されdomain/context/ます。

しかし、フォームのマッピングにより/myServlet/*、サーブレットはURL内のディレクトリとして表示されます。つまり、に移動するdomain/context/myServlet/resource_idと、相対URLはと同じディレクトリに解決されresource_idますdomain/context/servlet/

詳細はこちらをご覧ください

修正は次のいずれかである可能性があります。

  1. アプリケーションのルートに相対的な相対URL、つまり。で始まる相対URLを使用します/。ただし、これには、アプリケーションのコンテキストパスをコードに含める必要があります。つまり、すべてを変更せずに、アプリケーションを別の名前で単純にデプロイすることはできません。要するに、これをしないでください。

  2. パス情報を含む相対URLを使用します。この形式では../、URLが1つ上のディレクトリに解決されます。これも脆弱であり、誰かがリソースをフォームのURLにマップすることを決定した場合は壊れますdomain/context/myServlet/secondLevel/resource_id

  3. アプリケーションのコンテキストパスに相対的な相対URLを作成します。hrefこれを行うには、値をに設定しますrequest.getContextPath + "/css/files/file.css"。これにより、各リンクの先頭にコンテキストパスが追加されます。hrefしたがって、のリクエストの場合domain/context/myServlet/resource_id、これは/context/css/files/file.css期待どおりになり、解決されます。

于 2011-05-02T00:26:09.390 に答える
0

URLパターンの変更の前後で実際のURLは変更されましたか?つまり、あなたは今http://domain/context/myServlet/somethingではなく呼び出していますかhttp://domain/context/myServlet

答えが「はい」の場合、静的ファイルが現在解決されている理由を説明しますhttp://domain/context/myServlet/static_file
(以前のURLのコンテキストに関連してすべてが解決されたのと同じ理由で)

于 2011-05-01T23:20:17.193 に答える