目录
一、 Web应用程序的工作原理
万维网(WWW,World Wide Web),也常常简称为Web。
用户访问资源的步骤:
(1)在浏览器地址栏输入网址
(2)浏览器向目标服务器发出请求
(3)服务器接收到请求后进行业务处理,生成处理结果
(4)服务器将处理结果返回给浏览器
(5)浏览器以网页的形式将结果展示给用户
其中:
-
用户输入的网址称为统一资源定位符(URL),是资源存放在网络上的唯一地址。
-
浏览器与服务器之间的交互方式需要遵循超文本传输协议(HTTP),协议指定浏览器发送给服务器什么请求以及得到什么响应。
二、HTTP(超文本传输协议)
2.1 HTTP概述
HTTP(超文本传输协议)是一种用于传输超文本文档(如HTML)的应用层协议,它是Web上数据传输的基础。HTTP使用客户端-服务器模型,客户端发起请求,服务器响应请求,并在它们之间进行交互。
HTTP是一种无状态协议,这意味着每个请求都是相互独立的,服务器不会在请求之间保留任何关于客户端的信息。为了实现状态管理,通常需要使用cookie等机制。
此外,随着时间的推移,HTTP协议也经历了多个版本的更新,包括HTTP/1.0、HTTP/1.1和最近的HTTP/2。这些更新旨在提高性能、安全性和可靠性,以适应不断增长的互联网需求。
① HTTP请求—响应模型
HTTP主要由请求和响应构成,如下图。客户端在和服务器建立连接后可以发起请求,请求通常会包含请求的方式和资源路径,每种请求方式都规定了客户端与服务器联系的具体形式。服务器接收到请求后会做出响应,可以根据请求找到对应的资源进行处理:若为静态资源,则直接将资源的内容发送给客户端;若为动态内容和程序,则进行执行,把处理后的结果以HTML的形式发送给客户端。
资源可以是各式各样的
-
一个原封不动返回浏览器的简单HTML文件
-
一个动态生成响应的程序。
② HTTP的一般工作流程:
-
建立连接:客户端(通常是Web浏览器)向服务器发送一个HTTP请求以建立连接。
-
发送请求:客户端发送一个HTTP请求,其中包含要获取的资源的信息,比如URL、请求方法(比如GET、POST等)、HTTP版本号、请求头部和请求体等。
-
处理请求:当服务器收到请求后,会解析请求并定位所请求的资源,然后准备一个HTTP响应来返回客户端。
-
发送响应:服务器会发送一个HTTP响应给客户端,其中包含了状态码、响应头部和响应体。状态码表示了请求的处理结果,如200表示成功,404表示未找到资源等。
-
关闭连接:在一次请求-响应周期完成后,连接可以被关闭,或者保持活动状态以便进行后续的请求。
③补充:OSI七层模型和TCP/IP五层模型 :
OSI (开放系统互联模型)七层模型:
- 物理层:负责传输比特流,即0和1的数据位。
- 数据链路层:负责将比特组装成帧和传输。
- 网络层:提供数据包在网络中的传输,包括路由和转发。
- 传输层:负责端到端的通信,确保数据可靠传输。
- 会话层:管理用户会话和数据交换。
- 表示层:处理数据格式、加密和压缩。
- 应用层:提供用户接口,实现特定的网络应用。
TCP/IP(传输控制协议/互联网协议)四层模型:
-
应用层:包含了诸多应用程序使用的协议和标准,例如HTTP、FTP、SMTP等。在这一层,数据被处理成消息和传输给应用程序,这些消息包含了应用相关的数据。
-
传输层:主要负责提供端到端的通信,并且可以保证数据的可靠传输。最常见的协议是传输控制协议(TCP),它提供了可靠的、面向连接的通信,以及用户数据报协议(UDP),它提供了无连接的通信服务。
-
网络层:这一层负责在不同的网络之间进行路由选择,以确保数据能够从发送端到达接收端。Internet协议(IP)就是在这一层工作的协议。
-
链路层:它包括物理层和数据链路层,主要涉及到硬件设备和驱动程序。这一层的任务是将比特流转换为适合在物理媒介上传输的数据帧,并控制通过物理媒介的访问。
2.2 URL格式
URL(统一资源定位符)是用于指定互联网上资源的地址的一种标识符。一个标准的URL通常由以下几部分组成:
-
协议:URL的第一部分通常是使用的协议,比如HTTP、HTTPS、FTP等。例如,http://或https://。
-
主机:URL中的主机部分指定了资源所在的主机名或IP地址。例如,www.example.com 或 192.0.2.1。
-
端口(可选):如果资源不是通过默认端口访问的,那么端口号会包含在URL中,用冒号和数字表示,例如:http://www.example.com:8080。
-
路径:指定了服务器上的资源的位置。路径部分以正斜杠 / 开头,例如 /path/to/resource。
-
查询参数(可选):用于向服务器传递参数。查询参数通常以问号 ? 开头,并以键值对的形式出现,不同参数之间使用 & 符号分隔。例如,?id=123&name=example。
-
片段标识符(可选):用于指示资源中的一个具体部分。片段标识符以井号 # 开头,后面跟着具体的片段标识符,例如 #section1。
其中,协议、主机和路径部分是必需的,而端口、查询参数和片段标识符是可选的,其具体格式根据具体的应用场景和协议而有所不同。
三、E-R 图
E-R图又称实体关系图,是一种提供了实体,属性和联系的方法,用来描述现实世界的概念模型。通俗点讲就是,当我们理解了实际问题的需求之后,需要用一种方法来表示这种需求,概念模型就是用来描述这种需求的。
3.1 ER图中的基本元素
1.实体
实际问题中客观存在的并且可以相互区别的事物称为实体。实体是现实世界中的对象,可以具体到人,事,物。比如:上图中的社团、学生、课程表。
2.属性
实体所具有的某一个特性称为属性,在E-R图中属性用来描述实体。比如上图中的学生,可以用“学号”、“姓名”、“专业”、“班级”、“电话”、“寝室”进行属性描述。
3.实体集
具有相同属性的实体的集合称为实体集。例如:全体学生就是一个实体集,(983573,李刚,男,2000/12/12)是学生实体集中的一个实体。
4.键
在描述实体集的所有属性中,可以唯一标识每个实体的属性称为键。键也是属于实体的属性,作为键的属性取值必须唯一且不能“空置”。比如:不重复的学号,就可以作为学生的“键”。
5.联系
世界上任何事物都不是孤立存在的,事物内部和事物之间都有联系的,实体之间的联系通常有3种类型:一对一联系,一对多联系,多对多联系。
1.2 ER图中三种关联的联系
一对一(1:1) :1对1关系是指对于实体集A与实体集B,A中的每一个实体至多与B中一个实体有关系;反之,在实体集B中的每个实体至多与实体集A中一个实体有关系。
例如:一个用户只能拥有一张身份证,而一张身份证只属于一个用户。所以这就是一对一的关系。
一对多(1:n) :1对多关系是指实体集A与实体集B中至少有n(n>0)个实体有关系;并且实体集B中每一个实体至多与实体集A中一个实体有关系。
例如:一对多和多对一是一样的。一个用户拥有多张银行卡,但是一张银行卡只属于一个用户。所以这就是一对多的关系。反过来说法就是多对一。
多对多(m:n) :多对多关系是指实体集A中的每一个实体与实体集B中至少有m(m>0)个实体有关系,并且实体集B中的每一个实体与实体集A中的至少n(n>0)个实体有关系。
例如:用户与商品的关系,一个用户可拥有多件商品。同样一件商品可被多个用户所拥有。所以这就是多对多的关系。
四、Bootstrap介绍
Bootstrap是一个流行的开源前端框架,由Twitter的一群工程师共同开发,用于快速构建响应式的、移动设备优先的Web应用程序。Bootstrap提供了一系列CSS、JavaScript和HTML代码片段和模板,可以用于快速搭建网站界面、表单、导航等常见的UI组件。
4.1 Bootstrap具有以下特点:
-
响应式设计:Bootstrap默认提供了各种不同屏幕尺寸的布局,可以实现跨平台的响应式设计。
-
内置组件:Bootstrap提供了丰富的UI组件,如表格、表单、按钮、导航、分页、图片轮播等,可以快速构建Web应用程序。
-
插件:Bootstrap内置了多个jQuery插件,如模态框、下拉菜单、滚动监听等,可以进行快速开发。
-
易于定制:Bootstrap提供了多种主题样式,用户可以根据自己的需求进行自定义和扩展。
4.2 引入Bootstrap的三种方式:
① 在 pom.xml 文件中添加以下依赖:
<dependency>
<groupId>org.webjars</groupId>
<artifactId>bootstrap</artifactId>
<version>5.1.3</version>
</dependency>
这里使用 WebJars 来管理 Bootstrap 的依赖,它可以将前端框架作为一个 jar 包进行引用,方便管理和升级。
②配置静态资源:
在 Spring Boot 项目中,静态资源默认放置在 src/main/resources/static 目录下。因此,我们需要将 Bootstrap 的静态资源也放置在该目录下。
在 src/main/resources/static 目录下新建一个名为webjars的目录。
在 webjars 目录下新建一个名为 bootstrap 的目录。
将 bootstrap-5.1.3 目录中的 css、js和 fonts 三个子目录复制到src/main/resources/static/webjars/bootstrap 目录下。
这样,我们就成功将 Bootstrap 的静态资源放置在了 Spring Boot 项目的静态资源目录下。
③创建一个 Bootstrap 页面:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Spring Boot + Bootstrap</title>
<link rel="stylesheet" href="/webjars/bootstrap/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<h1>Hello, Spring Boot!</h1>
</div>
<script src="/webjars/bootstrap/js/bootstrap.min.js"></script>
</body>
</html>