初识SpringMVC -- SpringMVC入门保姆级教程(一)

news2025/1/9 5:06:21

文章目录

  • 前言
  • 一、初识SpringMVC
    • 1.认识SpringMVC
    • 2.SpringMVC入门案例
    • 3.SpringMVC开发的一般步骤
    • 4.入门案例涉及的知识点
    • 5.入门案例工作流程
  • 总结


前言

为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们批评指正。
(博客的参考源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问欢迎大家在评论区向我提出)


一、初识SpringMVC

1.认识SpringMVC

  1. SpringMVC是什么

Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框架。

  1. SpringMVC的优点
  • SpringMVC框架提供了一整套完善的组件。

不同于以前框架只提供接口,然后让使用者自己根据接口写实现类来实现功能,SpringMVC提供了一整套完善的组件,可以直接使用。这就相当于以前的框架只给你提供设计图纸,你需要根据设计图纸自己把工具造出来,而现在SpringMVC直接给你一套现成的工具箱,里面有你用得到的各种工具。而且使用SpringMVC框架提供这些工具也巨简单,通过一些简单的注解就搞定了,不需要编写繁琐冗长的代码,简直比夏天喝雪碧还要爽。

  • SpringMVC是以强大的Spring容器为基础的框架。

如果同学你使用过Spring容器,那你一定知道Spring容器的对象托管功能有多么的好用。它不需要你自己去创建和释放对象,Spring容器帮你全搞定! 同样地,能够放入Spring容器里面的这个SpringMVC工具箱,里面各种工具类的管理也是不需要操心的。而这省心省力的优点,是其他框架都没有的。

  • 框架的配置简单又不失灵活性.

SpringMVC框架的常用配置项就已经涵盖了项目中80%的配置需求,简单的项目甚至可以做到零配置,拿过来就用。

  • 代码的可重用性很高。

翻译成大白话就是,一个成熟的,上线稳定运行过的SpringMVC项目,经过简单修改,甚至不用修改,就可以作为另一个新项目开发的基础。这样能在开发新项目时省很多力气。

  • 可扩展性好。

如果SpringMVC框架提供的工具不能100%满足你的需求,你需要定制开发,SpringMVC框架同样也提供了相应的接口,可以进行工具的升级。这样你在遇到强力精英怪的时候,照样能用SpringMVC框架打败它。

  1. SpringMVC三层架构

Spring web MVC 框架提供了模型(Model)- 视图(View)- 控制(Controller)的体系结构和可以用来开发灵活、松散耦合的 web 应用程序的组件。MVC 模式导致了应用程序的不同方面(输入逻辑、业务逻辑和 UI 逻辑)的分离,同时提供了在这些元素之间的松散耦合。

模型封装了应用程序数据,并且通常它们由 POJO 组成。
视图主要用于呈现模型数据,并且通常它生成客户端的浏览器可以解释的 HTML 输出。
控制器主要用于处理用户请求,并且构建合适的模型并将其传递到视图呈现。

在这里插入图片描述

  1. 学习目标

在这里插入图片描述

2.SpringMVC入门案例

  1. 创建maven模块,选择webapp开发模板(Archetype)

在这里插入图片描述

2.右键打开模块设置,创建一个目录java,标记为Source源码,并将Language level等级设置成8

在这里插入图片描述

  1. 在pom.xml配置文件中导入SpringMVC以及Servlet坐标

(此处先将plugins中的插件都先删除)

 <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.10.RELEASE</version>
    </dependency>
  1. 创建SpringMVC控制器类
//定义表现层控制器bean
@Controller
public class UserController {

    //设置映射路径为/save,即外部访问路径
    @RequestMapping("/save")
    //设置当前操作返回结果为指定json数据(本质上是一个字符串信息)
    @ResponseBody
    public String save(){
        System.out.println("user save ...");
        return "{'info':'springmvc'}";
    }
}

  1. 初始化SpringMVC环境(同Spring环境),设定SpringMVC加载对应的bean
//springmvc配置类,本质上还是一个spring配置类
@Configuration
@ComponentScan("org.example.controller")
public class SpringMvcConfig {
}
  1. 初始化Servlet容器,加载SpringMVC环境,并设置SpringMVC技术处理的请求
//web容器配置类
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
    //加载springmvc配置类,产生springmvc容器(本质还是spring容器)
    protected WebApplicationContext createServletApplicationContext() {
        //初始化WebApplicationContext对象
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        //加载指定配置类
        ctx.register(SpringMvcConfig.class);
        return ctx;
    }

    //设置由springmvc控制器处理的请求映射路径
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    //加载spring配置类
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }

}
  1. 在pom.xml中添加tomcat插件,配置端口号为80
 <plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.1</version>
    <configuration>
      <port>80</port>
      <path>/</path>
    </configuration>
 </plugin>
  1. 启动服务器类型选择maven,运行命令选tomcat-run

在这里插入图片描述

在这里插入图片描述

  1. 运行结果

在这里插入图片描述

在这里插入图片描述

3.SpringMVC开发的一般步骤

  1. 使用SpringMVC技术需要先导入SpringMVC坐标与Servlet坐标

在这里插入图片描述

  1. 创建SpringMVC控制器类(等同于Servlet功能)

在这里插入图片描述

  1. 初始化SpringMVC环境(同Spring环境),设定SpringMVC加载对应的bean

在这里插入图片描述

  1. 初始化Servlet容器,加载SpringMVC环境,并设置SpringMVC技术处理的请求

在这里插入图片描述

4.入门案例涉及的知识点

  1. @Controller注解

名称:@Controller
类型:类注解
位置:SpringMVC控制器类定义上方
作用:设定SpringMVC的核心控制器bean
范例:如下

在这里插入图片描述

  1. @ResponseBody注解

名称:@ReaponseBody
类型:方法注解
位置:SpringMVC控制器类定义上方
作用:设置当前控制器方法响应内容为当前返回值,无懈解析
范例:如下

在这里插入图片描述

  1. SpringMVC入门程序开发总结(1+N)
  • 一次性工作

1.创建工程,设置服务器,加载工程导入坐标
2.创建web容器启动类,加载SpringMVC配置,并设置SpringMVC请求拦截路径
3.SpringMVC核心配置类(设置配置类,扫描controller包,加载Controller控制器bean)

  • 多次性工作

1.定义处理请求的控制器类
2.定义处理请求的控制器方法,并配置映射路径(@RequestMapping)与返回json数据(@ResponseBody)
3.示例如下:

//定义表现层控制器bean
@Controller
public class UserController {
    //设置映射路径为/delete,即外部访问路径
    @RequestMapping("/delete")
    //设置当前操作返回结果为指定json数据(本质上是一个字符串信息)
    @ResponseBody
    public String delete(){
        System.out.println("user delete ...");
        return "{'info':'springmvc666'}";
    }
}

在这里插入图片描述

  1. 初始化Servlet容器

AbstractDispatcherServletInitializer 类是SpringMVC提供的快速初始化Web30容器的抽象类,它提供三个接口方法供用户实现

  • createServletApplicationContext()方法

创建Servlet容器时,加载 SpringMVC 对应的bean并放入 WebApplicationContext 对象范围中,而 WebApplicationContext 的作用范围为 ServletContext 范围,即整个web容器范围,示例代码如下:

    //加载springmvc配置类,产生springmvc容器(本质还是spring容器)
    protected WebApplicationContext createServletApplicationContext() {
        //初始化WebApplicationContext对象
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        //加载指定配置类
        ctx.register(SpringMvcConfig.class);
        return ctx;
    }
  • getServletMappings()方法方法

设定SpringMVC对应的请求映射路径,设置为/表示拦截所有请求,任意请求都将转入到 SpringMVC进行处理,示例代码如下:

   //设置由springmvc控制器处理的请求映射路径
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
  • createRootApplicationContext()方法

如果创建Servlet容器时需要加载非SpringMVc对应的bean,使用当前方法进行,使用方式同createServletApplicationContext(),示例代码如下:

     //加载spring配置类
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }

5.入门案例工作流程

  1. 启动服务器初始化过程

1.服务器启动,执行ServletContainersInitConfig类,初始化web容器
2.执行createServletApplicationContext方法,创建了WebApplicationContext对象
3.加载SpringMvcConfig
4.执行@ComponentScan加载对应的bean
5.加载UserController,每个@RequestMapping的名称对应一个具体的方法
6.执行getServletMappings方法,定义所有的请求都通过SpringMVC

在这里插入图片描述

  1. 单次请求过程

1.发送请求localhost/save
2.web容器发现所有请求都经过SpringMVC,将请求交给SpringMVC处理
3.解析请求路径/save
4.由/save匹配执行对应的方法save()
5.执行save()
6.检测到有@ResponseBody直接将save()方法的返回值作为响应求体返回给请求方

总结

欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下作者,后续还会更新mybatis, springboot,maven高级,微信小程序,等前后端内容的学习笔记。
(博客的参考源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问欢迎大家在评论区向我提出)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/561915.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿里云服务器端口怎么打开?详细教程一步步

阿里云服务器端口怎么打开&#xff1f;云服务器ECS端口在安全组中开启&#xff0c;轻量应用服务器端口在防火墙中打开&#xff0c;新手站长以开通80端口为例来详细说下阿里云服务器端口开放图文教程&#xff0c;其他的端口如8080、3306、443、1433也是同样的方法进行开启端口&a…

双轮云台小车实现追踪彩色目标功能

1. 功能说明 在R216a样机上安装一个摄像头&#xff0c;本文示例将实现双轮小车通过二自由度云台自主寻找彩色目标的功能。 2. 结构说明 R216a样机主要是由一个 双轮小车 和一个 2自由度云台 组合而成。 3. 电子硬件 在这个示例中&#xff0c;我们采用了以下硬件&#xff0c;请大…

CRM系统软件不好用有哪些原因?如何选择?

CRM系统的实施也会出现无法落地使用的情况&#xff0c;让CRM系统软件名存实亡。这不仅仅只是个例&#xff0c;很多企业即使投入了很大成本&#xff0c;也不能让CRM系统真正用起来。CRM系统软件用不起来&#xff0c;可以排查这三个原因&#xff0c;教你解决&#xff01; 1.操作…

简单粗暴实现el-input只允许输入数字

<el-input input"phoneNumberphoneNumber.replace(/[^0-9.]/g,)" v-model"phoneNumber" maxlength"11" > </el-input> 如果加入type"number"&#xff0c;会在输入框右侧出现这个恶心的东西 尽管可以使用样式来屏蔽掉 …

基于ArcGIS Pro、Python、USLE、R、INVEST模型等多技术融合的生态系统服务构建生态安全格局

目录 基于ArcGIS Pro、Python、USLE、INVEST模型等多技术融合的生态系统服务构建生态安全格局 第一章 生态安全评价理论及方法介绍 第二章 平台基础 第三章 数据获取与清洗 第四章 基于USLE模型的土壤侵蚀评价 第五章 基于风蚀修正模型的防风固沙功能评估 第六章 水源涵…

联想集团财报:收入持续下滑,联想集团财务前景已恶化

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 联想集团2023财年第三季度财务业绩回顾 联想集团&#xff08;00992&#xff09;于2023年2月16日盘后公布了该公司2023财年第三季度的财报。 财报显示&#xff0c;联想集团的收入已经从2022财年第三季度的201.27亿美元下降到…

西门子PLC如何实现1主多从网口无线通讯

常规来说&#xff0c;多台plc要实现以太网无线连接&#xff0c;首先要先确定以太网线必须正确连接&#xff0c;并建立物理连接。然后需要在PLC端设置好IP地址&#xff0c;以使不同PLC以相同协议可以实现通信交流。最后是建立PLC端数据采集及交换系统&#xff0c;要求在PLC端设置…

一篇必读的物联网平台物模型开发指南,为你解锁未来科技趋势

《高并发系统实战派》-- 值得拥有 文章目录 一、什么是物模型&#xff1f;二、为什么要设计物模型&#xff1f;三、如何设计物模型&#xff1f;设备属性的设计设备服务的设计设备事件的设计 四、物模型案例五、不设计物模型会有什么影响&#xff1f;六、总结 设计物模型可以使物…

热烈欢迎CSDN副总裁邹欣老师入驻知识星球

重磅消息 CSDN 副总裁 邹欣 老师成功入驻知识星球 —— 英雄算法联盟&#xff0c;成为合伙人之一。 这将是未来几年内&#xff0c;IT界最震撼的一次合作&#xff01;我相信就算现在不是&#xff0c;将来必定是&#xff01; 当然&#xff0c;这对我来说也是一种极大的鼓舞&#…

C语言实现“队列“

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏: &#x1f354;&#x1f35f;&#x1f32f;C语言进阶 &#x1f511;个人信条: &#x1f335;知行合一 &#x1f349;本篇简介:>:分享数据结构之C语言实现"队列".各个接口分别分析…

回归预测 | MATLAB实现SSA-DELM和DELM麻雀算法优化深度极限学习机多输入单输出回归预测对比

回归预测 | MATLAB实现SSA-DELM和DELM麻雀算法优化深度极限学习机多输入单输出回归预测对比 目录 回归预测 | MATLAB实现SSA-DELM和DELM麻雀算法优化深度极限学习机多输入单输出回归预测对比效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 Matlab实现SSA-DELM和D…

突破极限:YOLO9000 论文解读 - 构建更好、更快、更强大的实时检测系统

YOLOv2 论文全篇完整翻译 摘要 我们介绍了YOLO9000&#xff0c;这是一种先进的、实时的目标检测系统&#xff0c;可以检测超过9000个物体类别。首先&#xff0c;我们对YOLO检测方法进行了各种改进&#xff0c;包括新颖的方法和借鉴自先前工作的方法。改进后的模型YOLOv2在标准…

港科夜闻|叶玉如校长在大湾区科学论坛主论坛发表「为应对人口老龄化贡献大湾区力量」主旨演讲...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、叶玉如校长在大湾区科学论坛主论坛发表「为应对人口老龄化贡献大湾区力量」主旨演讲。她指出&#xff0c;中国已成为世界上老年人口最多、老龄化速度最快的国家之一&#xff0c;预计到2025年&#xff0c;65岁及以上人口3…

亚马逊云科技:点燃云原生数据库创新的星星之火

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 近10年&#xff0c;全球数据库市场加速变革&#xff0c;云数据库尤其是云原生数据库成为整个数据库市场的关键变量。某种程度上&#xff0c;亚马逊云科技作为全球云原生数据库的领导者&#xff0c;具有行业风向标的价值。 近…

2023.5.19Redis和MongoDB安装

四种数据库设置 hbase(main):001:0> create student,Sname,Ssex,Sage,Sdept,course Created table student Took 2.4760 seconds > Hbase::Table - student hbase(main):002:0> list TABLE …

性能测试——系统性能数据收集和Prometheus 监控系统部署应用实战

系统性能数据收集和Prometheus 监控系统部署应用实战 一、部署性能监控工具 node-exporter1、拉取镜像2、启动容器&#xff1a;3、配置prometheus.yml4、重启prometheus系统&#xff0c;检查node-exporter targets数据是否显示正常 二、Prometheus 监控系统部署应用实战1、实战…

盘点IntelliJ IDEA 中的“快速”功能,你知道几个?

IntelliJ IDEA&#xff0c;是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具&#xff0c;尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能是非常强大的。 Int…

HTML+CSS实训——Day02——仿一个网易云音乐的登陆界面

前言 今天要继续完成我们的音乐软件了&#xff0c;昨天写完了封面&#xff0c;今天该完成开屏广告和登陆界面了。 登陆界面代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-C…

短视频矩阵源码核心研发接口

1.短视频矩阵源码涉及了多种接口&#xff0c;包括但不限于视频上传、视频播放、视频推荐、用户管理、评论管理、点赞管理等。其中视频上传接口用于将用户上传的视频数据进行处理和存储&#xff1b;视频播放接口用于向用户展示视频内容并提供播放操作&#xff1b;视频推荐接口用…

springboot 集成 Swagger2(速通)

目录 1. 概述2. 案例 13. UI 的简单使用4. 简单配置 Docket 对象1. 配置文档的描述信息2. 定义包扫描规则 5. 指定接口不生成文档1. 自定义注解2. 路径匹配 6. 常用注解 1. 概述 简单理解——代写接口文档的框架&#xff0c;可跟随接口修改实时更新。 Open API 格式&#xff…