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

Spring MVC 入門配置與工作流程詳解

     編輯:Java 綜合教學

Spring MVC 入門配置與工作流程詳解

Spring MVC 是基於 Servlet API 的請求驅動型 Web 框架,核心是 DispatcherServlet 前端控制器模式。本文梳理核心流程與最小化配置步驟。

核心處理流程

  1. 請求攔截:DispatcherServlet 接收所有匹配的 HTTP 請求
  2. HandlerMapping:根據 URL 映射查找對應的 Controller(處理器)
  3. Controller 執行:調用業務邏輯,處理請求參數,調用 Service 層
  4. 返回 ModelAndView:封裝模型數據與視圖邏輯名
  5. ViewResolver 解析:將邏輯視圖名解析為具體 View 實例(JSP/Thymeleaf/FreeMarker 等)
  6. 視圖渲染:View 結合模型數據生成響應,返回給 DispatcherServlet 輸出

最小化配置步驟

1. 依賴引入 (Maven)

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.x</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

2. web.xml 配置 DispatcherServlet

<servlet>
    <servlet-name>dispatcher</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>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

3. spring-mvc.xml 核心配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="https://www.springframework.org/schema/beans"
       xmlns:context="https://www.springframework.org/schema/context"
       xmlns:mvc="https://www.springframework.org/schema/mvc"
       xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
           https://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
           https://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd
           https://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- 掃描 Controller -->
    <context:component-scan base-package="com.example.controller" />

    <!-- 啟用註解驅動:@RequestMapping, @RequestBody, @ResponseBody 等 -->
    <mvc:annotation-driven />

    <!-- 靜態資源映射 -->
    <mvc:resources mapping="/static/**" location="/static/" />

    <!-- 視圖解析器:JSP 為例 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>
</beans>

4. 編寫 Controller

@Controller
@RequestMapping("/user")
public class UserController {
    
    @Autowired
    private UserService userService;
    
    @GetMapping("/{id}")
    public String detail(@PathVariable Long id, Model model) {
        User user = userService.findById(id);
        model.addAttribute("user", user);
        return "user/detail";  // 邏輯視圖名 -> /WEB-INF/views/user/detail.jsp
    }
    
    @PostMapping
    @ResponseBody
    public Result<User> create(@RequestBody UserDTO dto) {
        User user = userService.create(dto);
        return Result.success(user);
    }
}

關鍵組件說明

  • HandlerMapping:默認 RequestMappingHandlerMapping 掃描 @RequestMapping
  • HandlerAdapter:RequestMappingHandlerAdapter 支持方法參數綁定、返回值處理
  • ViewResolver:解耦 Controller 與具體視圖技術,支持鏈式解析
  • Interceptor:mvc:interceptors 配置攔截器,實現權限、日誌、國際化等橫切關注點

現代化改進:Java Config 替代 XML

@Configuration
@EnableWebMvc
@ComponentScan("com.example")
public class WebConfig implements WebMvcConfigurer {
    
    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        registry.jsp("/WEB-INF/views/", ".jsp");
    }
    
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("/static/");
    }
}

Spring Boot 進一步簡化為自動配置,只需 @SpringBootApplication 即可啟動,但理解原生配置有助於排查問題與定制擴展。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved