【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")@ResponseBodypublic 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 容器配置@Overrideprotected WebApplicationContext createServletApplicationContext() {AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();ctx.register(SpringMvcConfig.class);return ctx;}// 设置哪些请求归属 SpringMVC 处理@Overrideprotected String[] getServletMappings() {// 设置所有的请求归属 SpringMVC 处理return new String[]{"/"};}// 加载 Spring 容器配置@Overrideprotected 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 方法返回值作为响应求体返回给请求方

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

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

相关文章

OpenGL变换矩阵和输入控制

在前面的文章当中我们已经成功播放了动画&#xff0c;让我们的角色动了起来&#xff0c;这一切变得比较有意思了起来。不过我们发现&#xff0c;角色虽然说是动了起来&#xff0c;不过只是在不停地原地踏步而已&#xff0c;而且我们也没有办法通过键盘来控制这个角色来进行移动…

【Spring MVC 核心机制】核心组件和工作流程解析

在 Web 应用开发中&#xff0c;处理用户请求的逻辑常常会涉及到路径匹配、请求分发、视图渲染等多个环节。Spring MVC 作为一款强大的 Web 框架&#xff0c;将这些复杂的操作高度抽象化&#xff0c;通过组件协作简化了开发者的工作。 无论是处理表单请求、生成动态页面&#x…

Verilog 过程赋值

关键词&#xff1a;阻塞赋值&#xff0c;非阻塞赋值&#xff0c;并行 过程性赋值是在 initial 或 always 语句块里的赋值&#xff0c;赋值对象是寄存器、整数、实数等类型。 这些变量在被赋值后&#xff0c;其值将保持不变&#xff0c;直到重新被赋予新值。 连续性赋值总是处…

[并发与并行] python如何构建并发管道处理多阶段任务?

文章目录 1. 背景&目标2. show me the code3.知识点4. 总结 1. 背景&目标 背景&#xff1a;一个任务可分为多个阶段(各个阶段非CPU密集型任务&#xff0c;而是属于IO密集型任务)&#xff0c;希望每个阶段能够交给各自的线程去执行。 目标&#xff1a;构建支持多并发的…

07 基于OpenAMP的核间通信方案

引言 ZYNQ7020有两个CPU核心&#xff0c;这两个核心可以采用SMP或AMP方式进行调度&#xff0c;当采用AMP方式进行调度时核0和核1可以运行不同的操作系统&#xff0c;如核0运行Linux系统&#xff0c;提供有些复杂的用户交互工作&#xff0c;核1运行实时操作系统&#xff0c;对设…

7.若依参数设置、通知公告、日志管理

参数设置 对系统中的参数进行动态维护。 关闭验证码校验功能 打开页面注册功能 需要修改前端页面代码 通知公告 促进组织内部信息传递 若依只提供了一个半成品&#xff0c;只实现了管理员可以添加通知公告。 日志管理 追踪用户行为和系统运行状况。 登录日志 和操作日志…

基于Docker+模拟器的Appium自动化测试(二)

模拟器的设置 打开“夜神模拟器”的系统设置&#xff0c;切换到“手机与网络”页&#xff0c;选中网络设置下的“开启网络连接”和“开启网络桥接模式”复选框&#xff0c;而后选择“静态IP”单选框&#xff0c;在IP地址中输入“192.168.0.105”&#xff0c;网关等内容不再赘述…

大数据技术-Hadoop(三)Mapreduce的介绍与使用

目录 一、概念和定义 二、WordCount案例 1、WordCountMapper 2、WordCountReducer 3、WordCountDriver 三、序列化 1、为什么序列化 2、为什么不用Java的序列化 3、Hadoop序列化特点&#xff1a; 4、自定义bean对象实现序列化接口&#xff08;Writable&#xff09; 4…

【数据仓库】SparkSQL数仓实践

文章目录 集成hive metastoreSQL测试spark-sql 语法SQL执行流程两种数仓架构的选择hive on spark数仓配置经验 spark-sql没有元数据管理功能&#xff0c;只有sql 到RDD的解释翻译功能&#xff0c;所以需要和hive的metastore服务集成在一起使用。 集成hive metastore 在spark安…

基本算法——回归

本节将通过分析能源效率数据集&#xff08;Tsanas和Xifara&#xff0c;2012&#xff09;学习基本的回归算法。我们将基 于建筑的结构特点&#xff08;比如表面、墙体与屋顶面积、高度、紧凑度&#xff09;研究它们的加热与冷却负载要 求。研究者使用一个模拟器设计了12种不…

V-Express - 一款针对人像视频生成的开源软件

V-Express是腾讯AI Lab开发的一款针对人像视频生成的开源软件。它旨在通过条件性丢弃&#xff08;Conditional Dropout&#xff09;技术&#xff0c;实现渐进式训练&#xff0c;以改善使用单一图像生成人像视频时的控制信号平衡问题。 在生成过程中&#xff0c;不同的控制信号&…

Java与SQL Server数据库连接的实践与要点

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;Java和SQL Server数据库交互是企业级应用开发中的重要环节。本文详细探讨了使用Java通过JDBC连接到SQL Server数据库的过程&#xff0c;包括加载驱动、建立连接、执行SQL语句、处理异常、资源管理、事务处理和连…

学习记录—正则表达式-基本语法

正则表达式简介-《菜鸟教程》 正则表达式是一种用于匹配和操作文本的强大工具&#xff0c;它是由一系列字符和特殊字符组成的模式&#xff0c;用于描述要匹配的文本模式。 正则表达式可以在文本中查找、替换、提取和验证特定的模式。 本期内容将介绍普通字符&#xff0c;特殊…

企业安装加密软件有什么好处?

加密软件为企业的安全提供了很多便利&#xff0c;从以下几点我们看看比较重要的几个优点&#xff1a; 1、数据保护&#xff1a;企业通常拥有大量的商业机密、客户数据、技术文档等敏感信息。加密软件可以对这些信息进行加密处理&#xff0c;防止未经授权的人员访问。即使数据被…

京东供应链创新与实践:应用数据驱动的库存选品和调拨算法提升履约效率

2024 年度总结系列 2024 年 10 月&#xff0c;京东零售供应链技术团队凭借其在库存选品与调拨技术上的创新与实践&#xff0c;荣获运筹与管理学领域的国际顶级奖项 Daniel H. Wagner Prize。本文为您介绍获奖背后的供应链技术创新和落地应用。 00 摘要 在电商行业中&#x…

大数据技术-Hadoop(二)HDFS的介绍与使用

目录 1、HDFS简介 1.1 什么是HDFS 1.2 HDFS的优点 1.3、HDFS的架构 1.3.1、 NameNode 1.3.2、 NameNode的职责 1.3.3、DataNode 1.3.4、 DataNode的职责 1.3.5、Secondary NameNode 1.3.6、Secondary NameNode的职责 2、HDFS的工作原理 2.1、文件存储 2.2 、数据写…

在 C# 中优化 JPEG 压缩级别和文件大小

此示例可让您检查不同 JPEG 压缩级别的图像质量。使用文件菜单的打开命令加载图像文件。然后使用“JPEG 压缩指数 (CI)”组合框选择压缩级别。程序将图像保存到具有该压缩级别的临时文件中&#xff0c;并显示生成的图像和文件大小。 该程序的关键是以下SaveJpg方法&#xff0c;…

Pandas02

Pandas01: Pandas01 文章目录 内容回顾1 数据的读取和保存1.1 读写Excel文件1.2 读写CSV1.3 读写Mysql 2 DataFrame 数据查询2.1 筛选多列数据2.2 loc 和 iloc2.3 query查询方法和isin 方法 3 DataFrame增 删 改数据3.1 增加一列数据3.2 删除一行/一列数据3.3 数据去重3.4 数据…

Flink定时器

flink的定时器都是基于事件时间&#xff08;event time&#xff09;或事件处理时间&#xff08;processing time&#xff09;的变化来触发响应的。对一部分新手玩家来说&#xff0c;可能不清楚事件时间和事件处理时间的区别。我这里先说一下我的理解&#xff0c;防止下面懵逼。…

Docker中的分层(Layer)

docker中有分层的概念&#xff0c;如下图所示 上面是容器层&#xff08;Container layer&#xff09;&#xff0c;下面是镜像层&#xff08;Image layers&#xff09;。 镜像层的内容是静态的&#xff0c;读和写的操作&#xff0c;都是在容器层发生&#xff0c;专门为容器的读…