【SpringMVC】SpringMVC 快速入门

通常,Web 应用的工作流程如下:

  1. 用户通过浏览器访问前端页面;

  2. 前端页面通过异步请求向后端服务器发送数据;

  3. 后端采用“表现层-业务层-数据层”三层架构进行开发:

    • 表现层接收页面请求
    • 将请求参数传递给业务层
    • 业务层访问数据层,获取所需的用户数据
  4. 表现层将用户数据转换为 JSON 格式,并返回给前端;

  5. 前端接收并解析数据,将其组织成最终页面信息,再发送给浏览器展示。

在这里插入图片描述

在这个后端架构中,表现层过去使用 Servlet 技术进行开发,现在则采用了 SpringMVC 技术作为替代。SpringMVC 是一个基于 Java 实现 MVC 模型的轻量级 Web 框架,相比于传统的 Servlet,SpringMVC 具有以下优点:

  • 使用简单:开发人员可以更快速地上手,减少了学习成本
  • 灵活性强:能够更方便地适应不同业务需求,支持多种配置和扩展方式

快速入门

使用 SpringMVC 框架的开发主要分为四个步骤。在此之前,首先创建一个新项目。这里使用 IDEA 创建一个新的 Module,Archetype 选择 maven-archetype-webapp

在这里插入图片描述

在新创建项目基础上,对项目进行瘦身:调整 pom.xml 文件中的内容,删除非必须项和 webapp/WEB-INF 下的 web.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.it</groupId>
  <artifactId>spring_mvc_01</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
  </properties>

  <dependencies>
  </dependencies>
  
</project>

接着,打开 Project Structure,在 src 文件夹下创建源码目录。右键 main 目录,选择 New Folder 创建 java 文件夹,将 java 文件夹指定成源码目录(选中 java 文件夹,点击 Mark as 处的 source):

在这里插入图片描述

(1)导入 SpringMVC、Servlet 坐标和 Tomcat 插件

SpringMVC 项目需要引入相关的依赖和插件。在 pom.xml 文件中导入 SpringMVC、Servlet 坐标依赖和 Tomcat 插件。注意:为了防止 Servlet 导入与 Tomcat 插件之间存在冲突,这里将 scope 项配置成 provided

<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>
<build>
    <plugins>
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <port>8080</port>
          <path>/</path>
        </configuration>
      </plugin>
    </plugins>
</build>

(2)创建 SpringMVC 控制器类

java 文件夹下创建 com.it.controller.UserController 类。在该类基础上:

  1. 使用 @Controller 将类声明为 Bean 对象;
  2. 定义处理请求的方法,这里以返回 String 类型的 save 方法为例;
  3. 使用 @RequestMapping 设置当前处理方法的访问路径;
  4. 使用 @ResponseBody 设置当前控制器方法响应内容为当前返回值,无需解析,即将 save 方法返回的内容整体作为响应的内容:
@Controller
public class UserController {
    @RequestMapping("/save")
    @ResponseBody
    public String save() {
        System.out.println("user save ...");
        return "{'module': 'springmvc'}";
    }
}

(3)设置 SpringMVC 加载对应的 Bean 对象

首先,在 com.it.config 下创建 SpringMvcConfig 类。接着,使用 @Configuration 指定该类为配置类,再使用 @ComponentScan 指定需要扫描的包,以此加载 controller 对应的 Bean 对象:

@Configuration
@ComponentScan("com.it.controller")
public class SpringMvcConfig {
}

(4)设置 Tomcat 启动配置,加载 SpringMvcConfig 类

在 com.it.config 中定义一个 Servlet 容器启动的配置类 InitConfig,并且在该类中加载 Spring 和 SpringMVC 的配置。InitConfig 配置类需要继承 AbstractDispatcherServletInitializer 类,并实现三个抽象方法:

  1. createServletApplicationContext 方法中加载 SpringMVC 配置;
  2. getServletMappings 方法中设置归属 SpringMVC 处理的请求路径;
  3. WebApplicationContext 方法中加载 Spring 配置:
public class InitConfig extends AbstractDispatcherServletInitializer {
    // 用于加载 SpringMVC 容器配置
    @Override
    protected WebApplicationContext createServletApplicationContext() {
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(SpringMvcConfig.class);
        return ctx;
    }

    // 设置哪些请求归属 SpringMVC 处理
    @Override
    protected String[] getServletMappings() {
        // 设置所有的请求归属 SpringMVC 处理
        return new String[]{"/"};
    }

    // 加载 Spring 容器配置
    @Override
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }
}

完成上述四个步骤后,启动程序。点击 Add Configuration 创建 Run Configurations,设置 tomcat7:run

在这里插入图片描述

运行程序后,访问 http://localhost:8080/save,返回之前处理请求方法中的返回内容 {'module': 'springmvc'},则启动成功。

工作流程

在快速入门案例中,涉及到了启动服务器和单次请求发送的操作,工作流程如下:

(1)启动服务器初始化

  1. 服务器启动,执行 Initconfig 类,初始化 Web 容器
  2. 执行 createServletApplicationContext 方法,创建 WebApplicationcontext 对象
  3. 加载 SpringMvcConfig 配置类
  4. 执行 @Componentscan 加载对应的 Bean
  5. 加载 Usercontroller,每个 @RequestMapping 名称对应一个具体方法
  6. 执行 getservletMappings 方法,定义所有请求都通过 SpringMVC 框架

在这里插入图片描述

(2)发送单次请求

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如果你的网站是h5网站,如何将h5网站变成小程序-除开完整重做方法如何快速h5转小程序-h5网站转小程序的办法-优雅草央千澈

如果你的网站是h5网站&#xff0c;如何将h5网站变成小程序-除开完整重做方法如何快速h5转小程序-h5网站转小程序的办法-优雅草央千澈 h5如何转小程序 如果当年你们开发网站是用的h5但是没有开发小程序&#xff0c;也没有使用uniapp这样的混开框架&#xff0c;但是目前根据业务需…

C语言:位段

位段的内存分配: 1. 位段的成员可以是 int unsigned int signed int 或者是char &#xff08;属于整形家族&#xff09;类型 2. 位段的空间上是按照需要以4个字节&#xff08; 类型 int &#xff09;或者1个字节&#xff08; char &#xff09;的方式来开辟的。 3. 位段涉及…

如何在LabVIEW中更好地使用ActiveX控件?

在LabVIEW中&#xff0c;ActiveX控件可以帮助实现与其他应用程序或第三方组件的集成&#xff08;例如Microsoft Excel、Word、Internet Explorer等&#xff09;。以下是一些建议&#xff0c;帮助您更好地在LabVIEW中使用ActiveX控件&#xff1a; ​ 1. 理解ActiveX控件的基本原…

Speckly:基于Speckle文档的RAG智能问答机器人

前言 Speckly 是一个基于 检索增强生成 (RAG) 技术的智能问答机器人&#xff0c;它能像一位经验丰富的工程师&#xff0c;理解你的问题&#xff0c;并从 Speckle 文档中精准地找到答案。更厉害的是&#xff0c;它甚至可以帮你生成代码片段&#xff01;&#x1f680; 本文将详…

TencentOS 2.4 final 安装mysql8.0备忘录

准备 tencentOS 2.4 与Red Hat Enterprise Linux 7 是兼容的。 我们首先从oracle官网上下载mysql的源文件。 下载完成后你会得到以下文件&#xff1a; mysql84-community-release-el7-1.noarch.rpm 安装 首先你需要切换到root用户下。 1.安装源文件 yum localinstall my…

怎么在家访问公司服务器?

在日常工作中&#xff0c;特别是对信息技术从业者而言&#xff0c;工作往往离不开公司的服务器。他们需要定期访问服务器&#xff0c;获取一些关键的机密文件或数据。如果您在家办公&#xff0c;并且需要处理未完成的任务&#xff0c;同时需要从公司服务器获取所需的数据&#…

快速搭建springcloud 3.X+mybatis+nacos本地项目

环境&#xff1a; jdk17 idea 2019 springboot:3.2.4 spring-cloud:2023.0.1 大概记录下关键配置 1 创建父工程 创建项目 删除src目录 因为是父子结构不需要。 引入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"ht…

衣物褶皱织物褶皱检测数据集VOC+YOLO格式939张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;939 标注数量(xml文件个数)&#xff1a;939 标注数量(txt文件个数)&#xff1a;939 标注…

【C++】B2064 斐波那契数列

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述输入格式输出格式输入输出样例输入输出 &#x1f4af;思路分析**题目本质** &#x1f4af;代码实现与对比**我的代码实现**代码展示思路解析优点不足 **老师的代码…

springboot521基于Spring Boot的校园闲置物品交易系统(论文+源码)_kaic

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装校园闲置物品交易系统软件来发挥其高效地信息处理的作用&am…

el-table动态行和列及多级表头

主页面 <template><div class"result-wrapper"><dynamic-table :table-data"tableData" :table-header"tableConfig" :tableTitle"tableTitle" :flowParams"flowParams"></dynamic-table></div…

【MySQL】数据库 Navicat 可视化工具与 MySQL 命令行基本操作

&#x1f4af; 欢迎光临清流君的博客小天地&#xff0c;这里是我分享技术与心得的温馨角落 &#x1f4af; &#x1f525; 个人主页:【清流君】&#x1f525; &#x1f4da; 系列专栏: 运动控制 | 决策规划 | 机器人数值优化 &#x1f4da; &#x1f31f;始终保持好奇心&…

2024年12月30日Github流行趋势

项目名称&#xff1a;free-programming-books 项目地址url&#xff1a;https://github.com/EbookFoundation/free-programming-books项目语言&#xff1a;HTML历史star数&#xff1a;343,398今日star数&#xff1a;246项目维护者&#xff1a;vhf, eshellman, davorpa, MHM5000,…

Mysql数据库Redo日志和Undo日志的理解

数据库redo日志和undo日志 1、redo日志1.1 redo日志的作用1.1.1 不使用redo日志的问题1.1.2 使用redo日志的好处 1.2 redo日志刷盘策略 2、undo日志2.1 undo日志的作用2.2 undo日志的简要生成过程 1、redo日志 事务的4大特性&#xff08;ACID&#xff09;&#xff1a;原子性、…

Windows配置cuda,并安装配置Pytorch-GPU版本

文章目录 1. CUDA Toolkit安装2. 安装cuDNN3. 添加环境变量配置Pytorch GPU版本 博主的电脑是Windows11&#xff0c;在安装cuda之前&#xff0c;请先查看pytorch支持的版本&#xff0c;cuda可以向下兼容&#xff0c;但是pytorch不行&#xff0c;请先进入&#xff1a;https://py…

Oracle 数据库 dmp文件从高版本导入低版本的问题处理

当前有个需求是将oracle 19c上的数据备份恢复到oracle 11g上使用。我们通过exp命令远程进行备份&#xff0c;然后通过imp进行恢复时出现IMP-00010: not a valid export file, header failed verification报错。 这是数据库版本问题&#xff0c;在使用exp命令导出的时候使用的客…

RedisDesktopManager新版本不再支持SSH连接远程redis后

背景 RedisDesktopManager(又名RDM)是一个用于Windows、Linux和MacOS的快速开源Redis数据库管理应用程序。这几天从新下载RedisDesktopManager最新版本&#xff0c;结果发现新版本开始不支持SSH连接远程redis了。 解决方案 第一种 根据网上有效的信息&#xff0c;可以回退版…

C# 读取多种CAN报文文件转换成统一格式数据,工具类:CanMsgRead

因为经常有读取CAN报文trace文件的需求&#xff0c;而且因为CAN卡不同、记录软件不同会导致CAN报文trace文件的格式都有差异。为了方便自己后续开发&#xff0c;我写了一个CanMsgRead工具类&#xff0c;只要提供CAN报文路径和CAN报文格式的选项即可将文件迅速读取转换为统一的C…

REDIS2.0

string list hash set 无序集合 声明一个key&#xff0c;键里面的值是元素&#xff0c;元素的类型是string 元素的值是唯一的&#xff0c;不能重复 多个集合类型之间可以进行并集&#xff0c;交集&#xff0c;集查的运算 sadd test1 a b c c d &#xff1a;添加5个元素&am…

【源码 导入教程 文档 讲解】基于springboot校园新闻管理系统源码和论文

可做计算机毕业设计JAVA、PHP、爬虫、APP、小程序、C#、C、python、数据可视化、大数据、文案 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xf…