Spring MVC核心知识点快速梳理

系统梳理Spring全家桶 ! Spring框架自诞生以来一直备受开发者青睐,有人亲切的称之为:Spring 全家桶。它包括SpringMVC、SpringBoot、Spring Cloud、Spring Cloud Dataflow等解决方案。 很多研发人员把spring看作心目中最好的java项目,没有之一。 所以这是重点也是难点,工作中必须会,面试时肯定考。 那么,今天花费20分钟,梳理Spring框架相关知识。 Spring系列包含非常多的项目,可以满足java开发中的方方面面。 先来看常用框架的知识点汇总,如图: 阅读详情

一、Spring MVC简介

为什么使用Spring MVC?

直接使用Servlet开发Web应用存在一些不便:

  1. 接收参数麻烦:需要手动调用request.getParameter(),并进行类型转换。

  2. 请求映射不灵活:通常一个Servlet类(通过重写service或doGet/doPost方法)主要处理一种类型的请求,管理大量Servlet比较繁琐。

什么是MVC设计模式?

MVC是一种经典的分层设计思想,将应用分为三层:

  • Model (模型):处理数据和业务逻辑。

    • 数据模型:如POJO(实体类)。

    • 业务模型:如Service、Mapper(DAO)。

  • View (视图):负责展示界面,与用户交互。如JSP、HTML。

  • Controller (控制器):接收用户请求,调用模型处理,并决定返回哪个视图。如Servlet、Spring MVC中的@Controller。

调用关系:View-> Controller-> Model

与三层架构关系:MVC是一种表现层的架构模式,而经典的三层架构(表现层、业务逻辑层、数据访问层)是更宏观的应用程序分层。MVC中的Controller和View通常属于三层架构中的“表现层”。

什么是Spring MVC?

Spring MVC是Spring Framework提供的一个基于MVC设计模式的Web框架模块。它本质上封装了Servlet,极大地简化了传统Web开发,让开发者能更专注于业务逻辑。

二、快速入门案例

1. 项目依赖 (pom.xml)

核心需要spring-webmvc,它通常包含了spring-context。开发时可以用tomcat7-maven-plugin插件运行。

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.x.x</version>
</dependency>

2. 前端页面 (index.jsp)

<a href="/hello">打个招呼</a>

3. 控制器 (HelloController.java)

@Controller // 标识这是一个Spring MVC控制器
public class HelloController {
    @RequestMapping("/hello") // 建立URL `/hello` 与该方法的映射
    public ModelAndView hello() {
        ModelAndView mv = new ModelAndView();
        // 向请求域添加数据,相当于 request.setAttribute("msg", "...")
        mv.addObject("msg", "师姐你好");
        // 设置逻辑视图名,视图解析器会将其转换为物理路径
        mv.setViewName("success");
        return mv;
    }
}

4. Spring MVC 核心配置文件 (springmvc.xml)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="...">
    <!-- 1. 组件扫描:注册带有@Controller等注解的Bean -->
    <context:component-scan base-package="com.yourpackage.controller"/>

    <!-- 2. 视图解析器:将返回的逻辑视图名解析为实际JSP路径 -->
    <!-- 例如: "success" -> "/WEB-INF/pages/success.jsp" -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

    <!-- 3. 注解驱动:核心配置!启用@RequestMapping, @RequestBody等注解支持,
         并自动注册必要的处理器映射器和适配器 -->
    <mvc:annotation-driven/>
</beans>

5. 配置前端控制器 (web.xml)

<web-app>
    <!-- 配置Spring MVC的核心控制器:DispatcherServlet -->
    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 指定Spring MVC配置文件的路径 -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <!-- 设置随容器启动而加载 -->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <!--
           url-pattern 详解:
           `/` :拦截所有请求(不包括.jsp),将动态请求交给Spring MVC处理,静态资源需特殊配置。
           `/*`:拦截所有请求(包括.jsp),JSP页面也将被拦截,通常不这么配。
        -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

三、Spring MVC 核心组件与工作流程

  1. DispatcherServlet (前端控制器):请求的统一入口,负责协调各个组件。

  2. HandlerMapping (处理器映射器):根据请求的URL,找到对应的处理器(Handler,即我们写的@Controller中的方法)。

  3. HandlerAdapter (处理器适配器):以统一的适配器模式去调用找到的处理器方法。

  4. Handler (处理器):即我们的业务控制器方法,处理具体请求。

  5. ViewResolver (视图解析器):将处理器返回的逻辑视图名(如"success")解析为具体的物理视图路径(如"/WEB-INF/pages/success.jsp")。

  6. View (视图):对视图(如JSP)进行渲染,将模型数据填充到request域,并最终生成响应。

简化流程:请求-> DispatcherServlet-> HandlerMapping-> HandlerAdapter-> Handler-> ViewResolver-> View-> 响应。

四、核心注解 @RequestMapping

作用:在处理器方法或控制器类上声明,用于建立URL请求与处理方法之间的映射关系。

使用场景:

  • 在方法上使用:为该方法映射一个URL。

  • 在类上使用:为类中所有方法的URL提供一个统一的父路径(窄化请求路径)。

主要属性:

  • value/ path:指定请求的URL。

  • method:指定请求方法(GET, POST, PUT, DELETE等)。RequestMethod.POST

示例:

@Controller
@RequestMapping("/user") // 窄化路径,类中所有方法URL都以 `/user` 开头
public class UserController {

    @RequestMapping(value = "/add", method = RequestMethod.POST)
    public String addUser() { ... }

    // 简写形式(推荐)
    @PostMapping("/delete") // 等价于 @RequestMapping(value="/delete", method=RequestMethod.POST)
    public String deleteUser() { ... }

    @GetMapping("/{id}") // 等价于 @RequestMapping(value="/{id}", method=RequestMethod.GET)
    public String getUser(@PathVariable Long id) { ... }
}

五、处理器方法的返回值

  1. ModelAndView:可同时返回模型数据和视图名。

    public ModelAndView getInfo() {
        ModelAndView mv = new ModelAndView();
        mv.addObject("data", someData); // 设置模型数据
        mv.setViewName("pageName");     // 设置逻辑视图名
        return mv;
    }
  2. String (最常用):返回逻辑视图名、重定向或转发路径。

    • 返回视图名:配合Model参数传递数据。

      public String getInfo(Model model) {
          model.addAttribute("data", someData);
          return "pageName"; // 由视图解析器拼接
      }
    • 重定向:redirect:前缀。两次请求,地址栏改变,request域数据不共享。

      public String save() {
          // 处理保存逻辑...
          return "redirect:/user/list"; // 重定向到列表页
      }
    • 请求转发:forward:前缀。一次请求,地址栏不变,request域数据共享。

      public String forwardDemo() {
          return "forward:/some/internal/page";
      }

六、请求参数的接收

Spring MVC 能自动将请求参数绑定到处理器方法的入参上。

  1. 接收少量基本类型参数:参数名与URL或表单中的字段名一致即可自动绑定。

    // 请求:/find?name=Tom&age=20
    @GetMapping("/find")
    public String find(String name, Integer age) { // 自动注入
        System.out.println(name + ", " + age);
        return "success";
    }
  2. 接收POJO对象参数(多个参数):表单字段名或URL参数名与POJO属性名一致,即可自动封装成对象。

    public class User {
        private String username;
        private String password;
        // getter/setter...
    }
    // 表单:<input name="username">, <input name="password">
    @PostMapping("/add")
    public String add(User user) { // 自动封装为User对象
        System.out.println(user.getUsername());
        return "success";
    }
  3. 接收RESTful风格参数:使用@PathVariable注解,将URL路径中的变量绑定到参数。

    // 请求:/user/delete/123
    @DeleteMapping("/user/{id}")
    public String delete(@PathVariable("id") Long userId) { // 将 {id} 的值 123 绑定到 userId
        userService.delete(userId);
        return "redirect:/user/list";
    }

希望这份梳理能帮助你快速理解和回顾Spring MVC的核心内容。在接下来的学习中,你会接触到更深入的内容,如数据校验、JSON处理、拦截器、文件上传等。如果有任何疑问,欢迎在评论区交流!

Spring MVC 详解:原理、组件与实战 本文全面介绍了Spring MVC框架的核心内容,包括MVC设计模式、主要组件(DispatcherServlet、HandlerMapping等)及其协同工作原理。详细解析了请求处理流程、常用注解(@Controller、@RequestMapping等)、视图技术、拦截器使用等开发要点,并提供了RESTful API开发示例。文章还涵盖了最佳实践建议和常见问题调试方法,帮助开发者掌握Spring MVC在企业级Web开发中的高效应用。作为Spring生态的核心Web模块,Spring MVC以高扩展性和 阅读详情

相关推荐

Lisflood

文献:基于SWMM和LISFLOOD-FP模型的居住区低影响开发模拟评价。问题:多个节点溢流同时,不行,待解决。目录下,cmd命令行。

警警的博客 2661

spring知识点梳理

Spring 框架全知识点梳理。

qq_45705626的博客 975

FC游戏金手指代码大全:亲测可用指南与内存修改原理

在计算机和游戏开发领域,内存修改是一项基础而强大的技术,它通过直接读写程序运行时内存中的数据,改变软件的行为和状态。其核心原理在于理解进程的内存地址空间布局,定位存储关键游戏变量(如生命值、金币数)的特定地址,并注入或锁定目标数值。这项技术的工程价值在于,它不仅能用于游戏辅助,更是软件逆向工程、漏洞分析和调试的重要实践手段。在怀旧游戏和模拟器场景中,内存修改以“金手指”或“作弊码”的形式广泛应用,帮助玩家自定义游戏体验。本文将聚焦FC(红白机)游戏,深入解析Game Genie码和Raw码两种主流金手指格式

weixin_30780649的博客 778

Spring知识点精简版梳理(一)——概述

一、什么是Spring? 1、Spring 是轻量级的开源的 JavaEE 框架 2、Spring 可以解决企业应用开发的复杂性 3、Spring 有两个核心部分:IOC 和Aop (1) IoC:控制反转,把创建对象过程交给 Spring进行管理 (2) AOP:面向切面,不修改源代码进行功能增强 4、Spring 特点 (1) 方便解耦,简化开发 (2) Aop编程支持 (3) 方便程序测试 (4) 方便和其他框架进行整合 (5) 方便进行事务操作 (6) 降低 API开发难度 5、目前使用Sprin.

qq_35843514的博客 1万+

大模型——CoPaw:阿里云通义推出的个人智能体工作台,让 AI 助理真正落地

阿里云通义实验室于2026年2月发布CoPaw个人智能助理,采用"本地+云端"双部署模式,支持多平台接入和技能扩展。该产品基于AgentScope多智能体生态构建,具备极简部署、长期记忆系统和灵活的技能插件体系三大核心特性。用户可通过简单命令快速安装,并通过记忆文件系统实现个性化交互体验。CoPaw还支持钉钉、飞书等主流平台接入,并开源了模块化架构,允许本地模型接入。技术架构采用多频道对话网关与可插拔Skills系统,为用户提供真正的AI助理服务体验。

2132

R语言中的summarise函数和mutate函数用于计算分组占比。下面是关于这两个函数的详细介绍以及相应的源代码示例:

R语言中的summarise函数和mutate函数用于计算分组占比。

CodeByte的博客 1182

【JAVA 进阶】SpringMVC全面解析:从入门到实战的核心知识点梳理

本文系统介绍了SpringMVC框架的核心概念与应用。首先概述了MVC设计模式和SpringMVC的优势,包括与Spring生态的无缝集成、灵活配置等特点。重点解析了SpringMVC的核心组件(DispatcherServlet、HandlerMapping等)及其协同工作流程,详细阐述了请求从接收到响应的完整执行过程。

CodeSuc 的技术博客 2957

基于知识图谱的时空事件关联推理能力培养

随着信息技术的飞速发展,大量的时空事件数据被产生和收集,如交通流量数据、气象观测数据、社交媒体上的地理定位信息等。这些数据蕴含着丰富的知识和规律,但要从中提取有价值的信息并非易事。基于知识图谱的时空事件关联推理旨在通过构建知识图谱,将时空事件数据进行整合和关联,从而实现对事件之间潜在关系的挖掘和推理。本文的目的是系统地介绍基于知识图谱的时空事件关联推理能力的培养方法,包括核心概念、算法原理、数学模型、实际应用等方面。

操作系统内核探秘的博客 750

Spring、Spring MVC、Spring Boot与Spring Cloud的扩展点全面梳理

Spring生态的扩展点覆盖了从核心容器(Spring)、Web层(Spring MVC)、应用启动(Spring Boot)到微服务架构(Spring Cloud)的各个方面。Spring提供Bean生命周期管理,Spring MVC专注Web请求处理,Spring Boot简化配置和启动,Spring Cloud(结合Nacos)则增强了分布式系统的能力。开发者应根据需求选择合适的扩展点,注意性能和代码清晰度,以构建高效、可维护的应用。建议使用Spring Boot的自动配置减少手动配置。

算法小生 1276

ROSTCM6+Gephi的网络语义分析详细教程(附案例实战)

ROSTCM6是武汉大学沈阳教授研发编码的国内目前唯一的以辅助人文社会科学研究的大型免费社会计算平台。该软件可以实现微博分析、聊天分析、全网分析、网站分析、浏览分析、分词、词频统计、英文词频统计、流量分析、聚类分析等一系列文本分析。Gephi是一款开源免费跨平台基于JVM的复杂网络分析软件,可用于各种图形和网络的可视化和探索,是最受欢迎的网络可视化软件之一。

m0_64336780的博客 1万+

实战篇| app爬虫不用真机

之前写过一篇基于真机app爬虫《App爬虫实战篇-以华为真机手机爬取集换社的app为例》,如果大家有用真机爬虫的经历,会深刻认识到真的不方便,一是自己的手机,经常会被电话、微信等打断,二是闲置手机,面对小批量数据还能勉强,大批量爬虫,会导致成本指数级上升,并且控制起来相对麻烦。以下就是常见的模拟器。emulator -avd my_avd -no-snapshot-save # 启动时不保存 snapshot。emulator -avd my_avd -wipe-data # 清除数据(恢复到出厂)

youbingchen的博客 596

Spring MVC 核心知识

springmvc

@chen 1265

Altium Designer(AD24/25)PCB编辑的几种方法介绍

本文介绍了Altium Designer(AD24/25)软件中PCB编辑的四种操作方法:1)通过菜单栏"Place→Component"激活;2)点击工具栏元器件图标;3)右键快捷菜单选择;4)快捷键P+C组合操作。建议初学者先通过菜单栏和快捷菜单熟悉操作,熟练后转为工具栏和快捷键以提高效率。文章配有操作示意图,帮助用户快速掌握PCB元器件放置技巧。

fydar的博客 937

Spring MVC 核心知识点

用户发送的所有请求先进入 DispatcherServlet(前端控制器),由其统一分发,依次通过 HandlerMapping(处理器映射器)找到对应处理器、HandlerAdapter(处理器适配器)执行处理器,处理完成后返回 ModelAndView,最后经 ViewResolver(视图解析器)解析并渲染视图,将结果响应给用户。声明方式:使用@interface关键字;规则:注解内的方法无参数,返回值仅限基本类型、字符串、枚举、注解或数组;可通过default指定默认值;示例:java。

2503_92804185的博客 415

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【Spring MVC】Spring MVC知识点梳理(附答案)

Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把模型-视图-控制器分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。Spring的MVC框架是围绕DispatcherServlet来设计的,它用来处理所有的HTTP请求和响应。控制器提供一个访问应用程序的行为,此行为通常通过服务接口实现。控制器解析用户输入并将其转换为一个由视图呈现给用户的模型。

DreamSun的博客 817

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Spring MVC 框架梳理

/ getter省略// 请求处理前执行(返回true则继续执行,false则拦截)@Override// 未登录,重定向到登录页// 请求处理后、视图渲染前执行@OverrideSystem.out.println("postHandle执行");// 视图渲染后执行@OverrideSystem.out.println("afterCompletion执行");

Hz10220022的博客 701

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Spring MVC 请求与响应

Spring MVC 请求与响应

2301_81096101的博客 1347

Spring MVC 的核心知识点梳理

Spring MVC 是一种解耦的设计模式,包含 Model(数据+业务)、View(展示界面)、Controller(接收请求)三部分。其核心是 DispatcherServlet,通过 HandlerMapping、HandlerAdapter 等组件协调请求处理流程。常用注解包括 @Controller、@RequestMapping 及其衍生注解,支持灵活的参数绑定和类型转换。还提供拦截器和过滤器机制,分别在 Spring 层和 Servlet 层实现请求处理前后的逻辑增强。

2401_87092242的博客 632

Spring MVC 核心知识点学习笔记

Spring MVC核心学习笔记摘要 核心概述:Spring MVC是Spring的Web层组件,基于MVC模式,负责请求映射、参数绑定和响应处理,核心流程为:请求→DispatcherServlet→Controller→响应。 @RequestMapping: 映射HTTP请求路径,支持类/方法级配置 常用属性:value/path(路径)、method(请求方式)、produces(响应格式) 简化注解:@GetMapping/@PostMapping等 前后端分离实践: 后端:通过@RestCont

2603_95369890的博客 336

Spring Boot 核心知识点全景

摘要:SpringBoot作为Java高效开发框架,包含基础配置、Web开发、数据库集成等核心知识点。其三大特性(自动配置、starters依赖、内嵌容器)显著提升开发效率。学习路径建议:先掌握项目初始化、REST接口开发等实战技能,再深入自动配置原理理解底层机制,最后拓展至微服务(SpringCloud)和云原生(Docker)应用。通过"基础→实战→原理→拓展"的体系化学习,可快速提升后端开发能力。

Koilillll的博客 650

《Spring MVC架构核心注解》

本文系统解析了SpringMVC七大核心场景的常用注解:控制器标识类、请求映射类、参数绑定类、模型传递类、响应处理类、异常处理类和核心依赖类。通过学术定义+生活化比喻的双重解读方式,帮助开发者深入理解各注解的功能与应用场景。

2401_83787661的博客 723

真心被Spring框架折服!Spring全家桶知识点全梳理

大家先看一下Spring全家桶思维导图,这上面的技术不知道各位大佬们是不是都用过。 简单说一下这些技术吧 Spring Framework 它就是我们常说的Spring框架,它是一个软件设计架构层面的框架,为基于Java的企业级应用程序提供了一套标准流程和配置模型,可部署在任何类型的平台上。Spring优势在于为开发者提供了应用级别的基础结构支持,实现应用层面的解耦合,允许开发者自主选择相关组件,开发者只需专注于业务逻辑的开发,不需要关注特定的部署环境。 SpringMVC Sprin.

Java圈全能架构师的博客 1001

第四章 JavaWeb 核心知识点全梳理

在dofilter方法前面的代码,是前置代码,后面是后置。

chagumu 613

Spring Boot核心知识点总结

一篇关于Spring Boot知识点的博文,包含一些简单的例子

Ljd91666的博客 1775

问:Spring MVC DispatcherServlet流程步骤梳理

DispatcherServlet是Spring MVC的核心,负责接收HTTP请求并分发到相应处理器。它通过HandlerMapping映射请求,HandlerAdapter适配并执行处理器,ViewResolver解析视图。本文详解了DispatcherServlet的工作流程,包括请求接收、映射、适配、处理器方法调用、视图解析、渲染及响应返回,并介绍了核心组件和示例应用,帮助理解这一技术。

技术铺掌柜 1520

Spring Boot 知识点梳理

业务异常可通过自定义异常类(如。

land_yu的博客 543
上一篇: Spring整合MyBatis与事务管理详解(第三部分)
下一篇: Spring MVC零散知识点记录
StackNoOverflow
博客等级 码龄1年 22粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值