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 {
}
相关推荐
@ chen6 分钟前
Spring Boot 解决跨域问题
java·spring boot·后端
洛_尘31 分钟前
Java EE进阶2:前端 HTML+CSS+JavaScript
java·前端·java-ee
转转技术团队1 小时前
转转上门隐私号系统的演进
java·后端
皮皮林5511 小时前
Java+Selenium+快代理实现高效爬虫
java
hqxstudying2 小时前
Java行为型模式---策略模式
java·开发语言·建造者模式·适配器模式·策略模式
lxsy2 小时前
spring-ai-alibaba 简化版NL2SQL
java·nl2sql·spring-ai·ai-alibaba
WanderInk2 小时前
依赖对齐不再“失联”:破解 feign/BaseBuilder 错误实战
java·后端·架构
菜鸡上道3 小时前
Maven入门指南:生命周期、阶段和执行顺序详解
java·maven
许苑向上3 小时前
分布式缓存击穿以及本地击穿解决方案
java·分布式·缓存
爱Java&Java爱我3 小时前
数组:从键盘上输入10个数,合法值为1、2或3,不是这三个数则为非法数字,试编辑统计每个整数和非法数字的个数
java·开发语言·算法