一、Spring MVC 概述
Spring MVC 是 Spring 框架的一個模塊,它提供了一套 Web 應用開發的解決方案,實現了 MVC(Model-View-Controller)設計模式。Spring MVC 提供了清晰的分離邏輯層、視圖層和控制器層的結構,便于開發、測試和維護 Web 應用。
二、Spring MVC 的架構
- DispatcherServlet :前端控制器,是整個 Spring MVC 的核心。它負責接收所有的 HTTP 請求,并將請求分發給相應的處理器。
- HandlerMapping :處理器映射器,用于將請求映射到具體的處理器(Controller)上。它根據請求的 URL、HTTP 方法等信息,找到對應的處理器。
- Controller :處理器,用于處理具體的業務邏輯。它接收請求參數,執行相應的業務操作,返回模型和視圖信息。
- ViewResolver :視圖解析器,用于將邏輯視圖名稱解析為具體的視圖實現。它根據控制器返回的視圖名稱,找到對應的視圖文件(如 JSP、HTML 等)。
- View :視圖,用于展示數據給用戶。它可以是 JSP、HTML、JSON 等多種形式。
三、Spring MVC 的工作流程
- 用戶發送請求到 DispatcherServlet :DispatcherServlet 作為前端控制器,接收所有的 HTTP 請求。
- DispatcherServlet 查詢 HandlerMapping :DispatcherServlet 根據請求的 URL 和 HTTP 方法,查詢 HandlerMapping 來找到對應的處理器(Controller)。
- HandlerMapping 返回處理器 :HandlerMapping 返回找到的處理器給 DispatcherServlet。
- DispatcherServlet 調用處理器 :DispatcherServlet 調用處理器(Controller)來處理請求。
- 處理器處理請求并返回模型和視圖 :處理器執行業務邏輯,處理請求參數,返回模型(Model)和視圖(View)信息。
- DispatcherServlet 查詢 ViewResolver :DispatcherServlet 使用 ViewResolver 將邏輯視圖名稱解析為具體的視圖實現。
- ViewResolver 返回視圖 :ViewResolver 返回具體的視圖給 DispatcherServlet。
- DispatcherServlet 渲染視圖 :DispatcherServlet 將模型數據填充到視圖中,渲染視圖。
- 將響應返回給用戶 :DispatcherServlet 將渲染后的視圖作為響應返回給用戶。
四、Spring MVC 的配置
1. XML 配置
在 XML 配置文件中,可以配置 DispatcherServlet、HandlerMapping、Controller、ViewResolver 等組件。
web.xml 配置 :
<web-app><servlet><servlet-name>dispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcher</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
</web-app>
dispatcher-servlet.xml 配置 :
<beans><!-- 配置 HandlerMapping --><bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean><!-- 配置 Controller --><bean name="/hello" class="com.example.controller.HelloController"></bean><!-- 配置 ViewResolver --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/"></property><property name="suffix" value=".jsp"></property></bean>
</beans>
2. 基于注解的配置
從 Spring 2.5 開始,引入了基于注解的配置方式,使得配置更加簡潔和直觀。常用的注解包括 @Controller
、@RequestMapping
、@RequestParam
、@ModelAttribute
等。
Controller 類 :
@Controller
@RequestMapping("/hello")
public class HelloController {@RequestMapping(method = RequestMethod.GET)public String sayHello(@RequestParam(value = "name", required = false, defaultValue = "World") String name, Model model) {model.addAttribute("name", name);return "hello";}
}
配置類 :
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.example.controller")
public class WebConfig implements WebMvcConfigurer {@Beanpublic ViewResolver viewResolver() {InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();viewResolver.setPrefix("/WEB-INF/views/");viewResolver.setSuffix(".jsp");return viewResolver;}
}
五、Spring MVC 的主要組件
- DispatcherServlet :前端控制器,是整個 Spring MVC 的核心。它負責接收所有的 HTTP 請求,并將請求分發給相應的處理器。
- HandlerMapping :處理器映射器,用于將請求映射到具體的處理器(Controller)上。常用的 HandlerMapping 實現有 BeanNameUrlHandlerMapping、RequestMappingHandlerMapping 等。
- Controller :處理器,用于處理具體的業務邏輯。它接收請求參數,執行相應的業務操作,返回模型和視圖信息。可以通過
@Controller
注解來標記一個類為 Controller。 - ViewResolver :視圖解析器,用于將邏輯視圖名稱解析為具體的視圖實現。常用的 ViewResolver 實現有 InternalResourceViewResolver、.FreeMarkerViewResolver 等。
- View :視圖,用于展示數據給用戶。它可以是 JSP、HTML、JSON 等多種形式。
六、Spring MVC 的優勢
- 清晰的架構 :Spring MVC 實現了 MVC 設計模式,將邏輯層、視圖層和控制器層清晰地分離,便于開發、測試和維護。
- 靈活的配置 :Spring MVC 支持多種配置方式,包括 XML 配置和注解配置,可以根據項目的需求靈活選擇。
- 強大的功能 :Spring MVC 提供了豐富的功能,如請求參數綁定、數據驗證、國際化、文件上傳下載等,滿足 Web 開發的各種需求。
- 良好的集成性 :Spring MVC 是 Spring 框架的一部分,可以方便地與其他 Spring 模塊(如 Spring JDBC、Spring ORM 等)進行集成,構建完整的企業級應用。
- 非侵入式設計 :Spring MVC 的設計是非侵入式的,它不會強迫開發者遵循特定的編碼風格或框架結構,開發者可以自由地選擇使用框架的哪些功能,而不影響已有的代碼。
七、總結
Spring MVC 是 Spring 框架的一個重要模塊,為 Web 應用開發提供了一套完整的解決方案。通過掌握 Spring MVC 的架構、工作流程、配置方式和主要組件,開發者可以更好地構建高質量的 Web 應用。Spring MVC 的清晰架構、靈活配置、強大功能和良好的集成性,使其成為開發 Java Web 應用的首選框架之一。在實際開發中,合理利用 Spring MVC 的各種功能和特性,可以提高開發效率,降低開發成本,構建出更加穩定、可靠的 Web 應用。