Bootstrap

Spring MVC 的执行流程

Spring MVC 是一个基于 Java 的请求驱动型 Web 框架,其核心设计围绕 前端控制器模式,通过 DispatcherServlet 协调各个组件处理 HTTP 请求。以下是其完整的执行流程,共分为 8 个核心步骤:

1. HTTP请求到达DispatcherServlet

        入口:所有请求首先由 DispatcherServlet(前端控制器)接收。

        配置:在 web.xml 中定义 DispatcherServlet 并映射 URL 路径(如 /):

<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.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>

2. 查询HandlerMapping

        作用:确定请求对应的 Controller 方法。

        组件HandlerMapping(如 RequestMappingHandlerMapping)根据 URL 和注解(如 @RequestMapping)匹配处理器。

        Controller方法定义示例:

@Controller
public class UserController {
    @GetMapping("/user/{id}")
    public String getUser(@PathVariable("id") Long id, Model model) {
        User user = userService.findById(id);
        model.addAttribute("user", user);
        return "user/detail";
    }
}

3. 调用HandlerAdapter

        作用:适配器模式,执行 Controller 方法。

        组件HandlerAdapter(如 RequestMappingHandlerAdapter)负责调用方法,处理参数绑定(如 @RequestParam@RequestBody)。

        流程

                解析方法参数(通过 ArgumentResolver)。

                执行 Controller 方法。

                处理返回值(通过 ReturnValueHandler)。

4. Controller处理请求

        业务逻辑:Controller 调用 Service 层,处理业务并返回数据。

        返回值类型

        ModelAndView:包含模型数据和视图名。

        String:视图名(如 "redirect:/success")。

        @ResponseBody:直接返回 JSON/XML 数据。

5. 处理返回值和Model

        模型填充:将数据存入 Model 对象,供视图渲染使用。

@PostMapping("/user/create")
public String createUser(User user, RedirectAttributes redirectAttrs) {
    userService.save(user);
    redirectAttrs.addFlashAttribute("message", "用户创建成功!");
    return "redirect:/user/list";
}

6. 解析视图(ViewResolver)

        作用:将逻辑视图名(如 "user/detail")解析为实际视图对象(如 JSP、Thymeleaf)。

        配置:在 spring-mvc.xml 中配置视图解析器:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/"/>
    <property name="suffix" value=".jsp"/>
</bean>

7.渲染视图(View)

        模板引擎:将模型数据填充到视图模板,生成 HTML。

        示例:JSP 页面中访问模型数据:

<h1>用户详情</h1>
<p>用户名:${user.name}</p>

8. 返回HTTP响应

        输出:将渲染后的内容写入 HttpServletResponse,返回客户端。

小结

  1. 首先,用户发起一个HTTP请求到Web应用,这个请求会被前端控制器(DispatcherServlet)处理。DispatcherServlet是Spring MVC的核心,负责协调各个组件。
  2. 接下来,DispatcherServlet会查询处理器映射器(HandlerMapping)来确定哪个控制器(Controller)会处理这个请求。
  3. 然后,DispactcherServlet会将请求交给对应的Controller处理。Controller执行具体的业务逻辑,可能会调用Service层,处理数据,并返回一个模型和视图(ModelAndView)对象。
  4. 之后,DispactherServlet会根据视图名称,通过视图解析器(ViewResolver)来解析具体的视图对象。
  5. 最后,视图渲染阶段。将模型数据填充到视图中,生成最终的响应内容,返回给客户端。
;