SpringMVC工作流程详解

发布时间:2023-05-18

一、SpringMVC工作流程简述

SpringMVC是基于MVC(Model-View-Controller)模式设计的Web框架,提供了开发规范和一系列的组件来简化Web开发过程,使开发者能够更专注于业务逻辑而不必在意底层细节。 SpringMVC提供了一个DispatcherServlet(DispatcherServlet是一个前端控制器Front Controller)来协调请求处理过程。当收到一个请求时,它会将请求转发给对应的Controller,Controller负责处理请求并返回ModelAndView对象。DispatcherServlet再将ModelAndView对象传回给视图层进行渲染并返回给前端用户。

二、SpringMVC工作流程汉语版

SpringMVC是一种基于MVC设计模式的框架,通过DispatcherServlet将请求发送给对应的Controller。Controller接收并处理请求后,将结果返回给DispatcherServlet,最终由视图层渲染。

三、SpringMVC工作流程是什么

SpringMVC工作流程主要包括以下几个步骤:

  1. 客户端发送请求到DispatcherServlet。
  2. DispatcherServlet根据请求URL找到对应的Controller。
  3. Controller处理请求并返回ModelAndView对象。
  4. DispatcherServlet根据视图信息,将ModelAndView对象发送到视图层进行渲染。
  5. 视图层渲染完成后,将结果发送回给客户端。

四、SpringMVC工作流程通俗解释

SpringMVC工作流程可以类比于餐厅服务的过程。 客人坐下后,服务员收到客人的点餐请求并转交给厨师。厨师根据菜单做出一道美味佳肴(根据请求信息生成对应的结果数据),最后服务员将美食端到客人面前(将结果返回给客户端)。

五、SpringMVC工作流程图知乎

    +-------------+
    |  客户端请求  |
    +-------------+
           |
           |
    +-------------+
    |DispatcherServlet|
    +-------------+
           |
           |
    +-------------+
    |    Controller   |
    +-------------+
           |
           |
    +------------+
    |    ModelAndView |
    +------------+
           |
           |
    +-------------+
    |   视图渲染    |
    +-------------+
           |
    +-------------+
    | 网络响应     |
    +-------------+

六、SpringMVC工作流程面试回答

当收到一个请求时,DispatcherServlet会根据请求的URL找到对应的Controller,并使用HandlerMapping将请求映射到Controller的具体方法。Controller处理请求并调用Service层处理业务逻辑,再返回ModelAndView对象给DispatcherServlet。DispatcherServlet再使用HandlerAdapter将ModelAndView对象映射到对应的视图层,最终返回给前端。

七、SpringMVC工作流程处理器链

SpringMVC处理器链是由一系列的HandlerInterceptor组成的,这些拦截器按照配置的顺序依次执行,用于处理请求前、请求后、请求完成等一些预处理和后处理工作。 请求经过DispatcherServlet后,会先执行处理器链中的拦截器,在最终到达Controller前,也会触发一个Interceptor的preHandle方法。Controller处理完请求后,也会触发拦截器的postHandle方法。最后,DispatcherServlet会调用afterCompletion方法,来释放资源,进行异常处理等操作。

八、SpringMVC三层架构

SpringMVC三层架构主要分为Controller、Service、DAO三层。Controller负责接收请求和处理逻辑,然后调用Service层处理业务逻辑,Service层调用DAO层访问数据并返回结果。最终Controller将结果返回到视图层进行展示。

九、SpringMVC流程图讲解

    客户端请求                                DispatcherServlet                               Controller                          Service                                    DAO
        |                                               |                                                   |                                                   |                                                   |
        |                                               |                                                   |                                                   |                                                   |
    +-----------+                                   +----------------------+                          +----------------+                       +------------------+
    |               ----发起请求------>             |                                          |                                                   |                                                    |
    |                                           |-----preHandle()方法---+                      |                                                   |                                                     |
    |                                           |                                              |                                                  |                                                       |
    |               <--处理请求------           |                     |---->     处理请求  ---->                      |                                                  |                                                     |
    |                                           |                                             |                                                  |                                                      |
    |                                           |----postHandle()方法-----+              |                                                   |                                                       |
    |                                           |                                              |                                                  |                                                         |
    |               <--渲染结果-----           |                                          |                 <--      处理结果    <--|                                                       |
    |                                                                                                                  |                                                       |
    |                                                                                                                  |                                                       |
    +-----------+                                  +-------------+                        +----------+------------------------------+----------     |
                                                                                                                                                                                                   |
                                                                                                                                                                                                  |
                                                                       +-------------+                                                                                                                                                 |
                                                                       |       视图渲染    <--将结果传递给视图层                                                                                                          |
                                                                       +-------------+                                                                                                                                                     |
                                                                                                                                                                                                    |
                                                                                                                                                                                                   |
                                                                                                                                                                                                   |
                                                                                                                                                                                                   |
                                                                                                                                                                                                      |
                                                                                                                                                                                                    V
                                                                                                                                                                                          +-----------+
                                                                                                                                                                                           |        网络响应      |
                                                                                                                                                                                           +-----------+

十、Spring执行流程图

                                +---------------+
                                |   请求进入  |
                                +---------------+
                                         |
                                    +---------+
                                    |  客户端处理  |
                                    +---------+
                                         |
                                    +---------+
                                    | DispatcherServlet  |
                                    +---------+
                                         |
                                    +---------+
                                    |    HandlerMapping    |
                                    +---------+
                                         |
                                    +---------+
                                    |       HandlerInterceptorChain     |
                                    +---------+
                                         |
                                    +---------+
                                    |         HandlerAdapter          |
                                    +---------+
                                         |
                                    +---------+
                                    |     执行处理器            |
                                    +---------+
                                         |
                                    +---------+
                                    |          ModelAndView           |
                                    +---------+
                                         |
                                    +---------+
                                    |     视图渲染            |
                                    +---------+
                                         |
                                    +---------+
                                    |        网络响应         |
                                    +---------+

十一、代码示例

  1. DispatcherServlet配置示例:
<servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/dispatcherServlet-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
  1. Controller示例:
@Controller
public class HelloController {
    @RequestMapping("/hello")
    public ModelAndView hello() {
        ModelAndView mav = new ModelAndView();
        mav.addObject("message", "Hello World!");
        mav.setViewName("hello.jsp");
        return mav;
    }
}
  1. 视图层示例:
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Hello World!</title>
</head>
<body>
    <h1>${message}</h1>
</body>
</html>