Web入门
Spring
官网:Spring | Home
Spring是一个开源的Java企业级应用开发框架。Spring的主要目的是使Java EE(Java Platform, Enterprise Edition)开发更容易,并且通过提供一系列丰富的库和接口来促进良好编程实践,是当下最流行的java框架。
时至今日,Spring已经形成了一种开发生态圈,Spring提供了若干个子项目,每个项目用于完成特定的功能。
Spring提供了一系列与Spring框架相关的、用于构建企业级应用程序的开源项目集合。如Spring Framework、Spring Boot、Spring Data、Spring Cloud、Spring Security等......这些项目提供了从基础设施到业务逻辑处理、再到前端展示的全栈解决方案,被称为Spring全家桶。
这些子项目都是基于Spring Framework,这是一个基础框架。但如果我们在项目中直接基于Spring框架进行项目的开发,又会存在配置繁琐、入门难度大等问题。因为推出了Spring Boot,基于Spring Boot我们可以快速开发Spring应用程序。因此Web需要从Spring Boot开始并贯穿始终。
SpringBootWeb
Spring Boot Web 是 Spring Boot 框架中的一个重要模块,它提供了用于构建 Web 应用程序的核心功能和依赖项。
我们从一个例子来引入:使用SpringBootWeb开发一个web应用,浏览器·发起请求/hello后,浏览器输出字符串“Hello World~”
一、创建springboot工程,并勾选web开发相关依赖



二、创建HelloController类,添加方法hello,并添加注解
在src-main-java-包名-java类名中,系统自动创建了一个类,我们称之为启动类,而在src-main-java-resources-application.properties目录下的文件为默认配置文件,我们目前还用不到,但可以先了解。

在src-main-java-包名目录下直接创建java类文件或者包+类(命名时包名.类名即可,例:controller.HelloControl),并在该文件下编写对应程序
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController//从java类变为请求处理类
public class HelloControl {@RequestMapping("/hello")//指定当前方法处理/hello请求public String hello(){System.out.println("hello world!");return "hello world!";//返回给浏览器的值}
}
回到系统自动创建的启动类并运行,我们可以看到
. ____ _ __ _ _/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/ ___)| |_)| | | | | || (_| | ) ) ) )' |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot :: (v3.3.5)2024-11-10T00:01:03.520+08:00 INFO 9560 ......略
2024-11-10T00:01:04.247+08:00 INFO 9560 --- [myweb] [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/'
2024-11-10T00:01:04.003+08:00 INFO 9560 ......略......
上方为spring的logo,下方未省略一行表示系统会自动占用8080端口,此时我们使用浏览器访问网址http://localhost:8080/hello即可看到浏览器输出的语句和idea控制台接收到的语句


HTTP协议
我们不难发现,上文中的地址在地址框中为localhost:8080/hello,但复制下来后为http://localhost:8080/hello,前面自动补充了http://,补充的这部分正是是URL的协议部分。我们知道浏览器发送请求,服务器返回数据,而发送的请求和返回的数据需要以某种特定格式编写,而规定了这种格式的正是http协议。
概述
HTTP(HyperText Transfer Protocol,超文本传输协议)是一种应用层协议。主要用于在Web浏览器和服务器之间传输数据。
特点:
- 基于TCP协议:面向连接,确保了数据传输的可靠性和顺序。
- 基于请求-响应模型:一次请求对应一次响应,简化了交互逻辑。
- 是无状态的协议:即不保存用户会话信息,传输效率高,但多次请求之间无法共享数据。
请求协议
我们以之前的网址为例,F12打开开发者工具,点击网络并刷新网页,即可看到数据请求与返回的数据,点击原始/View source即可查看原始数据:
GET /hello HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cache-Control: max-age=0
Connection: keep-alive
Host: localhost:8080
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0
sec-ch-ua: "Chromium";v="130", "Microsoft Edge";v="130", "Not?A_Brand";v="99"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
这个数据分为三个部分:请求行、请求头、请求体三部分。我们依次介绍:
请求行:第一行为请求行 分别表示请求方式、请求路径、请求协议。这里get表示请求方式,/hello表示请求路径,HTTP/1.1表请求协议的版本,中间以空格分隔:
GET /hello HTTP/1.1
请求头: 请求头包含了客户端(如浏览器)发送给服务器的各种信息,用于描述请求的细节。它是K-V的键值对,":"前为请求头的名字,后为对应的值,中间以":"分隔。
GET /index.html HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 27
以下为常见的请求头:(了解即可)
- Host:请求的主机名,例如localhost:8080即本机的8080端口
- User-Agent:标识发送请求的客户端类型,包括浏览器、操作系统等信息。服务器可以根据该信息为不同的客户端提供对应的响应。
- Accept:表示浏览器能够接收的资源类型,如text/*表文本,image/*表图片,*/*表所有
- Accept-Language:表浏览器偏好的语言,如中文、英文等。服务器据此返回不同语言的网页。
- Accept-Encoding:指定客户端支持的压缩类型,如gzip、deflate等。服务器可以根据该信息对响应进行压缩,以减少传输数据量。
- Content-Type:指示请求体的媒体类型,即发送的数据类型。常见的类型包括application/json(JSON数据格式)、application/x-www-form-urlencoded(表单数据格式)、multipart/form-data(文件上传格式)等。这有助于服务器正确解析和处理请求体中的数据。
- Content-Length:表示请求体的长度(以字节为单位)。
请求体:post请求特有的一个部分,存放请求参数,与请求体以空行分隔
GET:请求参数在请求行中,没有请求体。GET请求有大小限制。
POST:请求参数在请求体中,POST没有大小限制。
GET方法的数据直接在请求行中,在开发者工具-网络-右键单击数据-标头即可查看

POST方法的数据直接请求体中,在开发者工具-网络-右键单击数据-负载即可查看

响应协议
其和请求协议的数据类似,也是由三个部分组成,分为响应行、响应头、响应体
响应行:第一行为响应行 分别表示HTTP版本、状态码以及状态描述。
HTTP/1.1 200 OK
| 状态码 | 含义 |
| 1XX | 响应中:临时状态码,表明请求已经接受,需要继续处理(较少使用) |
| 2XX | 响应成功:请求已成功接收,处理已完成 |
| 3XX | 重定向:重新定向到其他地方,让客户端重新发起请求 |
| 4XX | 客户端错误:客户端的问题导致服务器无法处理请求 |
| 5XX | 服务端错误:服务端的问题导致服务器无法处理请求 |
其中有三个状态码我们最常遇见,需掌握:
| 状态码 | 英文描述 | 含义 |
| 200 | OK | 请求成功 |
| 404 | Not Found | 资源不存在 |
| 500 | Internal Servel Error | 服务器错误 |
响应头:包含关于响应的元数据,如内容类型、服务器信息、日期等。也是K-V的键值对。
以下为常见的响应头:
- Content-Type:响应内容的资源类型,如text/*表文本,image/*表图片,*/*表所有
- Content-Length:表示响应内容的长度(以字节为单位)。
- Content-Encoding:响应数据的压缩类型,如gzip。
- Cache-Control:指定浏览器缓存方式,如max-age=300表浏览器数据最多在本地缓存300s。
- Set-Cookie:告诉浏览器为当前页面所在的域设置Cookie
响应体:最后一部分,存放响应数据,与响应头以空行分隔。
协议解析
解析HTTP协议分为两部分:客户端和服务端,客户端解析由浏览器内置的程序完成,我们只需要在服务器端通过java程序来接收客户端浏览器发起的请求。
但想要手动编写代码来实现的话,非常费时费力,但因为http协议是固定的,所以解析代码也是大抵相同的有很多公司专门实现该功能:
对HTTP协议进行封装,简化web程序开发。
部署web项目,对外提供网上信息浏览服务。
Tomcat就是其中之一。
Tomcat
Tomcat是一个开源免费的轻量级Web服务器,官网Apache Tomcat® - Welcome!
基本使用
一、前往官方网站下载安装包并解压安装,安装后的文件目录:
- bin:可执行文件
- conf:配置文件
- lib:依赖jar包
- logs:日志文件
- temp:临时文件
- webapps:应用发布目录
- work:工作目录
二、启动:双击bin\startup.bat,此时会出现乱码,为避免这一情况,我们需要将conf/logging.properties中的代码进行修改
java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
java.util.logging.ConsoleHandler.encoding = UTF-8
————————————————————————修改后————————————————————————
java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
java.util.logging.ConsoleHandler.encoding = GBK
三、部署项目
将项目复制到webapps目录下,即部署完成
四、关闭程序,有三种方法
- 直接点击窗口右上角的×:强制关闭
- 点击bin\shutdown.bat:正常关闭
- Ctrl+C:正常关闭
常见问题
启动窗口闪退:JAVA_HOME环境变量配置存在问题
端口号冲突:找到占用端口的程序并关闭
配置端口号
打开conf/server.xml文件,并修改“port=“8080””
<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443"maxParameterCount="1000"/>
若端口号为80,则访问时会省略“:80”
总结
创建完项目后,我们可以看到系统已将tomcat放入依赖项之中
其中spring-boot-starter-web包含了web应用开发所需要的常见依赖, spring-boot-starter-test包含了单元测试所需要的常见依赖。
这一系列依赖都称为起步依赖,引入起步依赖后,通过maven的依赖传递,会自动下载包含tomcat依赖在内的其他依赖,并将tomcat启动起来,免去我们手动去启动安装的tomcat,我们也称之为内嵌的tomcat服务器。
官方提供的起步依赖官网:Spring Boot
相关文章:
Web入门
Spring 官网:Spring | Home Spring是一个开源的Java企业级应用开发框架。Spring的主要目的是使Java EE(Java Platform, Enterprise Edition)开发更容易,并且通过提供一系列丰富的库和接口来促进良好编程实践,是…...
基于SpringBoot网上超市的设计与实现录像
基于SpringBoot网上超市的设计与实现录像 SpringBoot网上超市的设计与实现录像...
python爬虫(二)爬取国家博物馆的信息
import requests from bs4 import BeautifulSoup# 起始网址 url https://www.chnmuseum.cn/zx/xingnew/index_1.shtml # 用于存储所有数据 all_data [] page 1 global_index 1 # 定义全局序号变量并初始化为1 while True:html_url requests.get(url).textif requests.get…...
【mysql的当前读和快照读】
在MySQL中,尤其是InnoDB存储引擎中,读操作主要分为两种:当前读(Current Read)和快照读(Snapshot Read) 当前读 当前读每次读取的都是当前最新的数据。这种读操作在读取数据时不允许其他事务对这…...
[CKS] Audit Log Policy
最近准备花一周的时间准备CKS考试,在准备考试中发现有一个题目关于audit policy的题目。 专栏其他文章: [CKS] Create/Read/Mount a Secret in K8S-CSDN博客[CKS] Audit Log Policy-CSDN博客 -[CKS] 利用falco进行容器日志捕捉和安全监控-CSDN博客[CKS] K8S Netw…...
【Linux】-学习笔记03
第十一章-管理Linux软件包和进程 1.源码下载安装软件 1.1概念 源码文件:程序编写者使用C或C等语言编写的原始代码文本文件 源码文件使用.tar.gz或.tar.bz2打包成压缩文件 1.2特点 源码包可移植性好,与待安装软件的工作环境依赖性不大 由于有编译过程…...
Leetcode热题100-32 最长有效括号
Leetcode热题100-32 最长有效括号 1. 题目描述2. 解题思路动态规划栈解法 3. 代码实现动态规划栈解法 1. 题目描述 32 最长有效括号 2. 解题思路 动态规划 定义状态: 设 dp[i] 表示以位置 i 结尾的最长有效括号子串的长度。 状态转移方程: 遍历字符…...
【大数据学习 | HBASE】hbase的读数据流程与hbase读取数据
1. hbase的读数据流程 在解析读取流程之前我们还需要知道两个功能性的组件和HFIle的格式信息 HFILE 存储在hdfs中的hbase文件,这个文件中会存在hbase中的数据以kv类型显示,同时还会存在hbase的元数据信息,包括整个hfile文件的索引大小&…...
A027-基于Spring Boot的农事管理系统
🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…...
Redisson的可重入锁
初始状态: 表示系统或资源在没有线程持有锁的情况下的状态,任何线程都可以尝试获取锁。 线程 1 获得锁: 线程 1 首次获取了锁并进入受保护的代码区域。 线程 1 再次请求锁: 在持有锁的情况下,线程 1 再次请求锁&a…...
SQL Server Service Broker完整示例
目录 准备 创建Message,Contract,Queue和Service 创建调用存储过程 启用SQL Agent并创建Job执行存储过程 调用demo 常见故障排除 准备 判断你的数据库YourDatabaseName是否启用了Service Broker SELECT is_broker_enabled FROM sys.databases WH…...
CentOS7 升级OpenSSH9.0全过程和坑
近日,漏洞肆虐,需要升级新版本,才能解决漏洞。故有此文: 0 查看当前版本 [root@host-testsvc openssh-9.0p1]# ssh -V OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 20171、在data下新建一个独立目录openssh目录,用来存放软件 [root@host-testsvc data]# mkdir openssh…...
RSTP的配置
RSTP相对于STP在端口角色、端口状态、配置BPDU格式、配置BPDU的处理方式、快速收敛机制、拓扑变更机制和4种保护特性方面的详细改进说明: 端口角色: STP中定义了三种端口角色:根端口(Root Port)、指定端口࿰…...
力扣257:二叉树的所有路径
给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子节点的节点。 示例 1: 输入:root [1,2,3,null,5] 输出:["1->2->5","1->3"]示例…...
Tcl 和 Python 在二次开发研究
引言 Tcl(Tool Command Language)和 Python 都是广泛应用于各种领域的编程语言,特别是在二次开发和自动化开发方面,两者有着独特的特性。Tcl 是一种动态的脚本语言,早期主要用于集成和控制其他程序,因此它经常出现在嵌入式应用和图形用户界面(GUI)开发中。而 Python 是…...
【NLP优化】Ubuntu 20.04 下 源码安装 CasADi + Ipopt / acados
20241114 记录一下 Ubuntu 20.04 下安装 MPC 中两种常用开源 NLP 优化器 CasADi + Ipopt / acados 可以新建一个文件夹,保存所有源码安装下载的代码 mkdir ~/mpc_dep1. 安装依赖 # **IPOPT** sudo apt-get install gcc g++ gfortran git patch wget pkg-config libmetis-de…...
[241110] 微软发布多智能体系统Magentic-One | 社区讨论:Ubuntu 26.04 LTS 发布前移除 Qt 5
目录 微软发布多智能体系统 Magentic-One社区讨论:Ubuntu 26.04 LTS 发布前移除 Qt 5 微软发布多智能体系统 Magentic-One 微软研究院近日发布了一个名为 Magentic-One 的多智能体系统,旨在解决复杂的现实世界任务。这个系统展现了令人兴奋的潜力&#…...
AI风向标|算力与通信的完美融合,SRM6690解锁端侧AI的智能密码
当前,5G技术已经成为推动数字经济和实体经济深度融合的关键驱动力,进入5G发展的下半场,5G与AI的融合正推动诸多行业的数字化转型和创新发展,终端侧AI和端云混合式AI将广泛应用于各类消费终端和各行各业。 在推动5G和AI与各行业场…...
MySQL查询执行(六):join查询
到底可不可以使用join 假设存在如下表结构: -- 创建表t2 CREATE TABLE t2 (id int(11) NOT NULL,a int(11) DEFAULT NULL,b int(11) DEFAULT NULL,PRIMARY KEY (id),KEY a (a) ) ENGINEInnoDB;-- 向t2写入1000条数据 drop procedure idata; delimiter ;; create pr…...
python习题练习
python习题 编写一个简单的工资管理程序系统可以管理以下四类人:工人(worker)、销售员(salesman)、经理(manager)、销售经理(salemanger)所有的员工都具有员工号,工资等属性,有设置姓名,获取姓名,获取员工号,计算工资等…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...
Ubuntu系统多网卡多相机IP设置方法
目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机,交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息,系统版本:Ubuntu22.04.5 LTS;内核版本…...
GraphRAG优化新思路-开源的ROGRAG框架
目前的如微软开源的GraphRAG的工作流程都较为复杂,难以孤立地评估各个组件的贡献,传统的检索方法在处理复杂推理任务时可能不够有效,特别是在需要理解实体间关系或多跳知识的情况下。先说结论,看完后感觉这个框架性能上不会比Grap…...
背包问题双雄:01 背包与完全背包详解(Java 实现)
一、背包问题概述 背包问题是动态规划领域的经典问题,其核心在于如何在有限容量的背包中选择物品,使得总价值最大化。根据物品选择规则的不同,主要分为两类: 01 背包:每件物品最多选 1 次(选或不选&#…...
