2012-11-23 9 views

答えて

18

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

  1. は、/app/*または*.doなど、より具体的なURLパターンを使用して、すべてのページの要求は、このURLパターンに一致させます。関連項目Design Patterns web based applications

  2. 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 /*も参照してください。

+0

BalusC、ありがとうございます! – Vadim

+0

@BalusCコントローラ経由でロードされたときに静的リソースが404をスローするのはなぜですか? 私は/ *でマップされたフィルタを持っていました。ロードされたjqueryファイルがスローされ、エラー404 - リソースが見つかりません。 上記で提供したソリューションを使用して解決しました。 あなたは私の疑問をクリアしてもらえますか? –

0

これは古い質問であり、@BalusCの回答はおそらくうまくいくと思います。しかし、私は、JSFアプリケーションのためのURLが働いて、変更ができませんでしたので、私は単純にパスをチェックし、それが静的リソースにある場合に返さ:

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

これは私のために正常に動作します。

関連する問題