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

JavaWeb——004Maven SpringBootWeb入门

一、Maven

1、什么是maven?

2、Maven的作用是什么?(3种)

1.1、方便的依赖管理

依赖管理:有了Maven,我们就不用再手动导入Jar包了,我们只需要在配置文件当中,简单描述一下项目所需要的依赖信息即可,Maven会自动联网下载:

1.2、统一的项目结构

不管你用的是什么开发工具,只要是使用了Maven,那么项目下的目录结构都是一样的:

1.3、标准化的项目构建流程

自动化项目构建:我们可以通过Maven可以快速的完成编译、测试、打包、发布等流程

1.4、小结

3、Maven的概述

主要分为两个部分:

  • 介绍
  • 安装

3.1、介绍

Maven的模型:(通过Maven提供的各种各样的插件来完成项目的标准化构建) 

项目对象模型(POM): 

仓库:

 私服:可以理解为镜像网站,国内访问速度会比访问中央仓库快

3.2、安装

解压Maven压缩包

maven的目录结构:

 配置本地仓库,修改conf/settings.xml文件:

在指定位置创建本地仓库文件夹(mvn_repo): 

配置阿里云私服地址:(还是在conf/settings.xml文件中) 

配置环境变量: 

 此外,还需要将maven的bin目录加入到path变量中:

测试是否安装成功: 

mvn -v

 

4、IDEA集成Maven

4.1、配置Maven环境(第一种方案 -- 当前工程)

4.2、配置Maven环境(第二种方案 -- 全局参数)

4.3、创建Maven项目

JDK17在创建项目的时候可以勾选maven

细节:Maven在创建目录结构时,由于test目录下面的resources不常用,所以一般不会自动创建,如果我们需要,可以自己手动进行创建 

4.4、导入Maven项目

4.5、补充:Maven坐标

5、依赖管理(Maven最核心的功能)

主要为四部分:

  • 依赖配置
  • 依赖传递
  • 依赖范围
  • 生命周期

①、依赖配置

示例:(引入logback依赖 如果想要查找想要的依赖,可以去Maven仓库去查找: https://mvnrepository.com/

②、依赖传递

依赖具有传递性

 依赖关系

图形展示依赖关系

排除依赖:(比如A项目只想依赖B项目,不想依赖B项目下的依赖,那么就用到了排除依赖)

 

演示

执行过后

③、依赖范围

默认情况下(compile):在任意情况下都有效

scope值为test :仅在测试程序中有效

④、Maven的生命周期

我们主要需要关注的有五个阶段:

当我们运行package阶段,前面的compile阶段也会运行

命令行方式来执行生命周期:

 

clean阶段

删除编译好的target目录

compile阶段

编译当前项目文件,生成的编译文件会存到target目录下

test阶段

test阶段是运行当前项目中所有的单元测试,那么要想运行单元测试,那么就需要有junit依赖:

测试书写方法

@Test

运行后标志

package阶段

我们在运行package阶段的过程中,其前面的阶段也会被运行:

install阶段

就是将打好的jar包安装到maven的本地仓库

实际上Maven的生命周期/阶段都是抽象的概念,其并不执行具体的操作,它具体的操作都是由与之绑定的Maven插件所执行的,因为Maven本身就是一个插件执行框架,所有的工作都是由插件完成的。

小结

二、Web入门(Spring Boot)

1、Why Spring Boot?

Spring所有的项目几乎都依赖于 Spirng Framework,但由于Spring Framework配置繁琐,入门难度大,所有后来Spring公司就又推出了Spring Boot用来尽可能快的构建一个Spirng应用: 

但Spring Boot其本质还是依赖于Spring Framework,只是为其简化了配置 

2、SpringBootWeb快速入门

2.1、开发步骤(创建/定义/运行)

创建一个springboot工程(使用Spring Initializr)

文件结构: 

 定义HelloController类,添加方法hello,并添加注解:

package com.yaqi.controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;//请求处理类
@RestControllerpublic class HelloController {@RequestMapping("/hello")public String hello(){System.out.println("HelloWorld~");return "HelloWorld~";}
}

 运行测试:(运行启动文件)

3、HTTP协议

3.1、HTTP的概述

我们所说的这个HTTP协议其实就是数据传输的规则和格式,主要包括两个方面:

  • 一个是请求数据的格式
  • 一个是响应数据的格式

请求和响应数据的原始格式其实就是一个文本字符串,且格式非常固定

第一行指代了请求的方式、请求的资源路径、以及请求协议

而之后的这些我们都称之为请求头,每一个请求头的格式,前面是请求头的名字,后面是请求头的值,头和值通过一个冒号进行分隔:

HTTP是一个无状态的协议:

关于无状态协议的理解:即HTTP的每次请求与响应都是独立的,后一次请求是不会记录前一次请求的数据的,多次请求之间不会数据共享。如:我第一次登录成功,第二次访问其它页面,这就造成了我第二次访问页面的请求并不知道我第一次请求的时候是否登录成功,这就出现了问题。但该问题可以通过Web会话技术(Cookie\Session)来解决。

3.2、HTTP的请求协议

GET请求没有请求体,且请求大小有限制

POST请求有请求题,请求大小无限制

常见的请求头:

3.3、HTTP的响应协议

HTTP的响应协议同请求协议格式相同,也是由三个部分组成的:

响应行、响应头、响应体

 状态码:

2xx:成功

4xx:客户端错误

5xx:服务器错误

状态码大全: HTTP 响应状态码 - HTTP | MDN 

 常见的响应状态码:

重定向(3xx):

(浏览器需要的资源被服务器A移到了服务器B,那么A服务器就会给浏览器返回一个状态码,并且再告诉浏览器让其去访问B服务器上的某个资源即可)

 常见的响应头:

3.4、HTTP协议解析

简单的协议解析示例程序:

Socket & ServerSocket:

 

有了Web服务器之后,就不需要程序员再去直接操作HTTP协议,关于HTTP解析和处理的代码都不用去做了,开发人员只需要关注当前的业务逻辑实现即可,这样就使得Web程序的开发更加简单和便捷。 

三、Web服务器(Tomcat)

1、Tomcat简介

小结

 

2、Tomcat的基本使用

Tomcat是基于Java开发的,默认占用端口:8080

解决中文乱码:修改配置文件中的字符编码 

常见问题:(环境变量配置错误、端口号冲突) 

配置Tomcat端口号: 

示例: 

 

Tomcat项目部署: 

将web页面部署到Tomcat服务器:(只需要将想要部署的项目文件夹复制到Tomcat目录下的webapps目录下即可) 

3、SpringBootWeb — 入门程序解析

①、创建SpringBoot项目

手动创建:

1. 创建maven项目

在idea中创建一个maven项目,正常填写项目的坐标信息。如下图所示:

输入项目的基本信息之后,点击finish,就可以创建一个maven项目

但是这个maven项目目前并不是springboot项目,我们还需要做如下两步操作。

2. pom.xml配置

1). 在pom.xml中指定springboot的父工程

<!-- springboot父工程-->
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.4</version><relativePath/> <!-- lookup parent from repository -->
</parent>

2). 添加springboot项目的起步依赖以及maven插件

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
</dependencies>
​
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build>

 

3.3 入门程序解析

关于web开发的基础知识,我们可以告一段落了。下面呢,我们在基于今天的核心技术点SpringBoot快速入门案例进行分析。

3.3.1 Spring官方骨架

之前我们创建的SpringBoot入门案例,是基于Spring官方提供的骨架实现的。

Spring官方骨架,可以理解为Spring官方为程序员提供一个搭建项目的模板。

我们可以通过访问:https://start.spring.io/ ,进入到官方骨架页面

 

Spring官方生成的SpringBoot项目,怎么使用呢?

  • 解压缩后,就会得到一个SpringBoot项目工程

 

打开pom.xml文件,我们可以看到springboot项目中引入了web依赖和test依赖

结论:不论使用IDEA创建SpringBoot项目,还是直接在官方网站利用骨架生成SpringBoot项目,项目的结构和pom.xml文件中内容是相似的。

3.3.2 起步依赖

在我们之前讲解的SpringBoot快速入门案例中,同样也引用了:web依赖和test依赖

spring-boot-starter-web和spring-boot-starter-test,在SpringBoot中又称为:起步依赖

而在SpringBoot的项目中,有很多的起步依赖,他们有一个共同的特征:就是以spring-boot-starter-作为开头。在以后大家遇到spring-boot-starter-xxx这类的依赖,都为起步依赖。

起步依赖有什么特殊之处呢,这里我们以入门案例中引入的起步依赖做为讲解:

  • spring-boot-starter-web:包含了web应用开发所需要的常见依赖

  • spring-boot-starter-test:包含了单元测试所需要的常见依赖

spring-boot-starter-web内部把关于Web开发所有的依赖都已经导入并且指定了版本,只需引入 spring-boot-starter-web 依赖就可以实现Web开发的需要的功能

Spring的官方提供了很多现成的starter(起步依赖),我们在开发相关应用时,只需要引入对应的starter即可。

官方地址:Spring Boot Reference Documentation

每一个起步依赖,都用于开发一个特定的功能。

举例:当我们开发中需要使用redis数据库时,只需要在SpringBoot项目中,引入:spring-boot-starter-redis ,即可导入redis开发所需要的依赖。

3.3.2 SpringBoot父工程

在我们之前开发的SpringBoot入门案例中,我们通过maven引入的依赖,是没有指定具体的依赖版本号的。

为什么没有指定<version>版本号,可以正常使用呢?

  • 因为每一个SpringBoot工程,都有一个父工程。依赖的版本号,在父工程中统一管理。

3.3.3 内嵌Tomcat

问题:为什么我们之前书写的SpringBoot入门程序中,并没有把程序部署到Tomcat的webapps目录下,也可以运行呢?

原因呢,是因为在我们的SpringBoot中,引入了web运行环境(也就是引入spring-boot-starter-web起步依赖),其内部已经集成了内置的Tomcat服务器。

我们可以通过IDEA开发工具右侧的maven面板中,就可以看到当前工程引入的依赖。其中已经将Tomcat的相关依赖传递下来了,也就是说在SpringBoot中可以直接使用Tomcat服务器。

当我们运行SpringBoot的引导类时(运行main方法),就会看到命令行输出的日志,其中占用8080端口的就是Tomcat。

相关文章:

JavaWeb——004Maven SpringBootWeb入门

一、Maven 1、什么是maven&#xff1f; 2、Maven的作用是什么&#xff1f;&#xff08;3种&#xff09; 1.1、方便的依赖管理 依赖管理&#xff1a;有了Maven&#xff0c;我们就不用再手动导入Jar包了&#xff0c;我们只需要在配置文件当中&#xff0c;简单描述一下项目所需要…...

数据结构与算法-常用排序算法

一、常用排序说明 当涉及排序算法时&#xff0c;理解每个算法的工作原理、时间复杂度和空间复杂度是至关重要的。下面对常用排序算法进行详细说明&#xff1a; 1、冒泡排序&#xff08;Bubble Sort&#xff09;&#xff1a; 工作原理&#xff1a;比较相邻的元素并交换&am…...

链表之“无头单向非循环链表”

目录 ​编辑 1.顺序表的问题及思考 2.链表 2.1链表的概念及结构 2.2无头单向非循环链表的实现 1.创建结构体 2.单链表打印 3.动态申请一个节点 3.单链表尾插 4.单链表头插 5.单链表尾删 6.单链表头删 7.单链表查找 8.单链表在pos位置之前插入x 9.单链表删除pos位…...

一休哥助手网页版如何使用

一休哥助手网页版可以使用GPT4提问了&#xff0c;具体操作流程如下&#xff1a; 1.登录网页版一休哥助手&#xff08;首次打开页面时&#xff0c;初始化久一点&#xff0c;请耐心等一下&#xff09; https://www.fudai.fun 2.登录后就可以使用GPT4了 3.你还可以自定义系统角色…...

个人博客系统测试

文章目录 一、项目介绍二、测试1. 功能测试2. 自动化测试&#xff08;1&#xff09;添加相关依赖&#xff08;2&#xff09;新建包并在报下创建测试类&#xff08;3&#xff09;亮点及难点 一、项目介绍 个人博客系统采用前后端分离的方法来实现&#xff0c;同时使用了数据库来…...

智慧应急的未来:物联网技术引领智慧应急发展新趋势

一、引言 随着社会的快速发展&#xff0c;各类突发事件频繁发生&#xff0c;对社会的安全稳定构成了严重威胁。传统的应急管理模式已难以满足现代社会对安全保障的需求&#xff0c;急需探索新型的应急管理手段。在这个背景下&#xff0c;智慧应急应运而生&#xff0c;以其高效…...

字符串摘要(C语言)

题目描述 给定一个字符串的摘要算法&#xff0c;请输出给定字符串的摘要值。 去除字符串中非字母的符号。如果出现连续字符&#xff08;不区分大小写&#xff09;&#xff0c;则输出&#xff1a;该字符&#xff08;小写&#xff09; 连续出现的次数。如果是非连续的字符&…...

Linux进一步研究权限-----------ACL使用

一、使用情况 1.1、场景: 某个大公司&#xff0c;在一个部门&#xff0c;有一个经理和手下有两个员工&#xff0c;在操控一个Linux项目,项目又分为三期做&#xff0c;然而一期比较重要&#xff0c;经理带着员工做完了&#xff0c;公司就觉得技术难点已经做完攻克了&#xff0…...

剪辑视频调色软件有哪些 剪辑视频软件哪个最好 剪辑视频怎么学 剪辑视频的方法和步骤 会声会影2024 会声会影视频制作教程

看了很多调色教程&#xff0c;背了一堆调色参数&#xff0c;可最终还是调不出理想的效果。别再怀疑自己了&#xff0c;不是你的剪辑技术不行&#xff0c;而是剪辑软件没选对。只要掌握了最基本的调色原理&#xff0c;一款适合自己的视频剪辑软件是很容易出片的。 有关剪辑视频…...

【Linux进阶之路】Socket —— “UDP“ “TCP“

文章目录 一、再识网络1. 端口号2. 网络字节序列3.TCP 与 UDP 二、套接字1.sockaddr结构2.UDP1.server端1.1 构造函数1.2 Init1.3 Run 2.客户端1.Linux2.Windows 3.TCP1. 基本接口2. 客户端3. 服务端1.版本12.版本23.版本34.版本4 三、守护进程尾序 一、再识网络 1. 端口号 在…...

一些用 GPT 翻译的计算机科学/人工智能 PDF 讲义

3D成像.pdf3D成像技术.pdf3D点云分析.pdfAAAI 2019 笔记.pdfCMU 10.708 概率图模型讲义.pdfCMU 15-312 编程语言基础讲义.pdfCMU 15-411 编译器设计讲义.pdfCMU 15-819 同伦类型论讲义.pdfCMU 15-819O 程序分析讲义.pdfCUNY CSci335 软件设计与分析 3 讲义.pdfDixie IT4500 信息…...

重大更新:GPT-4 API 现全面向公众开放!

重大更新&#xff1a;GPT-4 API 现全面向公众开放&#xff01; 在 AIGC&#xff08;人工智能生成内容&#xff09;领域内&#xff0c;我们一直致力于跟踪和分析如 OpenAI、百度文心一言等大型语言模型&#xff08;LLM&#xff09;的进展及其在实际应用中的落地情况。我们还专注…...

【Python笔记-设计模式】对象池模式

一、说明 用于管理对象的生命周期&#xff0c;重用已经创建的对象&#xff0c;从而减少资源消耗和创建对象的开销 (一) 解决问题 主要解决频繁创建和销毁对象所带来的性能开销问题。如数据库连接、线程管理、网络连接等&#xff0c;对象的创建和销毁成本相对较高&#xff0c…...

反序列化 [NPUCTF2020]ReadlezPHP1

打开题目 直接查看源代码 打开源代码发现了个./time.php?source 访问一下 审计代码&#xff1a; 现存在反序列化语句&#xff1a;$ppp unserialize($_GET["data"]);和执行漏洞&#xff1a;echo $b($a); 发现在__destruct()方法里面有 echo $b($a); 这个是php的…...

AI技术那些事儿:揭开潜伏在你生活中的高科技小能手

你有没有发现&#xff0c;现在的生活里有些“看不见”的聪明家伙&#xff0c;它们时时刻刻在帮咱们忙活呢&#xff1f;从早上用语音命令打开窗帘、播报新闻&#xff0c;到晚上喊一声关灯睡觉&#xff0c;这些都离不开人工智能&#xff08;简称AI&#xff09;的助攻。今天咱就掰…...

使用向量数据库pinecone构建应用06:日志系统异常检测 Anomaly Detection

Building Applications with Vector Databases 下面是这门课的学习笔记&#xff1a;https://www.deeplearning.ai/short-courses/building-applications-vector-databases/ Learn to create six exciting applications of vector databases and implement them using Pinecon…...

抽象工厂模式 Abstract Factory

1.模式定义: 提供一个创建一系列相关或互相依赖对象的接口&#xff0c;而无需指定它们具体的类 2. 应用场景: 程序需要处理不同系列的相关产品&#xff0c;但是您不希望它依赖于这些产品的 具体类时&#xff0c; 可以使用抽象工厂 3.优点: 1.可以确信你从工厂得到的产品彼…...

掌握 Android 中的 RecyclerView 优化

掌握 Android 中的 RecyclerView 优化 一、RecyclerView Pool以及何时使用它二、onCreateViewHolder 和 onBindViewHolder三、优化 RecyclerView 的不同方法四、视图无效与请求布局五、ViewHolder模式六、默认的废料和脏视图类型七、结论 RecyclerView 是 Android 中一个功能强…...

Android platform tool中d8.bat不生效

d8.bat因找不到java_exe文件&#xff0c;触发EOF d8.bat中之前代码为&#xff1a; set java_exe if exist "%~dp0..\tools\lib\find_java.bat" call "%~dp0..\tools\lib\find_java.bat" if exist "%~dp0..\..\tools\lib\find_java.bat" …...

WSL安装Ubuntu22.04,以及深度学习环境的搭建

安装WSL 安装 WSL 2 之前&#xff0c;必须启用“虚拟机平台”可选功能。 计算机需要虚拟化功能才能使用此功能。 以管理员身份打开 PowerShell 并运行&#xff1a; dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart下载 Linux 内核更…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障

关键领域软件测试的"安全密码"&#xff1a;Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力&#xff0c;从金融交易到交通管控&#xff0c;这些关乎国计民生的关键领域…...

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...

Leetcode33( 搜索旋转排序数组)

题目表述 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...