Web基本概念
Web的基本结构:
客户端的概述
客户端的作用
与用户进行交互,用于接收用户的输入(操作)、展示服务器端的数据以及向服务器传递数据
常见的客户端
PC端网页:
移动端:
Iot物联网设备:
服务器的概述
“服务器” 是一个非常宽泛的概念。
从硬件而言: 服务器是计算机的一种,它比普通计算机运行更快、负载更高、价格更贵。服务器在网络中为其它客户机(如PC机、智能手机、ATM等终端甚至是火车系统等大型设备)提供计算或者应用服务。
从软件而言: 服务器其实就是安装在计算机上的一个软件,根据其作用的不同又可以分为各种不同的服务器,如应用服务器、数据库服务器、Redis服务器、DNS服务器、ftp服务器等
综上所述: 服务器其实就是一台(或者一个集群)的安装了服务器软件的高性能计算机。
服务器的作用
与客户端进行交互,接收客户端的数据、处理具体的业务逻辑、传递给客户端需要的数据。
常见的服务器硬件设备
刀片服务器:
塔式服务器:
机房:
常见的服务器操作系统
服务器是一台计算机,它必须安装操作系统之后才能够安装使用服务器软件
Linux系统: 使用最多的服务器系统,安全稳定、性能强劲、开源免费(或少许费用)。
Unix系统: 和硬件服务器捆绑销售,版权不公开,用法和Linux一样。
Windows Server系统: 源代码不开放,费用高昂,漏洞较多,性能较差,运维成本高。
常见的服务器软件
硬件服务器装好系统,就可以安装应用软件了,像我们熟知的Tomcat、MySQL、Redis、FastDFS、ElasticSearch等等都是服务器应用软件。它们分别提供自己特定的服务器功能。如果一台服务器上安装了Tomcat,我们就会把这台服务器叫做Tomcat服务器;如果装了MySQL,就叫做MySQL服务器。很显然,开发过程中需要很多这样的服务器。
弹性云(虚拟)服务器
使用弹性云服务器最大的好处就是弹性伸缩。
什么是弹性伸缩呢?我现在的服务器是20G内存,因为访问量暴涨我需要把内存扩容到80G,要是物理的硬件服务器就需要买来新的内存条插入主板上的内存插槽。
而弹性云服务器只需要改一下内存容量的参数就行了,非常方便。等访问量下降了,再把内存容量调回来就可以,不仅方便,而且可以精准的在访问高峰期提高服务器配置而不是一直维持高配,从而节约成本。
服务器端应用程序
服务器端应用程序就是运行在应用服务器软件上,用于处理具体业务功能的一个应用程序,JavaEE开发的目的就是编写服务器端应用程序。例如: 淘宝、滴滴、京东等等项目都是服务器端应用程序。
Web项目的构成
请求响应对
请求:请求是从客户端发送给服务器,主要用于将客户端的数据传递给服务器
响应:响应是从服务器发送给客户端,主要用于将服务器的数据传递给客户端
请求响应对是构成项目的最基本的逻辑单元,一个项目是由非常非常多的请求响应对构成的
功能
一个功能包含多个请求响应对.
举例:注册用户功能
请求1:点超链接跳转到注册页面
请求2:发送请求获取短信验证码
请求3:检查用户名是否可用
请求4:提交表单完成注册
模块
一个模块包含很多功能
举例:用户信息管理模块
功能1:用户注册功能
功能2:用户登录功能
功能3:个人中心——账户安全功能
功能4:个人中心——账户绑定功能
功能5:个人中心——收货地址功能
功能6:个人中心——我的银行卡功能
子系统
根据项目规模的不同,子系统这层逻辑概念可能有也可能没有。
如果设置了子系统,那么子系统中也必然包含很多模块。
其实庞大项目的子系统已经相当于一个项目了,甚至比小型项目整个都大。
举例:认证中心子系统
模块1:用户信息管理模块
模块2:权限管理模块
模块3:授权管理模块
模块4:权限检查模块
项目
为了解决现实生活中的实际问题开发一个项目,这个项目就是为这个需求提供的一整套解决方案。
举例:电商项目
子系统1:认证中心子系统
子系统2:商品管理子系统
子系统3:购物车子系统
子系统4:仓储子系统
子系统5:物流子系统
子系统6:订单子系统
Web项目架构
架构的概念
『架构』其实就是项目的『结构』。只不过『结构』这个词太小了,不适合用来描述项目这么大的东西,所以换了另一个更大的词:架构。所以当我们聊一个项目的架构时,我们聊的是项目是由哪些部分组成的、每部分的作用、以及各个部分之间是怎么联系(通讯)、以及这些部分是怎么共同组成一个系统(项目)
架构的演进过程
单一架构
当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。如SSM阶段都是学习单一架构开发技术。
单一架构优点:
架构简单,前期开发成本低、开发周期短,适合小型项目。
单一架构缺点:
全部功能集成在一个工程中
1)业务代码耦合度高,不易维护。
2)维护成本高,不易拓展
3)并发量大,不易解决
4)技术栈受限,只能使用一种语言开发。
多层架构(最经典的单一架构)
视图层:用户的操作界面+数据的动态显示
- 前端技术:HTML/CSS/JavaScript/Vue
- 异步交互:Ajax、Axios
- 服务器端页面模板技术:Thymeleaf
控制层:处理请求+跳转页面
- 服务器:Tomcat
- 控制器:Servlet
- 域对象:request、session、servletContext
- 过滤器:Filter
- 监听器:Listener
业务逻辑层:业务逻辑代码(Services)的编写,就是处理具体的功能
持久化层:操作数据库(Data Access Object, DAO)、JDBC、连接池、DBUtils、MySQL
垂直架构
当访问量逐渐增大,单一靠增加机器带来的加速度越来越小,故将应用拆成互不相干的几个应用,以提升效率。
通过联想到 植被的垂直分布,就比较好理解——垂直架构。
垂直架构优点:
1)业务代码相对解耦
2)维护成本相对易于拓展(修改一个功能,可以直接修改一个项目,单独部署)
3)并发量大相对易于解决(搭建集群)
4)技术栈可扩展(不同的系统可以用不同的编程语言编写)。
架构缺点:
1)功能集中在一个项目中,不利于开发、扩展、维护。粒度不够细
2)代码之间存在数据、方法的冗余
分布式架构
当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。
架构优点:
1)业务代码完全解耦,并可实现通用
2)维护成本易于拓展(修改一个功能,可以直接修改一个项目,单独部署)
3)并发量大易于解决(搭建集群)
4)技术栈完全扩展(不同的系统可以用不同的编程语言编写)。
架构缺点:
缺少统一管理资源调度的框架
流动计算架构(SOA,面向服务架构Service Oriented Architecture)
服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。
此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键。
资源调度和治理中心的框架:dubbo、spring cloud
架构优点:
1)业务代码完全解耦,并可实现通用
2)维护成本易于拓展(修改一个功能,可以直接修改一个项目,单独部署)
3)并发量大易于解决(搭建集群)
4)技术栈完全扩展(不同的系统可以用不同的编程语言编写)
5)框架实现了服务治理,不去担心集群的使用情况(失败会尝试其它服务…)
HTTP协议
HTTP协议概念
什么是HTTP协议?
HTTP:Hyper Text Transfer Protocol 超文本传输协议。
HTTP协议的作用:
HTTP最大的作用就是确定了请求和响应数据的格式。
浏览器发送给服务器的数据:请求报文;
服务器返回给浏览器的数据:响应报文。
HTTP协议的组成:
HTTP协议由请求和响应两部分构成,请求是由客户端往服务器传输数据,响应是由服务器往客户端传输数据。
请求报文
请求报文的三个部分:
请求行
作用: 展示当前请求的最基本信息
POST /dynamic/target.jsp HTTP/1.1
1)请求方式
2)访问地址
3)HTTP协议的版本
请求消息头
作用: 通过具体的参数对本次请求进行详细的说明
格式: 键值对,键和值之间使用冒号隔开
相对比较重要的请求消息头:
名称 | 功能 |
---|---|
Host | 服务器的主机地址 |
Accept | 声明当前请求能够接受的『媒体类型』 |
Referer | 当前请求来源页面的地址 |
Content-Length | 请求体内容的长度 |
Content-Type | 请求体的内容类型,这一项的具体值是媒体类型中的某一种 |
Cookie | 浏览器访问服务器时携带的Cookie数据 |
请求体
作用:作为请求的主体,发送数据给服务器。
具体来说其实就是POST请求方式下的请求参数。
格式:
1. form data(表单提交数据)
含义:当前请求体是一个表单提交的请求参数。
查看源码后,发现格式如下:
username=tom&password=123456
- 每一组请求参数是一个键值对
- 键和值中间是等号
- 键值对之间是&号
2. Request Payload(用于异步请求中)
含义:整个请求体以某种特定格式来组织数据,例如JSON格式。
请求方式
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
响应报文
响应状态行
HTTP/1.1 200 OK
1)HTTP协议版本
2)响应状态码
3)响应状态的说明文字
响应消息头
1)响应体的说明书
2)服务器端对浏览器端设置数据,例如:服务器端返回Cookie信息
名称 | 功能 |
---|---|
Content-Type | 响应体的内容类型 |
Content-Length | 响应体的内容长度 |
Set-Cookie | 服务器返回新的Cookie信息给浏览器 |
location | 在重定向的情况下,告诉浏览器访问下一个资源的地址 |
响应体
服务器返回的数据主体,有可能是各种数据类型。
1)HTML页面
2)图片
3)视频
4)以下载形式返回的文件
5)CSS文件
6)JavaScript文件
响应状态码
作用:以编码的形式告诉浏览器当前请求处理的结果
状态码 | 含义 |
---|---|
200 | 服务器成功处理了当前请求,成功返回响应 |
302 | 301是永久重定向,302是临时重定向 |
304 | 从缓存中获取数据 |
400 | [SpringMVC特定环境]请求参数问题 |
403 | 服务器接收到了客户端的请求,但是检查到客户端没有权限,所以拒绝处理请求 |
404 | 找不到目标资源 |
405 | [SpringMVC特定环境]请求方式和服务器端对应的处理方式不一致 |
406 | [SpringMVC特定环境]请求扩展名和实际返回的响应体类型不一致 |
50X | 服务器端内部错误,通常都是服务器端抛异常了 |
404产生的具体原因:
1)访问地址写错了,确实是没有这个资源
2)访问了WEB-INF目录下的资源
3)Web应用启动的时候,控制台已经抛出异常,导致整个Web应用不可用,访问任何资源都是404。
web应用程序
web应用程序: 可以提供给浏览器访问的程序。
- 如a.html,b.html …等web资源可以被外界访问,对外界提供服务
- 目前能访问到的任何一个页面或者资源,都存在于这个世界某个角落的一台计算机上。
- URL(Uniform Resource Location):统一资源定位符,由于每一信息资源都有统一的且在网上唯一的地址,其用于标明资源的位置。
- 这个统一的web资源会被放在同一个文件夹下,再将其放在java中常见的web应用服务器如Tomcat中进行统一管理。
- 一个java的web应用程序常由多个部分组成(静态web资源,动态web资源)
- html,css,js
- jsp,servlet
- java程序
- jar包
- 配置文件(Properties)
静态Web
- 静态web资源有:Html文件,css文件,js文件等,如果服务器上一直存在这些东西,浏览器可以直接读取和打开。
- 静态web的缺点
- web页面无法动态更新,实现不了常见轮播图效果,且所有用户看到的都是同个页面
- 无法和数据库交互(数据无法持久化,用户无法交互)
动态Web
页面会动态展示,且web的显示页面会"因人而异"。
缺点:
- 加入服务器的动态web资源如果出现问题,我们需要重新编写我们的后台程序,并重新发布。(即需要: 停机维护)
优点:
- web页面可以动态更新,不同用户看到不同的页面。
- 可以与数据库交互(数据持久化,可以与用户进行交互)
服务器页面技术
ASP(Active Server Pages):
- 微软:国内最早流行的就是ASP.
- 其在HTML中嵌入了VB脚本,ASP+COM;
- 在ASP开发中,基本一个页面有几千行代码,页面过于混乱。
- 维护成本高
- 其使用IIS(Internet Information Services)作为其web服务器。
PHP(Hypertext Preprocessor)
- PHP开发速度快,功能强大且跨平台,代码简单。
- 无法承载大容量访问的情况(局限性)
Servlet / JSP (JavaServer Pages):
- sun公司主推的B/S架构
- 基于java语言的
- 可以承载三高问题(高并发,高性能,高可用 ) 带来的问题。
- 语法类似ASP,方便之前的ASP技术开发者进行技术迁移开发。
…
Web服务器
web服务器是处于被动监听等待状态,用来处理用户的请求并给用户一些响应信息。
IIS(Internet Information Services)
- 微软的,Windows系统自带。
Tomcat
-
Tomcat是Apache 软件基金会(Apache Software Foundation)项目中的一个核心项目,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
-
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。
-
Tomcat 运行JSP 页面和Servlet。Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。Tomcat处理静态HTML的能力不如Apache服务器。目前Tomcat最新版本为10.0.5。
-
tomcat目录说明:
在IDEA中配置Tomcat
Tomcat的作用
Tomcat的作用是作为Web服务器部署Web项目,从而让客户端能够访问,在这个过程中它扮演者两个角色: Web服务器和Servlet容器
Web服务器
Servlet容器
IDEA中配置Tomcat
解决警告问题
必须要的配置:访问一个网站,需要指定加载一个文件夹。
项目路径配置:(可写可不写,但/
一定要有,不能删除,若名称带有 “ - ” 会自动转换为 “_”))
启动tomcat
效果:
创建动态Web工程
创建步骤
第一步 创建Empty Project
第二步 创建动态Web的Module
创建好的工程目录结构:
动态工程目录结构
目录或文件名 | 功能 |
---|---|
src目录 | 存放Java源文件 |
web目录 | 存放Web开发相关资源 |
web/WEB-INF目录 | 存放web.xml文件、classes目录、lib目录 |
web/WEB-INF/web.xml文件 | 别名:部署描述符deployment descriptor 作用:Web工程的核心配置文件 |
web/WEB-INF/classes目录 | 存放编译得到的*.class字节码文件 |
web/WEB-INF/lib目录 | 存放第三方jar包 |
在IDEA中重新部署运行
为什么需要重新部署?
对于已经运行过的Web项目,如果我们增加了目录和文件,那么部署目录有可能不会自动同步过来,从而造成实际运行的效果和我们期望的不同。
如下图中,我们在工程目录已经新增了img目录和一张图片:
但是在部署目录并没有出现:
哪怕我们执行了重新部署也没有起作用。
怎么重新部署?
清理部署目录
再重新进行构建:
效果:
清除浏览器缓存
在chrome下按F12唤出开发者模式,选择Application选项的Storage,并点击清除缓存:
导出war包在Tomcat中部署web项目
导出war包
单击工具栏的打开项目设置。
选择Artifacts(打包部署),选择添加Web Application: Archive。
给导出的war命名,为了防止出现路径错误,此处导出war的名字必须和项目部署名字相同,假如原先的项目部署路径是pro04的话:
确认创建或选择已有的Manifest.MF文件。单词“manifest”的意思是“显示” 。 这个 manifest 文件定义了与扩展和包相关的数据
选择Manifest.MF文件存储目录:
编译生成war:
war包部署到Tomcat并启动
将Web项目打包成war包后,然后将war包放入Tomcat的webapps目录中即可:
在tomcat的bin目录中,点击startup.bat重启tomcat。在Tomcat启动过程中,会自动将war包进行解压,然后运行解压后的项目:
在浏览器访问我们刚刚部署的项目"http://localhost:8080/项目文件夹名/要访问的文件名"
补充:
面试题: 简单说明网站是如何进行访问的?
- 输入一个域名,回车
- 检查本机的C:\Windows\System32\drivers\etc\hosts配置文件有没有域名的ip映射
- 有: 则直接返回对应的ip地址,这个地址即我们需要访问的web应用程序的相关页面,可以直接访问。
- 没有: 则取DNS服务器找,找到映射关系即返回,找不到就返回找不到。
The End!!创作不易,欢迎点赞/评论!!欢迎关注个人公众号