JavaWeb的基本概念

news2024/9/27 19:21:46

一、Web基本概念

Web的基本结构:
在这里插入图片描述

1.客户端的概述

1.1. 客户端的作用

与用户进行交互,用于接收用户的输入(操作)、展示服务器端的数据以及向服务器传递数据

1.2. 常见的客户端

PC端网页:
在这里插入图片描述

移动端:
在这里插入图片描述

Iot设备:

在这里插入图片描述

2. 服务器的概述

“服务器”是一个非常宽泛的概念,从硬件而言: 服务器是计算机的一种,它比普通计算机运行更快、负载更高、价格更贵。服务器在网络中为其它客户机(如PC机、智能手机、ATM等终端甚至是火车系统等大型设备)提供计算或者应用服务。从软件而言: 服务器其实就是安装在计算机上的一个软件,根据其作用的不同又可以分为各种不同的服务器,例如应用服务器、数据库服务器、Redis服务器、DNS服务器、ftp服务器等等

综上所述: 用我们自己的话来总结的话,服务器其实就是一台(或者一个集群)安装了服务器软件的高性能计算机。

2.1. 服务器的作用

与客户端进行交互,接收客户端的数据、处理具体的业务逻辑、传递给客户端其需要的数据。

2.2. 常见的服务器硬件设备

刀片服务器:

在这里插入图片描述
在这里插入图片描述

塔式服务器:
在这里插入图片描述

机房:

在这里插入图片描述

2.3. 常见的服务器操作系统

服务器是一台计算机,它必须安装操作系统之后才能够安装使用服务器软件

Linux系统: 使用最多的服务器系统,安全稳定、性能强劲、开源免费(或少许费用)。
在这里插入图片描述

Unix系统: 和硬件服务器捆绑销售,版权不公开,用法和Linux一样。

Windows Server系统: 源代码不开放,费用高昂,漏洞较多,性能较差,运维成本高。

2.4. 常见的服务器软件

硬件服务器装好系统,就可以安装应用软件了,像我们熟知的Tomcat、MySQL、Redis、FastDFS、ElasticSearch等等都是服务器应用软件。它们分别提供自己特定的服务器功能。如果一台服务器上安装了Tomcat,我们会就会把这台服务器叫做Tomcat服务器;如果装了MySQL,就叫做MySQL服务器。很显然,开发过程中需要很多这样的服务器。

2.5. 弹性云(虚拟)服务器

使用弹性云服务器最大的好处就是弹性伸缩。什么是弹性伸缩呢?我现在的服务器是20G内存,因为访问量暴涨我需要把内存扩容到80G,要是物理的硬件服务器就需要买来新的内存条插入主板上的内存插槽。而弹性云服务器只需要改一下内存容量的参数就行了,非常方便。等访问量下降了,再把内存容量调回来就可以,不仅方便,而且可以精准的在访问高峰期提高服务器配置而不是一直维持高配,节约成本。

在这里插入图片描述

2.6. 服务器端应用程序

服务器端应用程序就是运行在应用服务器软件上,用于处理具体业务功能的一个应用程序,而我们学习JavaEE开发的目的就是编写服务器端应用程序。例如: 淘宝、滴滴、京东等等项目都是服务器端应用程序
在这里插入图片描述

3. Web项目的构成

3.1. 请求响应对

请求:请求是从客户端发送给服务器,主要用于将客户端的数据传递给服务器

响应:响应是从服务器发送给客户端,主要用于将服务器的数据传递给客户端

在这里插入图片描述

请求响应对是构成项目的最基本的逻辑单元,一个项目是由非常非常多的请求响应对构成的

举例:点超链接跳转到注册页面

3.2. 功能:一个功能包含多个请求响应对

举例:注册用户功能

请求1:点超链接跳转到注册页面
请求2:发送请求获取短信验证码
请求3:检查用户名是否可用
请求4:提交表单完成注册

3.3. 模块:一个模块包含很多功能

举例:用户信息管理模块
功能1:用户注册功能
功能2:用户登录功能
功能3:个人中心——账户安全功能
功能4:个人中心——账户绑定功能
功能5:个人中心——收货地址功能
功能6:个人中心——我的银行卡功能

3.4. 子系统

根据项目规模的不同,子系统这层逻辑概念可能有也可能没有。如果设置了子系统,那么子系统中也必然包含很多模块。其实庞大项目的子系统已经相当于一个项目了,甚至比小型项目整个都大。我们来引入一下分布式的概念,可以先简单的了解一下。现在很多项目都是采用分布式进行开发,分布式就是将一个大型项目拆分成多个小型项目,每个小型项目都可以独立运行,而各个小型项目之间通常都是通过远程调用的方式进行通信,好处是避免了A子系统崩溃时影响了整个项目运行,A系统崩了就让他的替身A1进行服务,这个A1跟A互为替身,这是集群的概念,集群可以让A系统血条加厚,而如果替身都崩了,也就是B调用A时呼叫不到他,那此时B也可以将异常记录下来,等到A上线后再执行这些操作。这样整个系统的健壮性都得到提升了,这就是为什么分布式成为了主流。当然并不是所有的项目都要用到分布式,如果只是一个学生管理系统,单体架构便可以了,因为访问量本身就不大并且即使服务挂了一段时间也不会产生多大的经济损失,而一些商城平台一旦挂掉了分分钟可能损失巨大,所以对系统的健壮性要求就非常高了,这就是为什么分布式开发成了主流,分布式下项目就是有各个子系统组成的。

举例:认证中心子系统
模块1:用户信息管理模块
模块2:权限管理模块
模块3:授权管理模块
模块4:权限检查模块

3.5. 项目

为了解决现实生活中的实际问题开发一个项目,这个项目就是为这个需求提供的一整套解决方案。

举例:电商项目

子系统1:认证中心子系统
子系统2:商品管理子系统
子系统3:购物车子系统
子系统4:仓储子系统
子系统5:物流子系统
子系统6:订单子系统

在这里插入图片描述

二、Web项目架构

1. 架构的概念

『架构』其实就是项目的『结构』。只不过『结构』这个词太小了,不适合用来描述项目这么大的东西,所以换了另一个更大的词:架构。所以当我们聊一个项目的架构时,我们聊的是项目是由哪些部分组成的、每部分的作用、以及各个部分之间是怎么联系(通讯)、以及这些部分是怎么共同组成一个系统(项目)

2. 架构的演进过程

2.1. 单一架构

当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。我们现在的JavaWeb阶段、SSM阶段都是学习单一架构开发技术。

在这里插入图片描述

单一架构优点

架构简单,前期开发成本低、开发周期短,适合小型项目(OA、CRM、ERP 企业内部应用)。

单一架构缺点

全部功能集成在一个工程中

1)业务代码耦合度高,不易维护。

2)维护成本高,不易拓展

3)并发量大,不易解决

4)技术栈受限,只能使用一种语言开发。

2.2. 垂直架构

当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。
在这里插入图片描述

垂直架构优点

1)业务代码相对解耦

2)维护成本相对易于拓展(修改一个功能,可以直接修改一个项目,单独部署)

3)并发量大相对易于解决(搭建集群)

4)技术栈可扩展(不同的系统可以用不同的编程语言编写)。

架构缺点

1)功能集中在一个项目中,不利于开发、扩展、维护。粒度不够细

2)代码之间存在数据、方法的冗余

2.3. 分布式架构

当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。
在这里插入图片描述

架构优点

1)业务代码完全解耦,并可实现通用

2)维护成本易于拓展(修改一个功能,可以直接修改一个项目,单独部署)

3)并发量大易于解决(搭建集群)

4)技术栈完全扩展(不同的系统可以用不同的编程语言编写)。

架构缺点

缺少统一管理资源调度的框架

2.4. 流动计算架构(SOA)

服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键。
在这里插入图片描述

资源调度和治理中心的框架:dubbo、spring cloud

架构优点

1)业务代码完全解耦,并可实现通用

2)维护成本易于拓展(修改一个功能,可以直接修改一个项目,单独部署)

3)并发量大易于解决(搭建集群)

4)技术栈完全扩展(不同的系统可以用不同的编程语言编写)

5)框架实现了服务治理,不去担心集群的使用情况(失败会尝试其它服务…)

3. 多层架构(最经典的单一架构)

视图层:用户的操作界面+数据的动态显示

  • 前端技术:HTML/CSS/JavaScript/vue
  • 异步交互:Ajax、Axios
  • 服务器端页面模板技术:Thymeleaf

控制层:处理请求+跳转页面

  • 服务器:Tomcat
  • 控制器:Servlet
  • 域对象:request、session、servletContext
  • 过滤器:Filter
  • 监听器:Listener

业务逻辑层:业务逻辑代码(Services)的编写,就是处理具体的功能

持久化层:操作数据库(Data Access Object, DAO)、JDBC、连接池、DBUtils、MySQL
在这里插入图片描述

三、HTTP协议

1. HTTP协议概念

什么是HTTP协议?

HTTP:Hyper Text Transfer Protocol 超文本传输协议。

HTTP协议的作用

HTTP最大的作用就是确定了请求和响应数据的格式。浏览器发送给服务器的数据:请求报文;服务器返回给浏览器的数据:响应报文。

HTTP协议的组成

HTTP协议由请求响应两部分构成,请求是由客户端往服务器传输数据,响应是由服务器往客户端传输数据。

2. 请求报文

请求报文的三个部分:
在这里插入图片描述

2.1. 请求行

作用: 展示当前请求的最基本信息

POST /dynamic/target.jsp HTTP/1.1

1)请求方式

2)访问地址

3)HTTP协议的版本

2.2. 请求消息头

  • 向服务端告知当前客户端的某些参数,用于服务端返回合适的数据。

作用: 通过具体的参数对本次请求进行详细的说明

格式: 键值对,键和值之间使用冒号隔开

相对比较重要的请求消息头:

名称功能
Host服务器的主机地址
Accept声明当前请求能够接受的『媒体类型』
Referer当前请求来源页面的地址
Content-Length请求体内容的长度
Content-Type请求体的内容类型,这一项的具体值是媒体类型中的某一种
Cookie浏览器访问服务器时携带的Cookie数据

2.3. 请求体

作用:作为请求的主体,发送数据给服务器。具体来说其实就是POST请求方式下的请求参数。

格式

1. form data(表单提交数据)

含义:当前请求体是一个表单提交的请求参数。

在这里插入图片描述

查看源码后,发现格式如下:

username=tom&password=123456

  • 每一组请求参数是一个键值对
  • 键和值中间是等号
  • 键值对之间是&号

2. Request Payload(在异步请求中会学习到)

含义:整个请求体以某种特定格式来组织数据,例如JSON格式。

在这里插入图片描述

2.4. 请求方式

HTTP1.1中共定义了八种请求方式

1)GET:从服务器端获取数据

  • 特征1:没有请求体
  • 特征2:请求参数附着在URL地址后面
  • 特征3:请求参数在浏览器地址栏能够直接被看到,存在安全隐患
  • 特征4:在URL地址后面携带请求参数,数据容量非常有限。如果数据量大,那么超出容量的数据会丢失
  • 特征5:从报文角度分析,请求参数是在请求行中携带的,因为访问地址在请求行

2)POST:将数据保存到服务器端

  • 特征1:有请求体
  • 特征2:请求参数放在请求体中
  • 特征3:请求体发送数据的大小没有限制
  • 特征4:可以发送各种不同类型的数据
  • 特征5:从报文角度分析,请求参数是在请求体中携带的
  • 特征6:由于请求参数是放在请求体中,所以浏览器地址栏看不到,所以相对来说安全一点点

3)PUT:命令服务器对数据执行更新

4)DELETE:命令服务器删除数据

5)HEAD

6)CONNECT

7)OPTIONS

8)TRACE

PUT和DELETE请求方式可以让POST和GET替代,使用这种方式进行更新和删除操作主要是在使用框架时其能实现Restful定义的对资源的操作,增删改查统一使用同一个请求路径,而区分不同的操作就是根据这些请求方式进行的,例如增—>POST,删—>DELETE,改—>PUT,查—>GET

3. 响应报文

在这里插入图片描述

3.1. 响应状态行

HTTP/1.1 200 OK

1)HTTP协议版本

2)响应状态码

3)响应状态的说明文字

3.2. 响应消息头

1)响应体的说明书

2)服务器端对浏览器端设置数据,例如:服务器端返回Cookie信息

名称功能
Content-Type响应体的内容类型
Content-Length响应体的内容长度
Set-Cookie服务器返回新的Cookie信息给浏览器
location重定向的情况下,告诉浏览器访问下一个资源的地址

3.3. 响应体

服务器返回的数据主体,有可能是各种数据类型。

1)HTML页面

2)图片

3)视频

4)以下载形式返回的文件

5)CSS文件

6)JavaScript文件

3.4. 响应状态码

作用:以编码的形式告诉浏览器当前请求处理的结果

状态码含义
200服务器成功处理了当前请求,成功返回响应
302重定向
304从缓存中获取数据
400[SpringMVC特定环境]请求参数问题
403服务器接收到了客户端的请求,但是检查到客户端没有权限,所以拒绝处理请求
404找不到目标资源
405[SpringMVC特定环境]请求方式和服务器端对应的处理方式不一致
406[SpringMVC特定环境]请求扩展名和实际返回的响应体类型不一致
50X服务器端内部错误,通常都是服务器端抛异常了

404产生的具体原因:

1)访问地址写错了,确实是没有这个资源

2)访问了WEB-INF目录下的资源

3)Web应用启动的时候,控制台已经抛出异常,导致整个Web应用不可用,访问任何资源都是404

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1018823.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于LUT查找表方法的图像gamma校正算法FPGA实现,包括tb测试文件和MATLAB辅助验证

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 将gamma2.2和gamma1/2.2的数据分别导入到matlab进行对比: 2.算法运行软件版本 matlab2022a 3.部分核心程序 timescale 1ns / 1ps //…

MyBatisPlus中使用Mybatis方式操作数据库。

说明 MyBatisPlus中,可以使用 Mybatis 方式操作数据库。在 Mapper.xml 中,编写 SQL 来实现比较复杂的操作。 一般比较复杂的逻辑,需要多表联合查询,比较适合直接写SQL。 MybatisPlus比较适合单表操作。 PS:本示例只…

使用stelnet进行安全的远程管理

1. telnet有哪些不足? 2.ssh如何保证数据传输安全? 需求:远程telnet管理设备 用户定义需要在AAA模式下: 开启远程登录的服务:定义vty接口 然后从R2登录:是可以登录的 同理R3登录: 在R1也可以查…

10.前端打包与nginx部署

文章目录 打包部署nginx替换html 打包 首先,确保你的项目是可以运行的,以若依为例,运行npm run dev 是可以正常运行起来前端的。然后前端的打包命令是 # 构建测试环境 npm run build:stage # 构建生产环境 npm run build:prod打包好之后&am…

华为云香港S3云服务器性能测评_99元一年租用价格

华为云香港S3云服务器1核2G1M带宽99元一年性能测评,配置为S3云服务器1核2G1M带宽,S系列热卖机型,适用于个人建站、普通web应用等负载较低场景,系统盘为高IO40G系统盘,华为云百科分享华为云香港云服务器配置费用&#x…

HUAWEI华为MateBookD15笔记本2019款i5独显非触屏(BoB-WAH9P)原装出厂Win10系统2004

原厂系统自带显卡、网卡、声卡、指纹等所有驱动、出厂主题壁纸、系统属性专属LOGO标志、Office办公软件、华为电脑管家等预装程序 链接:https://pan.baidu.com/s/1sB7dCXlvw9deSiVeY8BvDg?pwd49a6 提取码:49a6

笔记01:第一行Python

NameError 名字不含特殊符号(只能是英文、数字、下划线、中文等)名字区分大小写名字先定义后使用 SyntaxError 不符合Python语法书写规范除了语法成分中的保留拼写错误输出中文符号if、for、def等语句末尾忘记冒号 IdentationError 缩进错误&#x…

算法刷题 week4

目录 1.斐波那契数列题目题解(递推 滚动变量) O(n) 剑指offer 10 - II 青蛙跳台阶问题题目题解 10.旋转数组的最小数字题目题解(二分) O(n) 1.斐波那契数列 题目 题解 (递推 滚动变量) O(n) 这题的数据范围很小,我们直接模拟即可。 当数据范围很大时&#xff0…

【学习笔记】Java 一对一培训(2.1)Java基础语法

【学习笔记】Java 一对一培训(2.1)Java基础语法 关键词:Java、Spring Boot、Idea、数据库、一对一、培训、教学本文主要内容含Java简介、Java基础语法、Java对象和类、Java基本数据类型、Java变量类型、Java修饰符计划2小时完成,…

广义模态控制实例

广义模态控制实例 1. 原系统2. 调节器设计3. 加入调节器后的系统 在广义模态控制一文中,笔者介绍了广义模态控制的思路以及算法。本文将举一个简单的广义模态控制的例子,以加深理解。 1. 原系统 取原开环系统的传递函数为 G ( s ) 2 15 s 2 s G ( {…

2、ARM处理器概论

一、ARM处理器概述 1、ARM的含义 ARM(Advanced RISC Machines)有三种含义,一个公司的名称、一类处理器的通称、一种技术 ARM公司: 成立于1990年11月,前身为Acorn计算机公司主要设计ARM系列RISC处理器内核授权ARM内…

数据包络分析(DEA)

写在前面: 博主本人大学期间参加数学建模竞赛十多余次,获奖等级均在二等奖以上。为了让更多学生在数学建模这条路上少走弯路,故将数学建模常用数学模型算法汇聚于此专栏,希望能够对要参加数学建模比赛的同学们有所帮助。 目录 1. …

gma 2 教程(二)数据操作:8.矢量数据功能逻辑架构和格式支持

安装 gma:pip install gma 功能逻辑架构 gma矢量数据操作类主要包括数据资源(DataSource)、矢量图层(Layer)、矢量要素(Feature),三者的示意图如下: 图 29 矢量数据组成…

【JAVA-Day22】深度解析 Java 的包机制

深度解析 Java 的包机制 深度解析 Java 的包机制摘要引言一、什么是包机制1.1 包的定义1.2 包的命名规范1.3 包的声明1.4 包的导入1.5 包的访问权限1.6 包的层次结构1.7 包的目录结构 二、包的命名冲突问题三、总结参考资料 博主 默语带您 Go to New World. ✍ 个人主页—— 默…

ARM架构过程调用标准AAPCS(学习)

AAPCS是ARM架构的处理器规定的一些标准。 参数和返回值传递,对于简单的情况,输入参数由R0-R3分别用来记录第1到4个参数。当传递的参数超过4个时,就需要借助栈来保存参数。函数的返回值通常保存在R0中,若返回值为64位,…

Linux 多线程 ( 多线程概念 )

文章目录 Linux线程概念什么是线程?二级页表线程的优点线程的缺点线程异常 Linux线程概念 什么是线程? 在一个程序里的一个执行路线叫做线程 thread ),更准确的定义为:“线程是一个进程内部的控制序列"。一切进程至少有一个执行线程。…

ArcGIS Maps SDK for JavaScript系列之四:添加自定义底图

目录 Basemap类介绍Basemap类的常用属性Basemap类的常用方法 使用Basemap添加自定义底图引用Basemap引用切片图层创建一个新的Basemap对象将自定义图层应用到地图视图中引入并创建Camera对象引入并创建SceneView对象 Basemap类介绍 Basemap类是ArcGIS Maps SDK for JavaScript…

Linux:centos9的本地yum仓库配置

其实9和7的配置方法是差不多一样的,只不过你使用7的本地yum仓库里面直接挂载就可以直接把仓库位置指向挂载点 具体可以看我往期文章,但是先看完我下面的描述再去看我链接的文章才能看懂如何配置centos9的yum仓库 Linux:YUM仓库服务_鲍海超-…

Scratch游戏------打砖块(不用VIP)

打砖块游戏是一款较老的动作电子游戏。玩家操作“挡板”,让一颗不断弹来弹去的“球”击碎砖块,作为过关目标消去的“砖块”且的途中不会落到屏幕底下。 目录 1.操作说明: 2.背景: 3.挡板: 4.游戏控制: …

【算法训练-二叉树 二】【重建二叉树】依据前序与中序遍历序列重建二叉树

废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是【重建二叉树】,使用【二叉树】这个基本的数据结构来实现,这个高频题的站点是:CodeTop,筛选条件为&…