SpringMVC概述、SpringMVC的工作流程、创建SpringMVC的项目

news2024/12/23 8:11:51

在这里插入图片描述

🐌个人主页: 🐌 叶落闲庭
💨我的专栏:💨
c语言
数据结构
javaweb

石可破也,而不可夺坚;丹可磨也,而不可夺赤。


Spring MVC入门

  • 一、Spring MVC概述
  • 二、入门案例
    • 2.1导入Spring MVC坐标与Servlet坐标
    • 2.2创建Spring MVC控制器类(等同于Servlet功能)
    • 2.3初始化Spring MVC环境(同Spring环境)
    • 2.4初始化Servlet容器,加载Spring MVC环境
  • 三、入门案例工作流程
  • 四、Controller加载控制
    • 4.1Controller加载控制与业务bean加载控制
    • 4.2bean的加载格式
  • 总结

一、Spring MVC概述

web程序工作流程:web程序通过浏览器访问页面,前端页面使用异步提交的方式发送请求到后端服务器,后端服务器采用表现层、业务层、数据层的三层架构的形式进行开发,页面发送的请求,由表现层接收,获取用户的请求参数号将参数传递到业务层,再由业务层访问数据层,得到用户需要访问的数据后,将数据返回给表现层,表现层拿到数据后,将数据转换成json格式发送给前端页面,前端页面接收数据后解析数据并组织成用户浏览的最终页面信息交给浏览器。

  • Spring MVC是一种基于Java实现的MVC模型的轻量级Web框架
  • 优点
      • 使用简单,开发便捷(相比于Servlet)
      • 灵活性强

二、入门案例

2.1导入Spring MVC坐标与Servlet坐标

<dependencies>
    <!--导入springmvc与servlet坐标-->
    <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创建Spring MVC控制器类(等同于Servlet功能)

//2.定义Controller,使用@Controller定义bean
@Controller
public class UserController {
    //2.1设置当前操作的访问路径
    @RequestMapping("/save")
    //2.2设置当前操作的返回值类型
    @ResponseBody
    public String save() {
        System.out.println("user save...");
        return "{'module':'springmvc'}";
    }
}

2.3初始化Spring MVC环境(同Spring环境)

  • 设定Spring MVC加载对应的bean
//3.创建Springmvc配置文件,加载controller对应的bean
@Configuration
@ComponentScan("com.practice.controller")
public class SpringMvcConfig {
}

2.4初始化Servlet容器,加载Spring MVC环境

  • 设置Spring MVC技术处理的请求
package com.practice.config;

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

/**
 * @Author YJ
 * @Date 2023/8/3 11:01
 * Description:定义一个Servlet容器启动的配置类,在里面加载spring配置
 */
public class ServletContainsInitConfig extends AbstractDispatcherServletInitializer {
    /**
     * 加载springmvc容器配置
     *
     * @return
     */
    @Override
    protected WebApplicationContext createServletApplicationContext() {
        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;
    }
}

在这里插入图片描述
在这里插入图片描述


  • AbstractDispatcherServletInitializer类是SpringMVC提供的快速初始化Web3.0容器的抽象类
  • AbstractDispatcherServletInitializer提供三个接口方法供用户实现
      • createServletApplicationContext()方法,创建Servlet容器时,加载SpringMVC对应的bean并放入
      • WebApplicationContext对象范围中,而WebApplicationContext的作用范围为ServletContext容器范围
protected WebApplicationContext createServletApplicationContext() {
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(SpringMvcConfig.class);
        return ctx;
    }
  • getServletMappings()方法,设定SpringMVC对应的请求映射路径,设置为“/”表示拦截所有请求,任意请求都将转入到SpringMVC进行处理
protected String[] getServletMappings() {
        return new String[]{"/"};
    }

三、入门案例工作流程

  • 1.服务器启动,执行ServletContainsInitConfig类,初始化web容器
public class ServletContainsInitConfig extends AbstractDispatcherServletInitializer
  • 2.执行createServletApplicationContext方法,创建了WebApplicationContext对象
protected WebApplicationContext createServletApplicationContext() {
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(SpringMvcConfig.class);
        return ctx;
    }
  • 3.加载SpringMvcConfig
@Configuration
@ComponentScan("com.practice.controller")
public class SpringMvcConfig {
}
  • 4.执行@ComponentScan加载对应的bean
@ComponentScan("com.practice.controller")
  • 5.加载UserController,每个@RequestMapping的名称对应一个具体的方法
@Controller
public class UserController {
    //2.1设置当前操作的访问路径
    @RequestMapping("/save")
    //2.2设置当前操作的返回值类型
    @ResponseBody
    public String save() {
        System.out.println("user save...");
        return "{'module':'springmvc'}";
    }
}
  • 6.执行getServletMappings方法,定义所有的请求都通过SpringMVC
@Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

四、Controller加载控制

4.1Controller加载控制与业务bean加载控制

  • SpringMVC相关bean(表现层bean)

  • Spring控制的bean

    • 业务bean(Service)
    • 功能bea(DataSource等)
  • SpringMVC相关bean加载控制

    • SpringMVC加载的bean对应的包均在com.practice.controller包内
  • Spring相关bean加载控制

    • 方式一:Spring加载的bean设定扫描范围为com.practice,排除controller包内的bean
    • 方式二:Spring加载的bean设定扫描范围为精准范围,例如service包、dao包等
    • 方式三:不区分Spring和SpringMVC环境,加载到同一环境中。
  • 名称:@ComponentScan

  • 类型:类注解

  • 范例:

@ComponentScan(value = "com.practice",
        excludeFilters = @ComponentScan.Filter(
        type = FilterType.ANNOTATION,
        classes = Controller.class
)
)
public class SpringConfig {
}
  • 属性
    • excludeFilters:排除扫描路径中加载的bean,需要指定类别(type)与具体项(classes)
    • includeFilters:加载指定的bean,需要制定类别(type)与具体项(classes)

4.2bean的加载格式

package com.practice.config;

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

/**
 * @Author YJ
 * @Date 2023/8/3 11:01
 * Description:定义一个Servlet容器启动的配置类,在里面加载spring配置
 */
public class ServletContainsInitConfig extends AbstractDispatcherServletInitializer {
    /**
     * 加载springmvc容器配置
     *
     * @return
     */
    @Override
    protected WebApplicationContext createServletApplicationContext() {
        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() {
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(SpringConfig.class);
        return ctx;
    }
}

  • 简化开发:
public class ServletContainsInitConfig 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[]{"/"};
    }

总结

本文介绍了SpringMVC的概念及如何创建SpringMVC的项目。 欢迎各位小伙伴点赞+关注!!!

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

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

相关文章

【宝藏系列】Linux 常用磁盘管理命令详解

【宝藏系列】Linux 常用磁盘管理命令详解 文章目录 【宝藏系列】Linux 常用磁盘管理命令详解前言1️⃣ df2️⃣du3️⃣fdisk&#x1f4df;磁盘格式化&#x1f4e0;磁盘检验⌨️磁盘挂载与卸除&#x1f4c0;卸载/dev/hdc6 前言 Linux磁盘管理常用三个命令为df、du和fdisk。 df…

Java框架(九)--Spring Boot入门(1)

SpringBoot 2.x入门简介 学前基础 Maven Spring MVC理念 开发环境 Spring Boot官网版本介绍 https://spring.io/projects/spring-boot#learn 我们点击 Reference Doc. &#xff0c;再点击Getting Started&#xff0c;就可以看到官网系统环境说明了 官网系统环境说明 Sp…

Nginx安装和Nginx配置虚拟主机

Nginx安装 源码包获取地址&#xff1a;http://nginx.org/download/ RPM包获取地址&#xff1a;http://nginx.org/packages/centos/7Server/x86_64/RPMS/ RPM安装 这里选择的RPM包是 nginx-1.22.0-1.el7.ngx.x86_64.rpm [rootlocalhost ~]# yum install nginx-1.22.0-1.el7.…

RabbitMQ:概念和安装,简单模式,工作,发布确认,交换机,死信队列,延迟队列,发布确认高级,其它知识,集群

1. 消息队列 1.0 课程介绍 1.1.MQ 的相关概念 1.1.1.什么是MQ MQ(message queue&#xff1a;消息队列)&#xff0c;从字面意思上看&#xff0c;本质是个队列&#xff0c;FIFO 先入先出&#xff0c;只不过队列中存放的内容是message 而已&#xff0c;还是一种跨进程的通信机制…

k8s集群部署nacos,采用的是 emptyDir 临时目录挂载

官方参考地址&#xff1a;https://nacos.io/zh-cn/docs/use-nacos-with-kubernetes.html 说明&#xff1a; 1、官网采用的nfs持久化部署 我将nacos持久化改成 emptyDir 临时目录挂载&#xff0c;同时又能满足自行调节nacos集群实例数。 2. emptyDir 临时目录挂载的nacos.ya…

记录 Vue3 + Ts 类型使用

阅读时长: 10 分钟 本文内容&#xff1a;记录在 Vue3 中使用 ts 时的各种写法. 类型大小写 vue3 ts 项目中&#xff0c;类型一会儿大写一会儿小写。 怎么区分与基础类型使用? String、string、Number、number、Boolean、boolean … 在 js 中&#xff0c; 以 string 与 String…

TS协议之PAT(节目关联表)

1. 概要 PAT&#xff1a;节目关联表&#xff0c;与PMT成对出现&#xff0c;包含所有的频道编号&#xff1b;是解析ts数据的起点。 PAT数据结构如下&#xff1a; PAT数据结构 字段分析&#xff1a; TS头&#xff1a;参考TS协议之PES&#xff08;数据包&#xff09;&#xf…

Cpp学习——模板

模板&#xff1f; 目录 模板&#xff1f; 1.介绍 2.函数模板的使用 3.函数模板的强制转换or显式调用 四,模板的分类 1.介绍 在Cpp3.0中&#xff0c;祖师爷便引入了模板的概念。这是一个重大的变革&#xff0c;为后来的Cpp标准化打下了铺垫。也正是因为有了模板&#xff0…

centos命令

1 使用 ps 命令查看 Redis 进程&#xff1a; ps -ef | grep redis如果 Redis 正在运行&#xff0c;你将会看到类似如下的输出&#xff1a; redis 1234 1 0 Jul28 ? 00:00:00 /usr/bin/redis-server 127.0.0.1:6379如果 Redis 没有运行&#xff0c;你将不会看…

【第一阶段】kotlin的when表达式

1.Java 的if /when是语句 kotlin的if/when是表达式&#xff0c;表达式是有返回值的 java中void是个关键字&#xff0c;Unit在kotlin中是个类 2.当使用when语句的时候必须有一个不满足的值即else: fun main() {var week:Int5val info when(week){1->"今天是星期一"…

0803|IO进程线程day6 【线程】概念+相关函数

一、线程的概念 1.1 什么是线程&#xff1f; 1&#xff09;线程是一个进程并发执行多种任务的机制。 并发&#xff1a; 单核cpu多个任务同时运行。cpu以ms级别的速度进程进程调度&#xff0c;切换进程和线程。 串行、并发、并行&#xff1a; 并行&#xff1a;多个任务在多核C…

数据结构—树和二叉树

5.树和二叉树 5.1树和二叉树的定义 树形结构&#xff08;非线性结构&#xff09;&#xff1a;结点之间有分支&#xff0c;具有层次关系。 5.1.1树的定义 树&#xff08;Tree&#xff09;是n&#xff08;n≥0&#xff09;个结点的有限集。 若n0&#xff0c;称为空树&#x…

链表的总体涵盖以及无哨兵位单链表实现——【数据结构】

&#x1f60a;W…Y&#xff1a;个人主页 在学习之前看一下美丽的夕阳&#xff0c;也是很不错的。 如果觉得博主的美景不错&#xff0c;博客也不错的话&#xff0c;关注一下博主吧&#x1f495; 在上一期中&#xff0c;我们说完了顺序表&#xff0c;并且提出顺序表中的问题 1. 中…

C++ ------ 类和对象的深究

文章目录 构造函数初始化列表概念特性 explicit关键字 static成员概念特点 友元友元函数友元类概念特性 内部类概念特点 匿名对象拷贝对象时的一些编译器优化 构造函数 我们来看下面的代码&#xff1a; #include <iostream> using namespace std;class Date { public:D…

三周目创作纪念日

机缘收获日常成就憧憬 机缘 最初成为创作者的初心 实战项目中的经验分享日常学习过程中的记录通过文章进行技术交流 收获 在创作的过程中都有哪些收获 获得了很多粉丝的关注获得了很多正向的反馈&#xff0c;如赞、评论、阅读量等认识了很多志同道合的领域同行 日常 当前创…

【零基础学Rust | 基础系列 | Hello, Rust】编写并运行第一个Rust程序

文章目录 前言一&#xff0c;创建项目二&#xff0c;两种编译方式1. 使用rustc编译器编译2. 使用Cargo编译 总结 前言 在开始学习任何一门新的编程语言时&#xff0c;都会从编写一个简单的 “Hello, World!” 程序开始。在这一章节中&#xff0c;将会介绍如何在Rust中编写并运…

CSS学习记录(基础笔记)

CSS简介: CSS 指的是层叠样式表* (Cascading Style Sheets)&#xff0c;主要用于设置HTML页面的文字内容&#xff08;字体、大小、对齐方式&#xff09;&#xff0c;图片的外形&#xff08;边框&#xff09; CSS 描述了如何在屏幕、纸张或其他媒体上显示 HTML 元素 CSS 节省…

JVM面试题--实践

目录 JVM 调优的参数可以在哪里设置参数值 war包部署在tomcat中设置 jar包部署在启动参数设置 JVM 调优的参数都有哪些&#xff1f; 设置堆空间大小 虚拟机栈的设置 年轻代中Eden区和两个Survivor区的大小比例 年轻代晋升老年代阈值 设置垃圾回收收集器 JVM 调优的工…

《高质量数字化转型产品及服务全景图(2023上半年度)》希尔贝壳成功入选

2023年7月27日&#xff0c;由中国信息通信研究院泰尔终端实验室主办的2023数字生态发展大会暨中国信通院“铸基计划”年中会议在北京成功召开。在本次会上&#xff0c;中国信通院重磅发布《高质量数字化转型产品及服务全景图&#xff08;2023上半年&#xff09;》&#xff0c;希…

MySQL索引1——基本概念与索引结构(B树、R树、Hash等)

目录 索引(INDEX)基本概念 索引结构分类 BTree树索引结构 Hash索引结构 Full-Text索引 R-Tree索引 索引(INDEX)基本概念 什么是索引 索引是帮助MySQL高效获取数据的有序数据结构 为数据库表中的某些列创建索引&#xff0c;就是对数据库表中某些列的值通过不同的数据结…