SpringMVC:SpringMVC简介快速入门案例(1)

news2025/1/23 7:20:43

SpringMVC简介&&快速入门

  • 1. SpringMVC概述
  • 2. SpringMVC快速入门案例
    • 2.1:创建web工程(Maven结构)
    • 2.2:导入坐标(SpringMVC,Servlet)
    • 2.2:设置tomcat服务器,加载web工程(tomcat插件)
    • 2.4 创建SpringMVC配置类
    • 2.5:定义处理请求的功能类(==UserController==)
    • 2.6:将SpringMVC设定加载到Tomcat容器中
    • 2.7:在浏览器中测试访问
  • 3. 入门案例总结与工作流程解析
    • 3.1:入门案例总结
    • 3.2:工作流程解析
      • 3.2.1:启动服务器初始化过程
      • 3.2.2:单次请求过程

1. SpringMVC概述

SpringMVC是一种基于Java实现MVC模型的轻量级Web框架

  • 使用简单、开发便捷(相比于Servlet)
  • 灵活性强

SpringMVC主要负责的就是

  • controller如何接收请求和数据
  • 如何将请求和数据转发给业务层
  • 如何将响应数据转换成json发回到前端

web程序大都基于三层架构来实现

在这里插入图片描述

  • 将后端服务器Servlet拆分成三层,分别是web/controllerservicedao/mapper解耦合
  • web/controller层主要由servlet来处理,负责页面请求和数据的收集以及响应结果给前端;
  • service层主要负责业务逻辑的处理;
  • dao/mapper层主要负责数据的增删改查操作;

2. SpringMVC快速入门案例

2.1:创建web工程(Maven结构)

创建方式参考文章Tomcat + Maven创建Web项目 + 在IDEA中使用Tomcat:https://lushimeng.blog.csdn.net/article/details/125239813

在这里插入图片描述

2.2:导入坐标(SpringMVC,Servlet)

  <dependencies>
        <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>
    </dependencies>

2.2:设置tomcat服务器,加载web工程(tomcat插件)

pom.xml中添加tomcat插件

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <port>8080</port>  <!--http://127.0.0.1:8080/xxx-->
                    <path>/</path>
                </configuration>
            </plugin>
        </plugins>
    </build>

在这里插入图片描述

2.4 创建SpringMVC配置类

package com.itheima.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

/**
 * @Author Mr.Lu
 * @Date 2022/12/14 16:56
 * @ClassName SpringMvcConfig
 * @Version 1.0
 */
@Configuration
@ComponentScan("com.itheima.controller")
public class SpringMvcConfig {
}

2.5:定义处理请求的功能类(UserController)

package com.itheima.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @Author Mr.Lu
 * @Date 2022/12/14 16:58
 * @ClassName UserController
 * @Version 1.0
 */
@Controller
public class UserController {
    /**
     * RequestMapping:设置当前操作的访问路径
     * ResponseBody:设置当前操作的返回类型
     * @return
     */
    @RequestMapping("/save")
    @ResponseBody
    public String save(){
        System.out.println("user save ...");
        return "{'info':'springMvc'}";
    }


    @RequestMapping("/delete")
    @ResponseBody
    public String delete(){
        System.out.println("user delete ...");
        return "{'info':'springMvc delete'}";
    }
}

2.6:将SpringMVC设定加载到Tomcat容器中

将webapp下的web.xml删除,换成config目录下的ServletContainersInitConfig类

package com.itheima.config;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;

/**
 * @Author Mr.Lu
 * @Date 2022/12/14 16:59
 * @ClassName ServletContainersInitConfig
 * @Version 1.0
 */
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {

    /**
     * 加载springmvc配置类
     * @return
     */
    @Override
    protected WebApplicationContext createServletApplicationContext() {
        // 加载springmvc配置类
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        // 加载指定配置类
        ctx.register(SpringMvcConfig.class);
        return ctx;
    }

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

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

2.7:在浏览器中测试访问

运行tomact:在2.2步配置了之后才会有,双击即可。

在这里插入图片描述

访问:http://localhost:8080/save

在这里插入图片描述

访问:http://localhost:8080/delete

在这里插入图片描述

注意事项

  • SpringMVC是基于Spring的,在pom.xml只导入了spring-webmvcjar包的原因是它会自动依赖spring相关坐标
  • AbstractDispatcherServletInitializer类是SpringMVC提供的快速初始化Web3.0容器的抽象类
  • AbstractDispatcherServletInitializer提供了三个接口方法供用户实现
    • createServletApplicationContext方法,创建Servlet容器时,加载SpringMVC对应的bean并放入WebApplicationContext对象范围中,而WebApplicationContext的作用范围为ServletContext范围,即整个web容器范围
    • getServletMappings方法,设定SpringMVC对应的请求映射路径,即SpringMVC拦截哪些请求
    • createRootApplicationContext方法,如果创建Servlet容器时需要加载非SpringMVC对应的bean,使用当前方法进行,使用方式和createServletApplicationContext相同。
    • createServletApplicationContext用来加载SpringMVC环境
    • createRootApplicationContext用来加载Spring环境

3. 入门案例总结与工作流程解析

3.1:入门案例总结

  • 一次性工作
    • 创建工程,设置服务器,加载工程
    • 导入坐标
    • 创建web容器启动类,加载SpringMVC配置,并设置SpringMVC请求拦截路径
    • SpringMVC核心配置类(设置配置类,扫描controller包,加载Controller控制器bean)
  • 多次工作
    • 定义处理请求的控制器类(controller包下的控制类)
    • 定义处理请求的控制器方法,并配置映射路径(@RequestMapping)与返回json数据(@ResponseBody)

3.2:工作流程解析

3.2.1:启动服务器初始化过程

  1. 服务器启动,执行ServletContainersInitConfig类,初始化web容器.在这里插入图片描述

  2. 执行createServletApplicationContext方法,创建了WebApplicationContext对象。该方法加载SpringMVC的配置类SpringMvcConfig来初始化SpringMVC的容器。在这里插入图片描述

  3. 加载SpringMvcConfig配置类。在这里插入图片描述

  4. 执行@ComponentScan加载对应的bean。扫描指定包及其子包下所有类上的注解,如Controller类上的@Controller注解。

  5. 加载UserController,每个@RequestMapping的名称对应一个具体的方法。此时就建立了 /save 和 save方法的对应关系。在这里插入图片描述

  6. 执行getServletMappings方法,设定SpringMVC拦截请求的路径规则。其中/代表所拦截请求的路径规则,只有被拦截后才能交给SpringMVC来处理请求。在这里插入图片描述

3.2.2:单次请求过程

  1. 发送请求http://localhost:8080/save.
  2. web容器发现该请求满足SpringMVC拦截规则,将请求交给SpringMVC处理.
  3. 解析请求路径/save.
  4. 由/save匹配执行对应的方法save().
    • 上面的第五步已经将请求路径和方法建立了对应关系,通过/save就能找到对应的save方法.
  5. 执行save().
  6. 检测到有@ResponseBody直接将save()方法的返回值作为响应体返回给请求方.

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

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

相关文章

前缀和(C++)实现

每日一句&#xff1a;真正让人变好的选择过程都不会很舒服&#xff0c;所以人们明知道什么都不做&#xff0c;会比较轻松&#xff0c;但依旧选择追逐梦想。 前缀和前言一、一维前缀和1.前缀和是什么&#xff1f;2.暴力做法3.前缀和求区间大小3.1如何构成前缀和的形式&#xff1…

基于RS485组网的温湿度物联网监测系统

随着现代设备的高速发展&#xff0c;作为设备机械的“电子眼”&#xff0c;各类传感器越来越多的应用到我们的生活和工作中&#xff0c;食品行业、档案管理、温室大棚、动物养殖、药品存储、等行业都温湿度传感器的身影。通过连接传感器实现远程监测的物联网系统&#xff0c;极…

高并发编程之ThreadPool 线程池

10 ThreadPool 线程池 10.1 线程池简介 线程池&#xff08;英语&#xff1a;thread pool&#xff09;&#xff1a;一种线程使用模式。线程过多会带来调度开销&#xff0c; 进而影响缓存局部性和整体性能。而线程池维护着多个线程&#xff0c;等待着监督管理 者分配可并发执…

MATLAB添加多种噪声(在GUI中)

目录 1.添加椒盐噪声 2.添加高斯噪声 3.添加乘性噪声 4.添加泊松噪声 1.添加椒盐噪声 function button_jiaoyan_Callback(hObject, eventdata, handles)%添加椒盐噪声 axes(handles.show_proImg); global fpath; img_2imread(fpath); img_2rgb2gray(img_2); img_2imnoise(im…

[附源码]计算机毕业设计的手机电商网站Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis MavenVue等等组成&#xff0c;B/S模式…

leetcode每天5题-Day56-动态规划2

目录1. 整数拆分2. 不同的二叉搜索树3.1. 整数拆分 343. 整数拆分-中等 讲解 动规 思路&#xff1a;拆分一个数 n 使之乘积最大&#xff0c;那么一定是拆分m个成近似相同的子数相乘才是最大的。 动规五部曲; ①确定dp数组&#xff08;dp table&#xff09;以及下标的含义 …

【数集项目之 MCDF】(五) 最终整合:MCDF顶层文件

根据前面几章的介绍&#xff0c;我们已经大致完成了MCDF的子模块设计和波形测试&#xff0c;分别是control_regisyer、slave_FIFO、arbiter、formatter。   当然&#xff0c;由于握手机制等一些信号检查在顶层模块中&#xff0c;更容易进行检查&#xff0c;也容易进行调整各个…

jsp+ssm计算机毕业设计 宠物医院管理系统【附源码】

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JSPSSM mybatis Maven等等组成&#xff0c;B/S模式 Mave…

如何在加密市场中快人一步?

链上数据的透明度让任何人都能看到发生的关键事件&#xff0c;但行业内很少有人充分利用这一点&#xff0c;而大多数是在事件已经影响到他们的投资组合后才能做出反应。 然而&#xff0c;在这个行业中&#xff0c;一笔钱的转移就能把未知的项目变成独角兽&#xff0c;或者让价值…

【MATLAB教程案例61】使用matlab实现基于ResNet残差网络的数据分类仿真分析

欢迎订阅《FPGA学习入门100例教程》、《MATLAB学习入门100例教程》 目录 1.软件版本 2.ResNet残差网络理论概述

基于jsp+mysql+ssm长诗圣地美食交流分享平台-计算机毕业设计

项目介绍 虽然现在各类美食网站犹如雨后春笋一般&#xff0c;一个一个的发展起来&#xff0c;但是综合性不强&#xff0c;有的只是介绍各类美食的做法&#xff1b;有的只是美食的营销&#xff1b;有的只是人们对于美食的评论。为了适应当代社会的需求&#xff0c;本系统的研究…

艾美捷CD8α体内抗体特异性及相关研究

艾美捷CD8α体内抗体特点&#xff1a; 1.研究可靠 2.可实现快速生产 3.首-次实验即可成功&#xff0c; 经过大量验证确认了特异性 艾美捷ichorbio抗CD8a体内抗体-低内毒素&#xff08;2.43&#xff09;是在符合cGMP的ISO质量标准9001:2015设施中生产的。ichorbio低内毒素抗体…

计算机毕业设计node.js+vue+Element电商后台管理系统

项目介绍 网络的广泛应用给生活带来了十分的便利。所以把电商后台管理与现在网络相结合,利用node技术建设电商后台管理系统,实现电商后台管理的信息化。则对于进一步提高电商后台管理发展,丰富电商后台管理经验能起到不少的促进作用。 电商后台管理系统能够通过互联网得到广泛…

正则的扩展

RegExp() 在es5中&#xff0c;RegExp的构造函数参数有两种情况 1、字符串 2、正则表达式 // 第一种情况 let regex new RegExp(abc, i)// 第二种情况 let regex2 /abc/i这两种情况是等价的 let s abc regex.test(s) regex2.test(s); // true在es5中这两种方式不能混用&a…

图解设计模式:动动手玩转迭代器模式

前言 &#x1f4e3; &#x1f4e3; &#x1f4e3; &#x1f4e2;&#x1f4e2;&#x1f4e2; ☀️☀️点开就是缘分认识一下&#xff0c;我是小冷。是一个兴趣驱动自学练习两年半的的Java工程师。 &#x1f4d2; 一位十分喜欢将知识分享出来的Java博主⭐️⭐️⭐️&#xff0c;…

JavaSE04

形参或者返回值是类名的话&#xff1a;方法的形参是类名&#xff0c;其实是需要的类名的对象。方法的返回值是类名的话&#xff0c;其实返回的是对象。 接口名 作为形参或者 方法的返回值&#xff1a;主要对应的是接口的实现类对象。 内部类的特点:内部类可直接访问外部类的成…

Unity中的C#脚本都继承了Monobehaviour类(Monobehaviour类的分析)

1、Monobehaviour类 Unity中的脚本都是继承Monobehaviour&#xff0c;定义了脚本的基本行为。必然是继承. 我们之前所熟知的声明周期函数。 除了必然事件&#xff0c;还定义了对各种特定事件的相应函数&#xff0c;均已On开头 MonoBehaviour中的事件响应函数都是已On开头的&am…

1 CPP11基础篇(快速学习)

另外还有 long double 不少于double 不低于double 注意&#xff1a; 在VS和Linux中 long double占用的内存空间分别是8和16个字节 c11原始字面量 void的关键字 在C中&#xff0c;void表示为无类型 主要有3个用途 1、函数的返回值用void 表示函数没有返回值 2、函数的参数填…

修改oracle11g的awr快照参数

1、select * from v$version; 2、select * from dba_hist_wr_control; 检查当前系统的保留时间为8天,1小时采样一次. 3、这里设置每半个小时收集一次&#xff0c; 收集到的数据保留15天&#xff0c;单位都是秒。 exec dbms_workload_repository.modify_snapshot_settings(ret…

[附源码]计算机毕业设计的图书互换系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis MavenVue等等组成&#xff0c;B/S模式…