当前位置: 首页 > 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 内核更…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...