说一下 spring mvc 运行流程?

2023-12-27 11:03:03

说一下 spring mvc 运行流程?

Spring MVC 是一个基于 Java 的 Web 框架,用于构建 Web 应用程序。它基于 MVC(Model-View-Controller)设计模式,将应用程序分为模型(Model)、视图(View)和控制器(Controller)三个主要组件。以下是 Spring MVC 的运行流程:

  1. 客户端发起请求: 客户端(浏览器)通过 URL 发起请求,请求到达服务器。

  2. DispatcherServlet 接收请求: 请求首先被 DispatcherServlet 接收,DispatcherServlet 是 Spring MVC 的核心控制器,它负责协调整个请求处理过程。

  3. HandlerMapping 查找处理器: DispatcherServlet 通过 HandlerMapping 查找合适的处理器(Controller),HandlerMapping 将请求映射到对应的处理器。

  4. HandlerAdapter 调用处理器: DispatcherServlet 调用 HandlerAdapter,HandlerAdapter 负责调用实际的处理器方法(Controller 方法)来处理请求。

  5. ModelAndView 处理数据和视图: 处理器方法处理请求后,返回一个 ModelAndView 对象,其中包含处理结果的数据和要显示的视图。

  6. ViewResolver 解析视图: DispatcherServlet 通过 ViewResolver 解析视图,找到具体的视图实现。

  7. 视图渲染: 视图渲染将模型数据填充到视图中,生成最终的响应内容。

  8. 响应返回给客户端: DispatcherServlet 将最终的响应返回给客户端,完成请求处理。

以下是一个简单的 Spring MVC 的代码示例:

// 控制器类
@Controller
@RequestMapping("/hello")
public class HelloController {

    @RequestMapping("/greet")
    public ModelAndView greet() {
        // 处理请求,返回数据和视图
        String message = "Hello, Spring MVC!";
        ModelAndView modelAndView = new ModelAndView("greetView");
        modelAndView.addObject("message", message);
        return modelAndView;
    }
}

// Spring MVC 配置类
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.example")
public class WebConfig implements WebMvcConfigurer {

    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        return resolver;
    }
}

// 视图定义(/WEB-INF/views/greetView.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Greet Page</title>
</head>
<body>
    <h1>${message}</h1>
</body>
</html>

在上述示例中,HelloController 类是一个简单的控制器,处理 /hello/greet 请求,并返回一个包含消息的 ModelAndView 对象。配置类 WebConfig 配置了视图解析器,并指定了视图文件的位置。最终,greetView.jsp 视图文件渲染了模型数据,生成最终的响应内容。

文章来源:https://blog.csdn.net/sanmansan/article/details/135235579
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。