グローバル フロント コントローラー サーブレットを /*
にマッピングするときに静的リソースにアクセスする /* にグローバル フロント コントローラー サーブレットをマッピングすると、 CSS、JS、画像などの静的リソース。これを解決するには、次の手順を検討してください。
より具体的な URL パターンにコントローラ サーブレットをマッピングする
/ にサーブレットをマッピングする代わりに、 /pages/ のようなより具体的なパターン。これにより、静的コンテンツを /static などの別のフォルダーに保存できるようになります。
静的コンテンツを処理するフィルターを作成する
/* をリッスンするフィルターを作成するまた、静的コンテンツに対するリクエストをデフォルトのサーブレットに転送することで透過的に処理します。その他のリクエストの場合、フィルターはコントローラー サーブレットにディスパッチする必要があります。
フィルター構成の例は次のとおりです:
<filter> <filter-name>filter</filter-name> <filter-class>com.example.Filter</filter-class> </filter> <filter-mapping> <filter-name>filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
フィルターの実装:
import javax.servlet.*; import javax.servlet.http.HttpServletRequest; public class Filter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException { HttpServletRequest req = (HttpServletRequest) request; String path = req.getRequestURI().substring(req.getContextPath().length()); if (path.startsWith("/static")) { chain.doFilter(request, response); // Goes to default servlet. } else { request.getRequestDispatcher("/pages" + path).forward(request, response); } } @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void destroy() { } }
コントローラーサーブレット マッピング:
<servlet> <servlet-name>controller</servlet-name> <servlet-class>com.example.Controller</servlet-class> </servlet> <servlet-mapping> <servlet-name>controller</servlet-name> <url-pattern>/pages/*</url-pattern> </servlet-mapping>
このアプローチにより、他のリクエストをコントローラー サーブレットに送信しながら、静的コンテンツを透過的に提供できます。
以上が/* にマップされたグローバル フロント コントローラー サーブレットを使用して静的リソースにアクセスする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。