一、Spring MVC 概述
1. 什么是 Spring MVC?
Spring MVC 是基于 Spring 框架的 Web 框架,它實現了 MVC 設計模式,將應用程序分為三個核心部分:
-
Model:封裝應用程序的數據和業務邏輯。
-
View:負責渲染數據(通常是 HTML 頁面)。
-
Controller:處理用戶請求并協調 Model 和 View。
2. Spring MVC 的優勢
-
松耦合:通過清晰的職責分離,降低代碼的耦合度。
-
靈活性:支持多種視圖技術(如 JSP、Thymeleaf、FreeMarker 等)。
-
強大的數據綁定:自動將請求參數綁定到 Java 對象。
-
易于測試:Controller 是 POJO(Plain Old Java Object),易于單元測試。
-
與 Spring 生態無縫集成:可以輕松整合 Spring 的其他模塊(如 Spring Security、Spring Data 等)。
二、Spring MVC 的核心組件
1. DispatcherServlet
DispatcherServlet
?是 Spring MVC 的核心,負責接收所有的 HTTP 請求并將其分發給相應的 Controller。
2. HandlerMapping
HandlerMapping
?負責將請求映射到對應的 Controller。
3. Controller
Controller 是處理用戶請求的核心組件,通常使用?@Controller
?注解標記。
4. ModelAndView
ModelAndView
?是 Controller 返回的結果,包含模型數據(Model)和視圖名稱(View)。
5. ViewResolver
ViewResolver
?負責根據視圖名稱解析實際的視圖(如 JSP 頁面)。
6. HandlerInterceptor
HandlerInterceptor
?用于在請求處理前后執行額外的邏輯(如權限檢查、日志記錄等)。
三、Spring MVC 的工作流程
關鍵階段解析:
????????1. 請求分發
?????DispatcherServlet
?接收請求后,委托?HandlerMapping
?查找匹配的控制器。
????????2. 參數處理
? ? ? HandlerAdapter
?負責方法參數綁定(支持?@RequestParam
、@RequestBody
?等注解)。
????????3. 攔截器鏈
?????HandlerInterceptor
?在預處理、后處理、完成回掉三個階段插入邏輯。
????????4. 視圖渲染
?????ViewResolver
?根據邏輯視圖名定位物理視圖,View
?對象將模型數據轉換為響應內容。
四、Spring MVC 的配置
1. 基于 XML 的配置
1.1 在?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>/WEB-INF/spring-mvc-config.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>
?1.2? 在?spring-mvc-config.xml
?中配置 Spring MVC
<context:component-scan base-package="com.example.controller" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/" /><property name="suffix" value=".jsp" />
</bean>
2. 基于 JavaConfig 的配置
2.1 在?web.xml
?中配置?DispatcherServlet
=================== 配置與 1.1 相同 ==================
2.2 使用?@Configuration
?和?@EnableWebMvc
?注解配置 Spring MVC
@Configuration
@EnableWebMvc
@ComponentScan("com.example.controller")
public class WebConfig implements WebMvcConfigurer {@Beanpublic ViewResolver viewResolver() {InternalResourceViewResolver resolver = new InternalResourceViewResolver();resolver.setPrefix("/WEB-INF/views/");resolver.setSuffix(".jsp");return resolver;}
}
五、Spring MVC 的核心注解
1.?@Controller
????????標記一個類為 Controller。
2.?@RequestMapping
????????將請求 URL 映射到 Controller 的方法。
3.?@RequestParam
????????將請求參數綁定到方法參數。
4.?@ModelAttribute
????????將請求參數綁定到模型對象。
5.?@ResponseBody
????????將方法返回值直接寫入 HTTP 響應體。
6.?@PathVariable
????????將 URL 中的變量綁定到方法參數。
六、Spring MVC 的高級特性
1. 文件上傳
使用?MultipartFile
?處理文件上傳:
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public String handleFileUpload(@RequestParam("file") MultipartFile file) {// 處理文件return "uploadSuccess";
}
2. 異常處理
使用?@ExceptionHandler
?處理異常:
@ExceptionHandler(UserNotFoundException.class)
public String handleUserNotFound() {return "error/userNotFound";
}