当前位置: 首页 > news >正文

SpringBoot系列—入门

目录

1 第一个SpringBoot程序

1.1 创建SpringBoot项目

1.2 选择SpringBoot版本和必要依赖

1.3 项目目录结构

1.4 编写Hello World代码

1.5 运行程序

1.6 不需要IDEA也能创建SpringBoot程序

1.7 部署程序

1.8 pom.xml依赖问题

1.9 无Maven选项问题

1.10 SpringBoot版本和Java版本不匹配

2 Spring、SpringMVC和SpringBoot的区别和联系


        SpringBoot框架是为了简化Spring程序的开发(是Spring程序开发的脚手架)。在介绍SpringBoot前,先来使用一下SpringBoot来写第一个hello world程序。

1 第一个SpringBoot程序

1.1 创建SpringBoot项目

        SpringBoot程序要部署的时候,不再像Servlet要打成War包,而是打成Jar包,这里后面会详细说明。

        注意:如果使用IDEA 社区版,需要安装Spring Boot Help插件,才能创建SpringBoot程序。这里是直接使用专业版,内部集成了SpringBoot的插件。

1.2 选择SpringBoot版本和必要依赖

        选择SpringBoot的版本,2.x版本对应Java 8,3.x版本对应Java 17。

        注意:选择版本经常会看到SNAPSHOT,这表示是快照,即不稳定版本。如果选择了这个版本,SNAPSHOT版本的程序出现问题,可以修改后重新发包。如果选择了不带SNAPSHOT的版本,程序出现问题后,不能修改,如果要修改就要发布下一个版本号的程序。

        同时要选择Spring Web依赖,这是Spring MVC的依赖,SpringBoot程序是基于Spring MVC的。

1.3 项目目录结构

        首次创建SpringBoot项目,需要一定的时间,因为SpringBoot的相关依赖需要从中央仓库下载到本地仓库(注意配置Maven国内源加速下载)。

  • src/main/java:Java源代码。
  • src/main/resources:静态资源(包括html、css、js等文件)或SpringBoot的配置文件:application.properties。
  • src/test/java:测试代码。
  • target:编译后的文件路径。
  • pom.xml:Maven配置文件。
  • .gitignore:git时要忽略的文件。

1.4 编写Hello World代码

@RestControllerpublic class UserController {@RequestMapping("/helloSpringBoot")public String Hello(){return "Hello,SpringBoot";}}

1.5 运行程序

        在包含@SpringBootApplication注解的文件中点击启动的绿色箭头,即可启动。

        观察启动日志可以发现,在上图第4行,说明SpringBoot内置了Tomcat(传统Tomcat部署Servlet程序webapps目录下有多个项目,因此访问路径需要加上项目名因此SpringBoot项目访问路径不需要加上项目名),因此部署SpringBoot项目时我们不再打成War包部署在Tomcat的webapps目录下。第6行说明了SpringBoot是对Servlet的封装。倒数第2行说明了Tomcat的端口号是8080(想要切换端口号,在application.properties文件中添加server.port=端口号)。

        注意:传统Tomcat部署Servlet程序webapps目录下有多个项目,因此访问路径需要加上项目名。而SpringBoot内置了Tomcat,因此SpringBoot项目访问路径不需要加上项目名。如果要同时启动多个SpringBoot项目,更改每个项目Tomcat不同的端口号即可。

        如果启动成功,就能在对应的url上访问到方法。如果输出的是中文,也不会乱码(这也是SpringBoot自动把字符集处理了)。

1.6 不需要IDEA也能创建SpringBoot程序

        前往https://start.spring.io,打开页面结构和IDEA的类似,创建好后可以下载到本地。

1.7 部署程序

        把项目打成jar包后,在命令行直接使用java -jar即可运行程序。Windows和Linux都一样。

1.8 pom.xml依赖问题

        pom.xml文件中可能存在有些依赖包一直是红色(没有引入到项目中)的问题。解决思路:

        1.去中央仓库位于https://repo1.maven.org/maven2/和查询网站https://mvnrepository.com查看包名是否存在,如果不存在改为正确的包名。

        2.如果包是存在的,说明包还未下载到项目中,多次点击Maven的刷新,看看是否解决问题。

        3.如果多次刷新后无效,就去本地仓库把对应的jar包删除(有可能因为网络问题导致jar包下载的不完整),再重新刷新下载jar包。

        4.切换网络,删除本地仓库的jar包再次下载。

        5.隔段时间再下载

        多次重复上述步骤,问题总会解决的。

1.9 无Maven选项问题

        右键左侧文件目录中的项目名,选择Add Framework Support,在打开的界面勾选Maven即可。

1.10 SpringBoot版本和Java版本不匹配

        SpringBoot的2.x版本对应Java 8,3.x版本对应Java 17。如果在创建目录的时候没有注意,就会导致出现“无效目标发行版17”等问题。解决办法:

        1.重新创建项目。

        2.修改项目中所有和Java版本相关的属性,分别在:pom.xml、settings和Project Structure中。

        上述地方仔细确认是否Java版本和SpringBoot版本匹配。

2 Spring、SpringMVC和SpringBoot的区别和联系

        (1)Spring(Spring Framework)是一个开发应用的框架,具有轻量级、一站式、模块化等特征,目的是为了简化企业级应用程序开发。

        Spring具有:对象和依赖关系的管理、面向切面编程、数据库事务管理、数据访问、Web框架支持等功能。它具有高度可开放性,可以无缝支持第三方框架(数据访问(Hibernate、JPA等)、Web(Struts、JSF等)),并且开发人员无需使用Spring的全部,需要什么功能使用什么功能即可。

        (2)SpringMVC是Spring的一个子框架,全称Spring Web MVC。它是基于Spring和MVC思想开发的一个Web框架,也就是说Spring可以开发各种应用程序,但是SpringMVC专精Web程序的开发。

        其中的MVC思想是Model模型、View视图、Controller控制器。View视图可以理解为用户交互界面,比如Web程序中的浏览器页面。Controller控制器是处理网络交互的请求和响应。Model模型负责业务逻辑,比如和数据库的数据交互等等。但是MVC思想与时俱进,逐渐演化为现在的前后端分离的开发思想,前端负责页面的展示,后端负责业务逻辑。而后端具体可以大概分为:Controller层、Service层和Dao层,其中Controller层就是MVC中的View和Controller的组合,而Service层和Dao层就是Model,这样做是为了更好的项目结构解耦,形成高内聚、低耦合的项目。

        抛去MVC思想,SpringMVC可以理解为Spring Web开发的一个大型库,实现了对Servlet的封装,提供了很多的包和注解便于Web项目的开发:比如URL地址映射、对请求和响应的处理。

        (3)SpringBoot是对Spring的封装,是Spring开发的脚手架,核心思想约定大于配置,目的是为了简化Spring应用的开发流程,让企业更关注业务逻辑,无需过多关注xml配置和底层实现,降低开发成本。

        比如SpringBoot内部集成了Tomcat服务器,无需让开发人员关系项目部署问题,直接运行jar包即可开启服务。如果想要开发Web程序,引入SpringMVC框架即可。如果想要项目有和数据库交互的能力,引入MyBatis框架即可。

        总结:SpringMVC和SpringBoot都属于Spring系列框架,SpringMVC简化了Spring Web开发,SpringBoot简化了Spring应用开发。

        注意:Spring Web和Spring应用的关系,Spring Web只是Spring众多应用的一部分,即我们使用Spring不止能开发Web程序,也可以开发其他应用程序,比如游戏、桌面应用等等。

http://www.dtcms.com/a/267562.html

相关文章:

  • ffplay6 播放器关键技术点分析 1/2
  • NumPy-核心函数np.matmul()深入解析
  • UI前端与数字孪生融合:为智能制造提供可视化生产调度方案
  • 分享一些服务端请求伪造SSRF的笔记
  • RAL-2025 | 触觉助力无人机空中探索!基于柔顺机器人手指的无人机触觉导航
  • 快讯|美团即时零售日订单已突破1.2亿,餐饮订单占比过亿
  • 【第五章】 工程测量学
  • ASP.NET代码审计 MVC架构 SQL注入漏洞n
  • 《设计模式之禅》笔记摘录 - 4.抽象工厂模式
  • Puppeteer page.$$(selector)
  • Swift 数学计算:用 Accelerate 框架让性能“加速吃鸡”
  • go基本用法
  • CentOS虚拟机ifconfig命令不显示IP地址解决方法
  • 【无标题】JavaScript入门
  • LESS/SCSS 高效主题换肤方案
  • P1424 小鱼的航程(改进版)
  • WPF学习笔记(24)命令与ICommand
  • LeetCode 第91题:解码方法
  • 二叉树题解——二叉搜索树中第 K 小的元素【LeetCode】使用外部变量ans记录答案
  • C++ 网络编程(15) 利用asio协程搭建异步服务器
  • 【大模型】到底什么是Function Calling和MCP,以及和ReAct推理的关系是什么?
  • [学习] 深入理解 POSIX
  • 面试150 最长连续序列
  • Node.js worker_threads深入讲解教程
  • 【LeetCode102.二叉树的层序遍历】vs.【LeetCode103.二叉树的锯齿形层序遍历】
  • Apollo自动驾驶系统中Planning模块的架构设计与核心逻辑解析(流程伪代码示例)
  • 45-使用scale实现图形缩放
  • 探索 .NET 桌面开发:WinForms、WPF、.NET MAUI 和 Avalonia 的全面对比(截至2025年7月)
  • 炼丹炉 TD-trainer 的安装与部署,LoRA、dreambooth
  • <三>Sping-AI alibaba 文生图