SpringMVC的执行原理

119 阅读1分钟

SpringMVC 是一个基于 Model-View-Controller(MVC)设计模式的 Web 应用程序框架。它的执行原理可以分为以下几个步骤:

  1. 用户发送请求到 DispatcherServlet。

  2. DispatcherServlet 通过 HandlerMapping 确定请求对应的 Controller。

  3. Controller 处理请求,执行相应的方法,并返回一个 ModelAndView 对象(包含 Model 数据和 View 名称)给 DispatcherServlet。

  4. DispatcherServlet 将 Model 对象发送给 ViewResolver 以获取实际的视图页面。

  5. 最后,DispatcherServlet 将 Model 对象传递给视图页面以显示结果。

下面是一个简单的 SpringMVC 示例,以帮助解释执行原理:

  1. 配置 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>
  1. 配置 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>
  1. 创建 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";
    }
}
  1. 创建视图(/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 对象传递给视图以显示结果。