首頁 > Java > java教程 > 在 Spring MVC 中使用全域前端控制器 Servlet 時如何存取靜態資源?

在 Spring MVC 中使用全域前端控制器 Servlet 時如何存取靜態資源?

Linda Hamilton
發布: 2024-12-05 02:35:11
原創
387 人瀏覽過

How to Access Static Resources When Using a Global Front Controller Servlet in Spring MVC?

使用全域前端控制器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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板