B/S通信架构原理
1. Web系统的访问过程
一般来说,我们在使用浏览器浏览web的页面的时候,会经历以下这几个过程
- 打开浏览器
- 找到地址栏
- 在地址栏中输入合法的url,敲回车
- 在浏览器上会展示响应的内容
我们重点来看看敲下回车之后到相应内容的这个阶段到底发生了什么?
我们以百度为例:https://www.baidu.com
- 域名解析
对于上面的百度访问URL为例,www.baidu.com是它的域名,回车之后,**域名解析器**会将域名解析出来一个具体的IP地址和端口号
C:\Users\12743>ping www.baidu.com
正在 Ping www.a.shifen.com [163.177.151.109] 具有 32 字节的数据:
来自 163.177.151.109 的回复: 字节=32 时间=4ms TTL=54
来自 163.177.151.109 的回复: 字节=32 时间=4ms TTL=54
来自 163.177.151.109 的回复: 字节=32 时间=4ms TTL=54
来自 163.177.151.109 的回复: 字节=32 时间=4ms TTL=54
163.177.151.109 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 4ms,最长 = 4ms,平均 = 4ms
我们使用ping
方式来解析域名,发现得到一个ip地址,我们直接将此ip地址复制到url,发现直接就能访问,因此断定其端口就是80,也就是163.177.151.109:80
- IP地址
计算机进程在网络当中的一个身份证号,在同一个网络中,IP地址是唯一的,其作用是作为网络通信进程的标识,有了IP地址才能建立连接
- 端口号
一个端口代表一个软件(一个端口代表一个应用,一个端口仅代表一个服务),一个计算机中有很多软件,每个软件启动之后都会占用一个端口号,同一个计算机上的端口是唯一的。
简单地来说,IP地址是用来定位机器的,而端口是用来定位服务的。
URL(同一资源定义符):这是因为在访问的时候,实际上通信过程是访问机器->机器上的软件->软件上的资源->将资源回传回来
一个Web系统的通信步骤
- 第一步:用户输入网址(URL)
- 第二步:域名解析器进行域名的解析,将其转化为具体的IP地址和端口
- 浏览器软件在网络中搜索IP地址所对应的主机,直到找到这台主机
- 定位这台主机上的服务器软件,因为是80端口,可以很轻松的定位到80端口所对应的服务器软件
- 80端口对应的服务器软件得知,有一个浏览器想要的资源名是index.html
- 服务器软件找到index.html,并且将index.html文件中的内容直接输出响应
- 浏览器接收到对方服务器的代码(HTML css js)
- 浏览器渲染,执行HTML CSS JS代码。
请求与响应
- 请求和响应实际上说的是数据的流向不同
- 从Browser发送数据到Server端,称为请求
- 从Server端向浏览器Browser端发送数据,我们称为响应
2. Web服务器软件
目前较常用的有:
- Tomcat(Web服务器)
- jetty(Web服务器)
- JBoss(应用服务器)
- WebLogic(应用服务器)
- WebSphere(应用服务器)
应用服务器实现了javaEE的所有规范(JavaEE有13个不同的规范)
Web服务器只实现了JavaEE中的Servlet+JSP两个规范
因此应用服务器是包含了Web服务器的
3. Tomcat简介
3.1 Tomcat是如何启动的?
在windows下有一个startup.bat,通过它可以启动Tomcat服务器
其中定义了启动运行的主方法MAINCLASS=org.apache.catalina.Bootstrap
这个类就是main方法所在的类
JAVA_HOME=JDK的根(环境变量)
CATALINA_HOME=Tomcat服务器的根
3.2 Tomcat目录简介
- bin:二进制文件存放目录
- conf:是Tomcat服务器的配置文件存放目录(server.xml中可以进行端口号的配置,默认启动8080)
- lib:这个目录是Tomcat服务器的核心程序目录,因为tomcat是java语言编写的,jar包里面都是class文件
- logs: Tomcat服务器的日志目录,Tomcat服务器顶等信息都会在这个目录下生成日志文件
- temp:Tomcat服务器的临时目录,存储临时文件
- webapps:这个目录存储大量的webapp(web应用)
- works:该目录用来存放jsp文件翻译之后的java文件以及编译之后的class文件
4. BS结构的角色与协议
对于一个动态的web应用来说,一个请求和响应的过程有多少个角色参与,角色与角色之间有多少个协议?
- 有哪些角色(整个BS结构的系统当中,有哪些人参与进去了)
- 浏览器软件的开发者(B端开发者)
- WebServer的开发者
- 数据库软件的开发者
- webapps的开发者
- B端用户
- 角色和角色之间需要遵守哪些规范与协议?
- webapp的开发团队与webServer的开发团队需要遵守JavaEE的规范之一(Servlet规范)
- Servlet规范能够提供一套接口规范,使得webapp与webServer之间解耦合
- Browser与webServer的通信传输需要遵守http
(超文本传输)
协议 - webapp团队和数据库服务器的开发团队有一套开发规范,也就是jdbc