18

フロントコントローラーとして機能するサーブレットがあります。

@WebServlet("/*")

ただし、これはCSSファイルと画像ファイルも処理します。どうすればこれを防ぐことができますか?

4

2 に答える 2

23

2つのオプションがあります:

  1. /app/*またはなどのより具体的なURLパターンを使用して*.doから、すべてのページリクエストをこのURLパターンに一致させます。デザインパターンのWebベースのアプリケーションも参照してください。

  2. 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.
    }
    

    /*にグローバルフロントコントローラーサーブレットをマッピングするときに静的リソースにアクセスする方法も参照してください。

于 2012-11-23T01:13:19.060 に答える
0

これは古い質問だと思います。@BalusCの答えはおそらくうまくいくと思います。しかし、作業中のJSFアプリのURLを変更できなかったので、パスを確認して、静的リソースへのパスであるかどうかを確認します。

    String path = request.getRequestURI().substring(request.getContextPath().length());
    if (path.contains("/resources/")) {
        return;
    }

これは私にとってはうまくいきます。

于 2017-08-02T13:54:11.460 に答える