フロントコントローラとして機能するサーブレットがあります。/*にマップされているフロントコントローラサーブレットが静的リソースを処理しないようにする方法
ただし、これはCSSとイメージファイルも処理します。どうすればこれを防ぐことができますか?
フロントコントローラとして機能するサーブレットがあります。/*にマップされているフロントコントローラサーブレットが静的リソースを処理しないようにする方法
ただし、これはCSSとイメージファイルも処理します。どうすればこれを防ぐことができますか?
あなたは2つのオプションがあります:
は、/app/*
または*.do
など、より具体的なURLパターンを使用して、すべてのページの要求は、このURLパターンに一致させます。関連項目Design Patterns web based applications
1と同じですが、リクエストURLからサーブレットマッピングを非表示にしたい場合。すべての静的リソースを/static
または/resources
などの共通フォルダに置き、要求URLがそれに一致しないかどうかをチェックしてからサーブレットに転送するフィルタを作成する必要があります。ここでは、コントローラサーブレットが@WebServlet("/app/*")
であり、フィルタが@WebFilter("/*")
であり、すべての静的リソースが/resources
フォルダであると仮定している例を示します。
HttpServletRequest req = (HttpServletRequest) request;
String path = req.getRequestURI().substring(req.getContextPath().length());
if (path.startsWith("/resources/")) {
chain.doFilter(request, response); // Goes to default servlet.
} else {
request.getRequestDispatcher("/app" + path).forward(request, response); // Goes to your controller.
}
How to access static resources when mapping a global front controller servlet on /*も参照してください。
これは古い質問であり、@BalusCの回答はおそらくうまくいくと思います。しかし、私は、JSFアプリケーションのためのURLが働いて、変更ができませんでしたので、私は単純にパスをチェックし、それが静的リソースにある場合に返さ:
String path = request.getRequestURI().substring(request.getContextPath().length());
if (path.contains("/resources/")) {
return;
}
これは私のために正常に動作します。
BalusC、ありがとうございます! – Vadim
@BalusCコントローラ経由でロードされたときに静的リソースが404をスローするのはなぜですか? 私は/ *でマップされたフィルタを持っていました。ロードされたjqueryファイルがスローされ、エラー404 - リソースが見つかりません。 上記で提供したソリューションを使用して解決しました。 あなたは私の疑問をクリアしてもらえますか? –