Spring MVC 执行流程概述

Spring MVC(Model-View-Controller)是一种基于请求和响应的设计模式,它通过分离不同的业务功能模块,提高了代码的可维护性和扩展性。在Spring MVC中,处理HTTP请求的过程涉及多个组件的协作,下面详细讲解Spring MVC的执行流程。

Spring MVC 执行流程概述

  1. 客户端发起请求:客户端(如浏览器)向服务器发送一个HTTP请求。
  2. DispatcherServlet 接收请求:Spring MVC的前端控制器DispatcherServlet接收到客户端的请求,并将其转发给适当的处理器。
  3. HandlerMapping 查找处理器DispatcherServlet通过HandlerMapping查找与请求URL匹配的处理器(Controller)。
  4. Controller 处理请求:找到对应的处理器(Controller)后,DispatcherServlet将请求交给它处理。
  5. 返回模型和视图:Controller处理完请求后,会返回一个包含模型数据(Model)和视图(View)的对象(通常是ModelAndView)。
  6. ViewResolver 解析视图DispatcherServlet将返回的视图名传递给ViewResolver,后者根据视图名找到对应的视图(JSP、Thymeleaf等)。
  7. 渲染视图View负责渲染最终的HTML页面并返回给客户端。
  8. 客户端显示响应:最终生成的响应(HTML)被返回到客户端,浏览器渲染页面。

Spring MVC 执行流程详解

1. 客户端请求

客户端(如浏览器)发送HTTP请求,URL通常会指向一个特定的控制器(Controller)方法。例如,用户访问http://localhost:8080/myapp/hello

2. DispatcherServlet 接收请求

所有的请求都会首先由Spring MVC的前端控制器DispatcherServlet来接收。DispatcherServlet是Spring MVC架构中的核心,它负责将请求分发到正确的Controller,并处理返回的结果。

<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>
3. HandlerMapping 查找处理器(Controller)

DispatcherServlet会根据请求的URL,使用HandlerMapping来查找哪个Controller负责处理该请求。Spring MVC可以使用多种方式来配置HandlerMapping,比如基于注解的方式(@RequestMapping)或基于XML的配置。

@Controller
@RequestMapping("/hello")
public class HelloController {
    @RequestMapping
    public String sayHello(Model model) {
        model.addAttribute("message", "Hello, Spring MVC!");
        return "helloView";
    }
}

在此例中,@RequestMapping("/hello")定义了该Controller处理/hello路径的请求。

4. Controller 处理请求

DispatcherServlet将请求交给相应的Controller进行处理。Controller方法可以有不同的返回值类型,比如StringModelAndViewResponseEntity等。通常返回的是一个视图名称(如"helloView")和模型数据(ModelModelMap)。

@Controller
public class HelloController {
    @RequestMapping("/hello")
    public String hello(Model model) {
        model.addAttribute("message", "Hello, Spring MVC!");
        return "helloView";  // 返回视图名称
    }
}
5. 返回模型和视图(ModelAndView)

Controller处理完请求后,会返回一个ModelAndView对象。ModelAndView包含了两个主要内容:

  • 模型(Model):包含了数据,通常是一个Map结构,存储了请求的结果数据。
  • 视图(View):指定了要渲染的视图(如JSP、HTML等)。
@RequestMapping("/hello")
public ModelAndView hello() {
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.setViewName("helloView");  // 设置视图
    modelAndView.addObject("message", "Hello, Spring MVC!");  // 设置模型数据
    return modelAndView;
}
6. ViewResolver 解析视图

DispatcherServlet将通过ViewResolver来解析视图名称,查找实际的视图文件(如JSP、Thymeleaf模板等)。ViewResolver负责根据视图名找到具体的视图文件。

Spring MVC支持多种视图解析方式,最常见的是JSP视图解析:

<bean class="org.springframework.web.servlet.view.JstlView">
    <property name="url" value="/WEB-INF/jsp/hello.jsp"/>
</bean>
7. 渲染视图

View对象负责将模型数据填充到视图模板中,并渲染成最终的HTML响应。不同的视图技术(如JSP、Thymeleaf)会有不同的渲染方式。

例如,JSP视图会通过JSP引擎渲染页面,将数据(如message)替换到页面中。

<!-- hello.jsp -->
<html>
<head><title>Hello Page</title></head>
<body>
    <h1>${message}</h1>
</body>
</html>
8. 客户端显示响应

最终,渲染好的HTML内容作为HTTP响应返回给客户端,客户端的浏览器会显示该页面。


Spring MVC 执行流程图

客户端请求 --> DispatcherServlet --> HandlerMapping 查找控制器
                |                      |
          找到对应的Controller  --> Controller 处理请求
                |                      |
         返回 ModelAndView          ViewResolver 解析视图
                |                      |
       渲染视图并返回给客户端 --> 客户端显示响应

总结

Spring MVC的执行流程是一个由多个组件协作完成的过程:

  • DispatcherServlet 负责请求的接收与分发。
  • HandlerMapping 查找对应的控制器(Controller)。
  • Controller 处理业务逻辑并返回视图名称和数据。
  • ViewResolver 解析视图并渲染页面。
  • View 渲染最终的响应内容。

Spring MVC的这种分层设计使得代码的关注点分离,提高了应用的可扩展性和维护性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值