首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Spring MVC 實戰:REST 風格 URL 配置與靜態資源處理全攻略

     編輯:Java 綜合教學

告別 .do 後綴:打造乾淨優雅的 RESTful API 端點

傳統 Spring MVC 專案常見 *.do 後綴的請求路徑,不僅不美觀,也不符合 REST 風格規範。本文詳細講解如何通過 web.xml 與 spring-mvc.xml 配置,實現無後綴的 REST 風格 URL(如 /article/list、/article/details/1),並解決隨之而來的靜態資源(JS、CSS、圖片)攔截失效問題。

一、 REST 風格 URL 核心配置

1. web.xml:DispatcherServlet 攔截所有請求

關鍵點:<url-pattern>/</url-pattern> 而非 *.do,使 DispatcherServlet 成為唯一前端控制器,攔截所有進入應用的請求(含靜態資源)。

<servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-mvc.xml</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

2. spring-mvc.xml:掃描註解、視圖解析器

<context:component-scan base-package="com"/>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <property name="suffix" value=".jsp"/>
</bean>

二、 控制器實現 REST 端點

@Controller
@RequestMapping("/article")
public class ArticleController {
    @RequestMapping("/list")
    public String list(Model model) {
        return "article/list"; // 對應 /WEB-INF/jsp/article/list.jsp
    }

    @RequestMapping("/details/{id}")
    public ModelAndView details(@PathVariable("id") int id) {
        ModelAndView mav = new ModelAndView("article/details");
        if (id == 1) mav.addObject("article", new Article("文章一", "內容一"));
        else if (id == 2) mav.addObject("article", new Article("文章二", "內容二"));
        return mav;
    }
}

關鍵註解:

  • @PathVariable:從 URL 路徑中提取變量(如 /details/1 中的 1)。
  • @RequestParam:從請求參數中獲取值(如 ?id=1)。

三、 視圖頁面(JSP)

list.jsp - 列表頁,構建 REST 風格鏈接:

<a href="${pageContext.request.contextPath}/article/details/1">文章一</a>
<a href="${pageContext.request.contextPath}/article/details/2">文章二</a>

details.jsp - 詳情頁,展示模型數據:

<p>${article.title}</p>
<p>${article.content}</p>

四、 靜態資源處理:關鍵補丁

因 url-pattern:/ 攔截所有請求,導致 <img src="...">、<link href="..."> 等靜態資源請求也進入 DispatcherServlet,找不到對應 Controller 而 404。解決方案:在 spring-mvc.xml 配置 <mvc:resources> 映射靜態資源路徑,繞過 Controller 處理。

<mvc:resources mapping="/resources/**" location="/images/"/>
<mvc:resources mapping="/resources2/**" location="/css/"/>

頁面引用方式:

<img src="${pageContext.request.contextPath}/resources/logo.png" />
<link href="${pageContext.request.contextPath}/resources2/style.css" rel="stylesheet" />

五、 運行效果驗證

  • 訪問 https://localhost:8080/SpringMvc03/article/list → 顯示文章列表,URL 無 .do 後綴。
  • 點擊「文章一」 → 跳轉 /article/details/1,地址欄顯示乾淨 REST 風格路徑。
  • 頁面圖片、樣式正常加載,證明靜態資源映射生效。

列表頁效果 詳情頁效果 靜態資源加載成功

六、 總結與最佳實踐

  1. REST 風格核心:web.xml 用 / + Controller 用 @PathVariable。
  2. 靜態資源必須配置 <mvc:resources>,否則會被攔截器吞噬。
  3. 生產環境建議:靜態資源走 Nginx/CDN 反向代理,應用層只處理動態 API。
  4. 進階:Spring Boot 內嵌容器默認已優化靜態資源映射(/static, /public, /resources, /META-INF/resources),無需額外配置。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved