【SpringMVC篇】详解SpringMVC入门案例
🎊专栏【SpringMVC】
🍔喜欢的诗句:天行健,君子以自强不息。
🎆音乐分享【如愿】
🎄欢迎并且感谢大家指出小吉的问题🥰
文章目录
- 🎍SpringMVC简介
- ⭐优点
- 🌺SpringMVC入门案例
- ⭐案例用到的注解
- 🎆延申
- 🌺入门案例流程分析
- 🍔简化入门案例
Spring MVC是Spring框架中的一员,是目前最主流的Java EE Web框架之一。在企业级开发中,Spring MVC有非常广泛的应用。
Spring MVC基于MVC设计模式,将web层进行职责解耦,基于请求映射将请求分派到指定的控制器进行处理。它主要特点有:
使用DispatcherServlet作为前端控制器,将请求调度到控制器
支持灵活的请求映射方式,方便接口对接
提供强大的数据绑定和验证机制
支持多种视图技术,可以方便与不同UI框架集成
拥有强大的扩展点,可以自定义很多组件
同时,Spring MVC作为Spring框架的一部分,可以非常容易地集成Spring的其他模块,如Spring IoC、Spring JDBC等。这为企业级应用提供了一种非常灵活而强大的web框架。
以上补充了Spring MVC的定位、主要特点等内容,使开头部分更丰富充实,希望这些补充内容确实能够帮助读者更好地了解Spring MVC
通过跟随本文,你可以学习创建SpringMVC项目,编写Controller处理请求,配置SpringMVC加载bean,并运行调试一个简单的案例。这将让你对SpringMVC有最直观的感受,打下坚实的基础。跟我一起开始SpringMVC之旅吧!
🎍SpringMVC简介
Spring MVC是一种基于Java开发的Web应用程序框架
,它是Spring Framework的一部分。它提供了一种模型-视图-控制器(Model-View-Controller,MVC)的架构模式,用于构建灵活、可维护和可扩展的Web应用程序。
⭐优点
- 使用简单,开发便捷(相对于Servlet)
- 灵活性强
🌺SpringMVC入门案例
创建项目
在pom.xml文件中导入包和springmvc坐标,servlet坐标
<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.10.RELEASE</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency>
添加tomcat插件
<plugins><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.1</version><configuration><port>80</port><path>/</path></configuration></plugin></plugins>
创建UserController类
package com.example.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;//使用@Controller,定义bean
@Controller
public class UserController {//设置当前操作的访问路径@RequestMapping("/save")//设置当前操作的返回值类型@ResponseBody //@ResponseBody把你返回的东西整体作为响应的内容给到外面public String save(){System.out.println("user save ...");//返回一个json数据return "{'module':'springmvc'}";}
}
创建新的包,来配置SpringMVC
创建SpringMVC的配置文件,加载controller对应的bean
package com.example.config;import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;//配置类
@Configuration
//扫描
@ComponentScan("com.example.controller")
public class SpringMvcConfig {}
定义一个servlet容器启动的配置类,在里面加载spring的配置
package com.example.config;//定义一个servlet容器启动的配置类,在里面加载spring的配置import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;public class ServletConfig extends AbstractDispatcherServletInitializer {//加载springmvc容器配置@Overrideprotected WebApplicationContext createServletApplicationContext() {AnnotationConfigWebApplicationContext ctx=new AnnotationConfigWebApplicationContext();ctx.register(SpringMvcConfig.class);return ctx;}//设置哪些请求归属springmvc处理@Overrideprotected String[] getServletMappings() {return new String[]{"/"};}//加载spring容器配置@Overrideprotected WebApplicationContext createRootApplicationContext() {return null;}
}
启动程序
运行localhost/save
,运行成功
⭐案例用到的注解
🎆延申
我们在UserController类中加上这一段代码
保持原来的代码不变
@RequestMapping("delete")@ResponseBodypublic String delete(){System.out.println("user delete ...");return "{'module':'springmvc delete'}";}
这次我们不运行
localhost/save
了,我们运行localhost/delete
运行成功
所以以后我们配置好一个springmvc案例后,再开发功能时,不用重新新建,直接在原项目里面写入即可
🌺入门案例流程分析
🍔简化入门案例
我们修改ServletConfig里面的代码
public class ServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer {protected Class<?>[] getRootConfigClasses() {return new Class[]{SpringMvcConfig.class};}protected Class<?>[] getServletConfigClasses() {return new Class[]{SpringMvcConfig.class};}protected String[] getServletMappings() {return new String[]{"/"};}
}
运行,成功
通过这个简单的入门案例,我们已经体验了Spring MVC的基本用法,构建了一个最小可运行的Spring MVC应用。但要真正使用Spring MVC进行企业级Web开发,我们还需要学习许多更高级的功能。
例如Spring MVC强大的视图技术,可以轻松集成各种模版引擎,而不仅仅是返回字符串。数据验证功能可以保证数据合法性。文件上传和下载更方便处理文件内容。拦截器功能可以实现日志、权限等通用处理。还有国际化、主题切换、RESTful服务等等。
Spring MVC构建的应用可以轻松应对复杂的企业级需求。它的扩展点设计更让我们可以自定义各种组件。一定要继续深入学习Spring MVC,以应对工作中的各种挑战。
本文只是入门第一步。如果大家在学习和使用Spring MVC过程中,遇到任何问题,请积极到评论区讨论。
相关文章:

【SpringMVC篇】详解SpringMVC入门案例
🎊专栏【SpringMVC】 🍔喜欢的诗句:天行健,君子以自强不息。 🎆音乐分享【如愿】 🎄欢迎并且感谢大家指出小吉的问题🥰 文章目录 🎍SpringMVC简介⭐优点 🌺SpringMVC入门…...
Programming abstractions in C阅读笔记:p166-p175
《Programming Abstractions In C》学习第58天,p166-p175总结。 一、技术总结 1.斐波那契数列(Fibonacci Sequenc) (1)斐波那契数列来源 斐波那契数列来自于《Liber Abaci》一书里兔子繁殖问题,相关资料很多,这里不赘述。 (2)关于《Libe…...

【List-Watch】
List-Watch 一、定义二、工作机制三、调度过程 一、定义 Kubernetes 是通过 List-Watch 的机制进行每个组件的协作,保持数据同步的,每个组件之间的设计实现了解耦。 用户是通过 kubectl 根据配置文件,向 APIServer 发送命令,在 …...
Pytorch因nn.Parameter导致实验不可复现的一种情况
文章首发见博客:https://mwhls.top/4871.html。 无图/格式错误/后续更新请见首发页。 更多更新请到mwhls.top查看 欢迎留言提问或批评建议,私信不回。 没解决,只是记录这种情况。 也可以多次实验取均值以避免结果复现。 场景 自己的模块中&a…...
MySQL表名区分不区分大小写,规则是怎样
MySQL表名区分不区分大小写,规则是怎样 mysql在linux中表名区分大小写,mysql在Windows中表名不区分大小写;可以在MySQL的配置文件“my.ini [mysqld]”中增加一行“lower_case_table_names 参数”来设置是否区分大小写。 mysql的表名区分大小写…...
Design patterns--观察者模式
设计模式之观察者模式 代码示例 #ifndef OBSERVER_H #define OBSERVER_H#include <map>class Observer { public:Observer();virtual void update(std::map<int, double>) 0; }; #endif // OBSERVER_H#include "observer.h"Observer::Observer() {}#if…...

【Spring Boot】SpringBoot 单元测试
SpringBoot 单元测试 一. 什么是单元测试二. 单元测试的好处三. Spring Boot 单元测试单元测试的实现步骤 一. 什么是单元测试 单元测试(unit testing),是指对软件中的最⼩可测试单元进⾏检查和验证的过程就叫单元测试。 二. 单元测试的好处…...

ansible 调研
参考:自动化运维工具——ansible详解(一) - 珂儿吖 - 博客园 (cnblogs.com) ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点…...

QT UI控件汇总介绍
按钮 ToolButton 和pushbutton没什么区别,可以用来设置图标 设置展示策略 RadioButton 一般用Container可以将其框起来设置互斥域,推荐选用GroupBox 使用方法 qDebug()<<ui->radioButton_3->isChecked(); CheckBox 可以勾选三态 stat…...

【垃圾回收概述及算法】
文章目录 1. 垃圾回收概述及算法2. 垃圾回收相关算法2.1 标记阶段:引用计数算法2.2 标记阶段:可达性分析算法2.3 对象的 finalization 机制2.3.1 一个对象是否可回收的判断 2.4 清除阶段:标记-清除算法2.5 清除阶段:复制算法2.6 清…...

2021年03月 Python(二级)真题解析#中国电子学会#全国青少年软件编程等级考试
Python编程(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 对于字典infor {“name”:“tom”, “age”:13, “sex”:“male”},删除"age":13键值对的操作正确的…...
为什么通过一致性正则化方法就可以避免将所有未标记数据集分配给同一类?
一致性正则化方法可以帮助避免将所有未标记数据分配给同一类别的原因在于它们引入了对模型输出的一致性约束,从而减轻了判别性损失(如交叉熵损失)可能导致的问题。以下是一些关键原因: 一致性反馈: 一致性正则化方法…...

第4章 决策树
文章目录 4.1 基本流程4.2 划分选择4.2.1 信息增益4.2.2 增益率4.2.3 基尼指数 4.3 剪枝处理4.3.1 预剪枝4.3.2 后剪枝 4.4 连续与缺失值4.4.1 连续值处理4.4.2 缺失值处理 4.5 多变量决策树4.6 阅读材料 4.1 基本流程 决策树也称判定树,是一类常见的机器学习方法。…...

在Remix中编写你的第一份智能合约
智能合约简单来讲就是:部署在去中心化区块链上的一个合约或者一组指令,当这个合约或者这组指令被部署以后,它就不能被改变了,并会自动执行,每个人都可以看到合约里面的条款。更深层次的理解就是:这些代码会…...

如何查看dll文件内导出函数名称
一 使用VS自带工具 进入VS开发环境,然后Tools -> Visual studio 2017 Command Prompt,打开兼容工具命令提示符, 如果工具 目录下没有命令行提示,可以从开始菜单找到VS的命令行提示符。 cd到dll所在目录,输入命令…...

学习笔记|串口通信的基础知识|同步/异步|RS232|常见的串口软件的参数|STC32G单片机视频开发教程(冲哥)|第二十集:串口通信基础
目录 1.串口通信的基础知识串口通信(Serial Communication)同步/异步?全双工?常见的串口软件的参数 2.STC32的串口通信实现原理引脚选择:实现分时复用模式选择串口1模式1,模式1波特率计算公式 3.串口通信代码实现编写串口1通信程序…...
JAVA String 和 String[][]互转的两种方法
第一种方法: <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.40</version> </dependency>字符串转数组: String s "[[22,23,23],[1,10,20]]"…...
推荐几个制作svg的工具
以下是一些用于制作SVG(可缩放矢量图形)的工具和软件,适用于不同技能级别和需求: Adobe Illustrator:作为业界标准之一,Adobe Illustrator是功能强大的矢量图形编辑软件,适用于专业设计师和创意…...
Java实现防重复提交,使用自定义注解的方式
目录 1.背景 2.思路 3.实现 创建自定义注解 编写拦截器 4.使用 5.验证...
Springboot实现Web组件注册
一、前言 在实际开发中,有时候我们可能使用springboot注册web组件,实现某些功能,比如我们需要生成一些api来提供对外的服务,而对应的路径其实是不固定的,那么这种情况下,其实是可以通过这种方式来注册web组…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...

七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...
【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验
Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...