フロントコントローラーとして機能するサーブレットがあります。
@WebServlet("/*")
ただし、これはCSSファイルと画像ファイルも処理します。どうすればこれを防ぐことができますか?
フロントコントローラーとして機能するサーブレットがあります。
@WebServlet("/*")
ただし、これはCSSファイルと画像ファイルも処理します。どうすればこれを防ぐことができますか?
2つのオプションがあります:
/app/*
またはなどのより具体的なURLパターンを使用して*.do
から、すべてのページリクエストをこのURLパターンに一致させます。デザインパターンのWebベースのアプリケーションも参照してください。
1と同じですが、リクエストURLからサーブレットマッピングを非表示にします。次に、すべての静的リソースをまたはなどの共通フォルダーに配置し、リクエストURLがそれと一致しないかどうかをチェックするフィルターを作成してからサーブレットに転送する必要があります/static
。これは、コントローラーサーブレットがaであり、フィルターがaであり、すべての静的リソースがフォルダー内に/resources
あることを前提とした例です。@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.
}
/*にグローバルフロントコントローラーサーブレットをマッピングするときに静的リソースにアクセスする方法も参照してください。
これは古い質問だと思います。@BalusCの答えはおそらくうまくいくと思います。しかし、作業中のJSFアプリのURLを変更できなかったので、パスを確認して、静的リソースへのパスであるかどうかを確認します。
String path = request.getRequestURI().substring(request.getContextPath().length());
if (path.contains("/resources/")) {
return;
}
これは私にとってはうまくいきます。