Java程序设计:spring boot(2)
目录
1 Spring MVC 零配置创建与部署
1.1 创建Spring MVC Web⼯程
1.2 pom.xml 添加坐标相关配置
1.3 添加源代码
1.4 添加视图
1.5 SpringMVC 配置类添加
1.6 入口文件代码添加
1.7 部署与测试
2 Spring Boot 概念&特点
2.1 框架概念
2.2 框架特点
2.3 Spring Boot 快速⼊⻔
2.3.1 环境准备:Idea、Maven、Jdk 1.8+ 、Spring Boot 2.x
2.3.2 创建项目
2.3.3 添加依赖坐标
2.3.4 导⼊Spring Boot的web坐标与相关插件
2.3.5 添加源代码
2.3.6 创建启动程序
2.3.7 启动Spring Boot应⽤并测试
1 Spring MVC 零配置创建与部署
1.1 创建Spring MVC Web⼯程
创建 Maven 的 web 项⽬
1.2 pom.xml 添加坐标相关配置
<!-- spring web -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>5.2.4.RELEASE</version>
</dependency>
<!-- spring mvc -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.4.RELEASE</version>
</dependency>
<!-- web servlet -->
<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.0.1</version>
</dependency>
<build><finalName>springmvc</finalName><plugins><!-- 指定Maven编译的JDK版本和编码 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>2.3.2</version><configuration><source>1.8</source><target>1.8</target><encoding>utf-8</encoding></configuration></plugin>
</plugins>
</build>
1.3 添加源代码
@Controller
public class HelloController {@RequestMapping("/index")public String index(){return "index";}
}
1.4 添加视图
在 WEB-INF/views ⽬录下创建 index.jsp(这⾥以jsp为模板):
<html><body><h2>Hello mvc!</h2></body>
</html>
1.5 SpringMVC 配置类添加
Spring Mvc 配置信息 MvcConfig ⽂件添加,作为 Mvc 框架环境,原来是通过 xml 来进⾏配置 (视图 解析器、Json转换器、⽂件上传解析器等),这⾥基于注解通过继承 WebMvcConfigurerAdapter 类并 重写相关⽅法来进⾏配置 (注意通过 @EnableWebMvc 注解来启动 MVC 环境)。
/**
* MVC 基本配置
*/
// 配置类
@Configuration
// 在@Configuration注解的配置类中添加,⽤于为该应⽤添加SpringMVC的功能
@EnableWebMvc
// 扫描包范围
@ComponentScan("com.xxxx.springboot")
public class MvcConfig {/*** 配置 JSP视图解析器* @return*/@Bean // 将⽅法返回的结果交给IOC容器维护public InternalResourceViewResolver viewResolver(){// 获取视图解析器InternalResourceViewResolver viewResolver = new
InternalResourceViewResolver();// 设置前缀viewResolver.setPrefix("/WEB-INF/views/");// 设置后缀viewResolver.setSuffix(".jsp");// 返回解析器对象 (交给IOC容器进⾏维护)return viewResolver;}
}
MvcConfig 类定义好了,那么问题来了,怎么加载 MvcConfig 类呢,原来在构建 Mvc 应⽤时是通过容器启动应⽤时加载 web.xml ⽂件实现配置⽂件加载,现在的环境 web.xml ⽂件不存在,此时基于注 解⽅式构建的 Mvc 应⽤,定义 WebInitializer 实现 WebApplicationInitializer 接⼝ (该接⼝⽤来配置 Servlet3.0+ 配置的接⼝,⽤于替代 web.xml 配置),当 servlet 容器启动Mvc应⽤时会通过 SpringServletContainerInitializer 接⼝进⾏加载,从⽽加载 Mvc 应⽤信息配置。实现该接⼝ onStartup ⽅法 ,加载应⽤信息配置。
1.6 入口文件代码添加
/**
* 实现 WebApplicationinitializer 接⼝的类都可以在web应⽤程序启动时被加载
*/
public class WebInitializer implements WebApplicationInitializer {@Overridepublic void onStartup(ServletContext servletContext) throws
ServletException {// 基于Java的配置类加载Spring的应⽤上下⽂AnnotationConfigWebApplicationContext ctx = new
AnnotationConfigWebApplicationContext();// 注册 Mvc 配置信息ctx.register(MvcConfig.class);// 设置 ServletContext 上下⽂信息ctx.setServletContext(servletContext);// 配置转发器 DispatcherServletRegistration.Dynamic servlet =
servletContext.addServlet("dispatcher",new DispatcherServlet(ctx));// 设置映射路径servlet.addMapping("/");// 启动时即实例化 Beanservlet.setLoadOnStartup(1);}
}
1.7 部署与测试
通过 Tomcat 启动项⽬并访问
此时地址访问成功。
当项⽬访问成功后,那么问题来了,如果项⽬中存在静态资源⽂件,Handler 放⾏处理该如何配置, 定义的拦截器怎么应⽤,此时关注 WebMvcConfigurationSupport ⽗类⽅法,重写相关⽅法即可。
// 静态资源 handler不进⾏处理 直接响应到客户端
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer
configurer) {configurer.enable();
}
// 配置拦截器
@Bean
public LoginInterceptor loginInterceptor(){return new LoginInterceptor();
}
// 添加拦截器到mvc 环境
@Override
public void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(loginInterceptor());
}
2 Spring Boot 概念&特点
2.1 框架概念
随着动态语⾔流⾏(Ruby、Scala、NodeJs等),Java 开发变得相对笨重,配置繁琐,开发效率低下, 部署流程复杂,以及第三⽅集成难度也相对较⼤,针对该环境,Spring Boot 被开发出来,其使⽤“习惯 ⼤于配置⽬标”,借助Spring Boot 能够让项⽬快速运⾏起来,同时借助 Spring Boot 可以快速创建 web 应⽤并独⽴进⾏部署(jar包 war 包⽅式,内嵌 servlet 容器),同时借助 Spring Boot 在开发应⽤时可以 不⽤或很少去进⾏相关 xml 环境配置,简化了开发,⼤⼤提⾼项⽬开发效率。
Spring Boot 是由 Pivotal 团队提供的全新框架,其设计⽬的是⽤来简化 Spring 应⽤的初始搭建以及开发过程。该框架使⽤了特定的⽅式来进⾏配置,从⽽使开发⼈员不再需要定义样板化的配置。通过这 种⽅式,让 Spring Boot在蓬勃发展的快速应⽤开发领域 (rapid application development) 成为领导者。
2.2 框架特点
创建独⽴ Spring 应⽤程序、嵌⼊式 Tomcat、Jetty 容器、⽆需部署 WAR 包、简化 Maven 及 Gradle 配置、尽可能⾃动化配置 Spring、直接植⼊产品环境下的实⽤功能,⽐如度量指标、健康检查及扩展配 置、⽆需代码⽣成及 XML 配置等,同时 Spring Boot 不仅对 web 应⽤程序做了简化,还提供⼀系列的 依赖包来把其它⼀些⼯作做成开箱即⽤。
2.3 Spring Boot 快速⼊⻔
2.3.1 环境准备:Idea、Maven、Jdk 1.8+ 、Spring Boot 2.x
2.3.2 创建项目
通过 Maven 创建⼀个普通的 java 项⽬
2.3.3 添加依赖坐标
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.2.RELEASE</version>
</parent>
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
</dependencies>
Spring Boot 的项⽬必须要将 parent 设置为 Spring Boot 的 parent,该 parent 包含了⼤量默认的配 置,简化程序的开发。
2.3.4 导⼊Spring Boot的web坐标与相关插件
<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
2.3.5 添加源代码
@Controller
public class HelloController {@RequestMapping("hello")@ResponseBodypublic String hello(){return "Hello SpringBoot";}
}
2.3.6 创建启动程序
在 HelloController.java 所在包下,创建 StarterApplication.java
@SpringBootApplication
public class Starter{public static void main(String[] args) {SpringApplication.run(Starter.class);}
}
2.3.7 启动Spring Boot应⽤并测试
这⾥运⾏main ⽅法即可,通过浏览器访问 http://localhost:8080/hello 效果如下:
相关文章:

Java程序设计:spring boot(2)
目录 1 Spring MVC 零配置创建与部署 1.1 创建Spring MVC Web⼯程 1.2 pom.xml 添加坐标相关配置 1.3 添加源代码 1.4 添加视图 1.5 SpringMVC 配置类添加 1.6 入口文件代码添加 1.7 部署与测试 2 Spring Boot 概念&特点 2.1 框架概念 2.2 框架特点 2.3 Spring…...

服务器运维监控平台
云监控平台-简介 一:简介 “phoenix” 是一个灵活可配置的开源监控平台,主要用于监控应用程序、服务器、docker、数据库、网络、tcp 端口和 http 接口,通过实时收集、汇聚和分析监控信息,实现在发现异常时立刻推送告警信息&…...
css中 global 和 deep(两个样式穿透) 区别
1.:global(selector):这个伪类选择器会选择所有全局的、未被其他样式表覆盖的元素。换句话说,它会匹配所有没有被其他样式表(例如内联样式或外部样式表)所影响的元素。 :global(p) {color: red; }这段代码会将所有 <p> 元素…...

【星闪技术】WS63E模块的WiFi客户端测试
引言 我所计划的WS63E测试要实现MQTT联网,所以首先需要确保开发板连接WiFi。今天来测试一下WiFi功能。 程序分析 WiFi客户端的例子在src/application/samples/wifi/sta_sample目录下。这个例子看上去和hi3861的例子差不多。 这段程序是一个用于嵌入式设备的Wi-F…...

Android面试之5个Kotlin深度面试题:协程、密封类和高阶函数
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 面试题目1:Kotlin中的协程与线程的区别是什么?如何在Android中使用协程进行异步编程? 解答: 协…...

操作系统 和 初识进程
目录 操作系统(OS) 进程 操作系统(OS) 概念 操作系统即os,是一款软件。 任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。 操作系统的本质是一种进行软硬件管理的软件 笼统的理解…...

QT--Qlabel学习、获取文本和设置文本、文本对齐方式、文本换行、显示图片
QLabel 是 Qt 中的标签类,通常用于显示提示性的文本,也可以显示图像 对齐方式 用于设置标签中的内容在水平和垂直两个方向上的对齐方式,比如左对齐、右对齐、上对齐、下对齐、水平居中、垂直居中等。 // 获取和设置文本的对齐方式 Qt::Ali…...
深度学习:终身学习(Life-Long Learning)详解
终身学习(Life-Long Learning)详解 终身学习(也称为持续学习或增量学习)是机器学习中的一个重要研究领域,它关注如何使机器学习模型在完成一系列任务后,能够持续学习新任务,而不会忘记之前学到…...
前端UI框架
组件UI类 1.Element-Plus 2.uView 3.Vant 4.TDesign 5.uni-app 6.Tuniao-vue3 7. 可视化图标类 1.可视化图标VUE Data UI 2.Echart 图标库ICON 1.yesicon 2.Flaticon 3.Google Fonts 4.fontawesome 5.阿里巴巴 其他 1.CSS布局 2.web前端样式布局 3.中国色-颜色合集 托管…...

最佳副屏串流解决方案:如何低成本打造电脑拓展副屏?
如何低成本打造电脑拓展副屏?如果你有一台平板和一台电脑,想要提高打游戏、办公或是学习的效率。那么,使用网易GameViewer远程,就能帮你低成本打造电脑拓展副屏。 简单来说,副屏串流就是能让你多出一块显示屏。在打游戏…...

SQL Injection | SQL 注入概述
关注这个漏洞的其他相关笔记:SQL 注入漏洞 - 学习手册-CSDN博客 0x01:SQL 注入漏洞介绍 SQL 注入就是指 Web 应用程序对用户输入数据的合法性没有判断,前端传入后端的参数是可控的,并且参数会带入到数据库中执行,导致…...
【Linux 从基础到进阶】磁盘I/O性能调优
磁盘I/O性能调优 1. 引言 磁盘I/O性能是决定服务器整体性能的关键因素之一。磁盘I/O性能的瓶颈常常会影响数据库、文件系统以及虚拟化平台等关键应用的响应时间。因此,磁盘I/O调优是系统管理员不可忽视的任务。 本文将介绍影响磁盘I/O性能的主要因素,…...

浅谈AGI时代的“数据枢纽”——向量数据库
一、前言 人工智能的关键,不只是构建好算力、算法、模型,更重要的是做好数据的清洗、处理、挖掘等问题。一定程度上,智能时代,企业数据处理能力有多强,决定了业务发展的天花板有多高。 在企业数智化转型过程中&#x…...

生成 Excel 表列名称
Excel 大家都用过,它的列名是用字母编号的,A 表示第一列,B 表示第二列,AA 表示第27列,AB 表示第28列等等。 现给定一个数字,如何得到列名称呢。比如输入28,输出 AB。 一开始以为就是一个简单的…...

基于yolov10的烟雾明火检测森林火灾系统python源码+pytorch模型+评估指标曲线+精美GUI界面+数据集
【算法介绍】 基于YOLOv10的烟雾明火检测森林火灾系统是一种先进的火灾预警系统,它结合了深度学习和计算机视觉技术,能够实时检测和分析森林中的烟雾和明火,从而有效预防和控制森林火灾的发生。 该系统主要基于YOLOv10模型进行构建…...

UltraISO(软碟通)制作U盘制作Ubuntu20.04启动盘
目录 一、启动盘制作 1、工具准备 2、打开UltraISO后,点击左上角的文件,在打开的下拉项中,选择打开准备好的Ubuntu系统20.04 LTS镜像文件(ubuntu-20.04-desktop-amd64.iso); 3、然后点击启动->写入硬盘映像 4、在弹出的窗…...

【EtherCAT实践篇一】TwinCAT 3安装、使用
TwinCAT 基于 PC 的开放式控制技术 倍福推出的基于 PC 的控制技术定义了自动化领域的全球标准。在软件方面,1996 年推出的 TwinCAT(The Windows Control and Automation Technology,基于 Windows 的控制和自动化技术)自动化套件是…...

4、CSS3笔记
文章目录 四、CSS3CSS3简介css3概述CSS3私有前缀什么是私有前缀为什么要有私有前缀常见浏览器私有前缀 CSS3基本语法CSS3新增长度单位CSS3新增颜色设置方式CSS3新增选择器CSS3新增盒模型相关属性box-sizing 怪异盒模型resize 调整盒子大小box-shadow 盒子阴影opacity 不透明度 …...
Docker无法拉取镜像解决办法
Docker 无法拉取镜像解决办法 一.现象描述 在docker拉取镜像的时候重复拉取镜像然后超时。 二.解决办法 1.配置国内镜像源地址加速 vi /etc/docker/daemon.json在文件中增加如下内容 { "registry-mirrors": ["https://docker.m.daocloud.io","h…...

Ubuntu 20.04安装Qt 5.15(最新,超详细)
Ubuntu 20.04安装Qt 5.15 1. 准备注册Qt账号安装依赖下载安装工具 2. 安装3. 测试参考 前言 Qt 是一个跨平台的应用程序框架,它支持开发 C 图形用户界面应用程序。Qt 可以用于开发运行在多种操作系统上的应用程序,包括 Windows、Linux、macOS 和各种移动…...

IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...

利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...

2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...