SpringMVC入门学习总结(2025.04.16)

目录

一、SpringMVC框架核心流程。

(1)SpringMVC框架处理客户端请求流程。(简要)

1、接收请求

2、请求映射。

3、处理请求。

(2)SpringMVC框架的核心工作流程。(详细)

[1、请求到达(Incoming request)。](#1、请求到达(Incoming request)。)

2、接收请求(前端控制器:DispatcherServlet)。

[3、委托请求(Delegate request) 。](#3、委托请求(Delegate request) 。)

[4、业务处理与模型创建(Handle request、Create model)。](#4、业务处理与模型创建(Handle request、Create model)。)

[5、视图渲染(Delegate rendering of response、Render response)。](#5、视图渲染(Delegate rendering of response、Render response)。)

[6、返回响应(Return control、Return response)。](#6、返回响应(Return control、Return response)。)

7、运行环境。

二、SpringMVC快速入门项目小结。

(1)pom文件Maven依赖项。

spring-webmvc。

javax.servlet-api。(非必需)

(2)Tomcat(版本:9.0.68)运行环境、打包与部署。

tomcat本地部署打包与打包。

[控制台乱码问题。(VM options)](#控制台乱码问题。(VM options))

Tomcat服务启动日志乱码问题。(conf->logging.properties)

(3)Web容器初始化配置类。

(4)SpringMVC配置类。

(5)Spring配置类。

注解扫描。排除controller层注解扫描。


一、SpringMVC框架核心流程。

(1)SpringMVC框架处理客户端请求流程。(简要)
1、接收请求
  • 客户端发送请求,该请求首先被SpringMVC框架接收。
  • SpringMVC中的DispatcherServlet作为前端控制器,会拦截所有进入的HTTP请求,它是整个请求处理流程的入口。

2、请求映射。
  • SpringMVC框架根据请求的URL等信息,将请求映射到对应的Controller。
  • Controller在SpringMVC中以JavaBean的形式存在 。框架通过配置(如:注解@RequestMapping等 )来确定哪个Controller处理该请求。

3、处理请求。
  • 被映射到的Controller接收请求后,会进行具体的业务逻辑处理。如调用服务层方法、操作数据库等,然后返回处理结果(通常会携带视图信息和模型数据 )。后续再由框架进行视图渲染等操作,最终将响应返回给客户端。

(2)SpringMVC框架的核心工作流程。(详细)
1、请求到达(Incoming request)。
  • 客户端发起请求。该请求首先抵达DispatcherServlet(前端控制器 )。

2、接收请求(前端控制器:DispatcherServlet)。
  • 所有客户端请求首先到达 DispatcherServlet。它是SpringMVC的入口,类似于一个交通枢纽,负责接收和初步处理所有请求。

3、委托请求(Delegate request) 。
  • DispatcherServlet根据请求的URL等信息,将请求委托给合适的Controller(如:图中的HelloController)。它通过查找配置信息(如注解或配置文件)来确定哪个Controller能处理该请求。

4、业务处理与模型创建(Handle request、Create model)。
  • 被委托的Controller处理具体业务逻辑(如调用服务层方法、操作数据库等)。
  • 在处理请求过程中,Controller会创建一个Model对象,用于封装处理业务逻辑过程中产生的数据,这些数据后续会传递到视图层展示给用户。

5、视图渲染(Delegate rendering of response、Render response)。
  • 委托渲染响应:Controller处理完业务逻辑后,将Model和视图相关信息返回给 DispatcherServlet。提示可以进行响应的渲染工作了。
  • 渲染响应 :DispatcherServlet根据返回的视图信息,找到对应的视图模板(View template。如图中提到的JSP)。然后将Model中的数据填充到视图模板中进行渲染,生成最终要返回给客户端的HTML或其他格式内容。

6、返回响应(Return control、Return response)。
  • 渲染完成后,控制权返回给DispatcherServlet。(Return control)
  • 最后DispatcherServlet将响应结果返回给客户端。(Return response)

7、运行环境。
  • 整个流程是在Servlet引擎(如:Tomcat )提供的环境中运行的 。

二、SpringMVC快速入门项目小结。

(1)pom文件Maven依赖项。
spring-webmvc。
XML 复制代码
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.18</version>
</dependency>
javax.servlet-api。(非必需)
XML 复制代码
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>

(2)Tomcat(版本:9.0.68)运行环境、打包与部署。
tomcat本地部署打包与打包。

控制台乱码问题。(VM options)
XML 复制代码
-Dfile.encoding=utf-8

Tomcat服务启动日志乱码问题。(conf->logging.properties)



(3)Web容器初始化配置类。
java 复制代码
package com.hyl.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class InitServletContainerConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMvcConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}

(4)SpringMVC配置类。
java 复制代码
package com.hyl.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

@Configuration
@ComponentScan("com.hyl.controller")
@EnableWebMvc  //开启json接收
public class SpringMvcConfig {
}

(5)Spring配置类。
注解扫描。排除controller层注解扫描。
java 复制代码
package com.hyl.config;

import org.springframework.context.annotation.*;
import org.springframework.web.bind.annotation.RestController;

@Configuration
@ComponentScan(
        value = "com.hyl",
        excludeFilters = @ComponentScan.Filter(
                type = FilterType.ANNOTATION,
                classes = {RestController.class}
        )
)
@PropertySource("classpath:jdbc.properties")
@Import({JdbcConfig.class, MyBatisConfig.class})
public class SpringConfig {
}
相关推荐
初级炼丹师(爱说实话版)24 分钟前
c语言中的数组可以用int a[3]来创建。写一次int就可以了,而java中要声明两次int类型像这样:int[] arr = new int[3];
java·c语言
币圈小菜鸟1 小时前
Windows 环境下搭建移动端自动化测试环境(JDK + SDK + Node.js + Appium)
java·windows·python·测试工具·node.js·appium
程序员 Andy3 小时前
项目中为什么使用SpringBoot?
java·spring boot·后端
Moss Huang8 小时前
docker-runc not installed on system
java·docker·容器
麦兜*10 小时前
Spring Boot 集成 Docker 构建与发版完整指南
java·spring boot·后端·spring·docker·系统架构·springcloud
Cisyam^10 小时前
Go环境搭建实战:告别Java环境配置的复杂
java·开发语言·golang
CHENFU_JAVA10 小时前
使用EasyExcel实现Excel单元格保护:自由锁定表头和数据行
java·excel
青云交12 小时前
Java 大视界 -- 基于 Java 的大数据实时流处理在智能电网分布式电源接入与电力系统稳定性维护中的应用(404)
java·大数据·分布式·智能电网·flink 实时流处理·kafka 数据采集·iec 61850 协议
仰望星空@脚踏实地13 小时前
maven scope 详解
java·maven·scope