使用全域前端控制器Servlet 存取靜態資源
將Spring MVC 調度程式對應為/ 上的全域前端控制器Servlet 時,它可能會導致存取CSS、JS 和映像等靜態資源時出現問題,這些資源通常儲存在/res等資料夾中。這是因為 / 映射捕獲所有請求並將它們路由到 servlet,從而阻止存取這些靜態檔案。
為了解決這個問題,可以為控制器 servlet 定義更具體的 url 模式,例如 /pages/。然後可以將靜態內容放置在單獨的資料夾中,例如/static。過濾器可以配置為偵聽 / 並透明地將靜態內容請求傳遞到預設 servlet,同時將其他請求分派到控制器 servlet。
以下是簡化的程式碼範例:
<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> <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>
並且在Filter的doFilter()方法:
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); }
這個配置確保靜態可以在不中斷處理剩餘請求的控制器Servlet 的功能的情況下存取CSS 和JS 等資源。此外,過濾器的使用確保靜態文件存取從瀏覽器的角度來看是完全透明的。
以上是在 Spring MVC 中使用全域前端控制器 Servlet 時如何存取靜態資源?的詳細內容。更多資訊請關注PHP中文網其他相關文章!