SpringMVC 是一个基于 Model-View-Controller(MVC)设计模式的 Web 应用程序框架。它的执行原理可以分为以下几个步骤:
-
用户发送请求到 DispatcherServlet。
-
DispatcherServlet 通过 HandlerMapping 确定请求对应的 Controller。
-
Controller 处理请求,执行相应的方法,并返回一个 ModelAndView 对象(包含 Model 数据和 View 名称)给 DispatcherServlet。
-
DispatcherServlet 将 Model 对象发送给 ViewResolver 以获取实际的视图页面。
-
最后,DispatcherServlet 将 Model 对象传递给视图页面以显示结果。
下面是一个简单的 SpringMVC 示例,以帮助解释执行原理:
- 配置 DispatcherServlet(web.xml):
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/springmvc-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
- 配置 SpringMVC(springmvc-servlet.xml):
<beans xmlns="Index of /schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="Index of /schema/context"
xmlns:mvc="Index of /schema/mvc"
xsi:schemaLocation="Index of /schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
Index of /schema/context
http://www.springframework.org/schema/context/spring-context.xsd
Index of /schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:component-scan base-package="com.example.controller" />
<mvc:annotation-driven />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
- 创建 Controller:
package com.example.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HelloWorldController {
@GetMapping("/hello")
public String hello(Model model) {
model.addAttribute("message", "Hello, SpringMVC!");
return "hello";
}
}
- 创建视图(/WEB-INF/views/hello.jsp):
<!DOCTYPE html>
<html>
<head>
<title>Hello, SpringMVC!</title>
</head>
<body>
<h1>${message}</h1>
</body>
</html>
在这个示例中,当用户访问 /hello 时,请求会被发送到 DispatcherServlet。然后,DispatcherServlet 通过 HandlerMapping 确定 HelloWorldController 是处理该请求的 Controller。接下来,Controller 的 hello 方法被调用,将 "Hello, SpringMVC!" 作为 message 属性添加到 Model 中,并返回视图名称 "hello"。DispatcherServlet 使用 ViewResolver 将视图名称解析为实际的 JSP 文件(/WEB-INF/views/hello.jsp),并将 Model 对象传递给视图以显示结果。