JavaWeb

1.基本概念

web开发:

  • web,网页的意思
  • 静态web
    • html,css
    • 提供的数据始终不会变化
  • 动态web
    • 提供的信息会改变
    • 技术栈:Servlet/JSP ,ASP ,PHP

在Java中,动态web资源开发的技术统称JavaWeb

1.2web应用程序

web应用程序:可以提供浏览器访问的程序

  • 可以访问到的任何页面和资源,都存在于某一个计算机上
  • URL,通过URL访问
  • 统一的web资源会被放在同一个文件夹下
  • 一个web应用由多部分组成(静态web,动态web)
    • html,css,js
    • jsp,servlet
    • java程序
    • jar包
    • 配置文件(Properties)

web应用程序编写完毕后,想提供给外界访问,需要一个服务器统一管理。

1.3静态网页

*.htm, *.html都是网页后缀,如果服务器上存在就可以直接进行读取。

  • 静态web存在的缺点
    • web页面无法动态更新,所有用户看到的是同一个页面
      • 轮播图,点击特效:伪动态
      • JavaScript[实际开发用的多]
    • 它无法与数据库交互(数据无法持久化,无法交互)

1.4动态网页

页面动态展示:"web页面会改变"

缺点:

  • 假如服务器的动态web资源出现错误,我们需要重新编写后台程序
    • 停机维护

优点:

  • 可以动态更新
  • 可以和数据库交互(数据持久化)

2.web服务器

JSP/Servlet

  • sun公司主推的B/S架构
  • 基于Java语言的
  • 可以承载三高问题带来的影响(高并发,高可用,高性能)

2.2web服务器

服务器是一种被动的操作,用来处理用户的一些请求和用户的一些响应信息

IIS,微软,windows自带

Tomcat

将自己写的网站,放到服务器(Tomcat)中指定的web应用的文件夹(webapps)下,就可以访问网站应该有的结构

-- webapps : Tomcat服务器的web目录-ROOT-XiaoShuai :网站的目录名-classes:Java程序-lib:web应用所依赖的jar包-web.xml:网站配置文件-index.html 默认首页-static -css-js-img

HTTP

HTTP(超文本传输协议)是一个简单的请求-响应协议,通常运行在TCP之上。

  • 文本:html,字符串
  • 超文本:图片,音乐,视频,定位,地图……
  • 80

HTTPS:安全的

  • 443

两个时代

  • http1.0
    • HTTP1.0:客户端可以与web服务器连接后,只能获得一个web资源,断开连接
  • http2.0
    • HTTP1.2:客户端可以与web服务器连接后,可以获得多个web资源

Http请求

  • 客户端…发请求…服务器

百度:

Request URL: https://www.baidu.com/  //请求地址
Request Method:GET	//请求方法,GET/POST
Status Code:200 OK	//状态码 200 OK
Remote(远程) Address:[2408:873d:22:1a91:0:ff:b013:cf81]:443
Accept-Encoding  gzip, deflate, br, zstd
Accept-Languagezh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Connectionkeep-alive

1.请求行

  • 请求行中的请求方式:GET
  • 请求方式:GET/POST HEAD,DELETE,PUT
    • get:请求能够携带的参数比较少,大小有限制,会在浏览器的URL地址栏显示数据内容,不安全但高效
    • post:请求能够携带的参数较大,大小没有限制,不会在浏览器的URL地址栏显示数据内容,安全但不高效

2.消息头

Accept:所支持的数据类型
Accept-Encoding:支持的编码格式
Accept-Language:支持的语言
Cache-Control:缓存控制
Connection:告诉浏览器,请求完成后是断开还是保持连接

Http响应

  • 服务器…响应…客户端
connection:keep-alive   连接
content-encoding:gzip	编码
content-type:text/html; charset=utf-8	类型

1.响应体

Accept:所支持的数据类型
Accept-Encoding:支持的编码格式
Accept-Language:支持的语言
Cache-Control:缓存控制
Connection:告诉浏览器,请求完成后是断开还是保持连接
Refresh:告诉客户端,多久刷新一次
Location:让网页重新定位

2.响应状态码

200:请求响应成功

3**:请求重定向

  • 重定向:重新到新位置

404:找不到资源

5**:服务器代码错误

当你的浏览器地址栏输入地址并回车的一瞬间到页面能够展示回来,经历了什么?

1.URL解析:把"地址"翻译成"可执行指令"

  • 判断输入类型:区分URL还是关键词
  • 拆分URL结构:
    • 协议
    • 域名
    • 端口
    • 路径
    • 查询参数
  • 处理特殊情况:自动补全http://或者https://

2.缓存检查:先查本地,再找远程(为了减少网络请求,提升速度,会先检查本地缓存)

  • 检查缓存层级
    • 第一层,内存缓存
    • 第二层,磁盘缓存
  • 缓存命中/未命中
    • 命中,直接本地读取,跳过后续网络请求,快速渲染页面
    • 未命中,进入下一步——通过DNS解析获取服务器IP

3.DNS解析,把域名解析成服务器IP

  • DNS查询顺序(从近到远,减少延迟)
    • 浏览器DNS缓存
    • 操作系统DNS缓存
    • 本地DNS服务器
    • 根DNS服务器
    • 顶级域名服务器
    • 权威DNS服务器
  • 优化:DNS缓存与预解析

4.TCP连接:建立"浏览器与服务器"的通信通道(核心:三次握手)

  • 三次握手流程:
    • 第一次握手(客户端->服务器):客户端(浏览器)向服务器发送SYN包(同步请求)
    • 第二次握手(服务器->客户端):服务器收到SYN包后,回复SYN+ACK包(同步+确认)
    • 第三次握手(客户端->服务器):浏览器收到SYN+ACK包后,回复ACK包(确认)
  • 三次握手的意义:
    • 避免无效连接请求,确保连接是双向可达的
  • 特殊情况:
    • HTTPS的TLS握手:若协议是HTTPS,TCP连接建立后,会额外进行TLS握手(加密通信协商)
      • 服务器向浏览器发送"数字证书"
      • 浏览器验证证书有效性
      • 双方协商"对称加密密钥"

5.发送HTTP请求:向服务器要资源

连接建立后,浏览器会构建HTTP请求,向服务器传递需要什么资源的指令

  • HTTP请求结构("请求行+请求头+请求体"):
    • 请求行:包含请求方法、URL路径、HTTP版本
      • 请求方法:GET、POST
    • 请求头:传递额外信息
    • 请求体:仅POST等方法需要,用于传递数据,GET方法的参数通过URL查询串传递
  • 请求发送:浏览器将HTTP请求通过已建立的TCP连接发送给服务器

6.服务器处理请求:"解析请求-返回资源"

服务器接收到HTTP请求后,按流程处理

  • 1.请求解析:
    • web服务器软件,解析请求行、请求头,确定所需资源
    • 动态内容:web服务器会将请求转发给应用服务器,应用服务器执行代码生成动态内容
    • 静态内容:web直接从服务器硬盘读取资源
  • 构建HTTP响应,将结果封装成HTTP响应
    • 响应行:HTTP版本、状态码、状态描述
      • 状态码:表示请求处理结果
    • 响应头:传递资源信息
    • 响应体:实际资源
  • 发送响应

7.浏览器解析响应:理解服务器返回的内容

浏览器接收到HTTP响应后,先检查响应状态码

  • 若为3XX,浏览器根据响应头的Location字段,重新发送请求,重复上述DNS、TCP、请求流程
  • 若为4XX或5XX,浏览器会显示对应错误界面
  • 若为200,则根据响应头的Content-Type解析响应体内容

8.页面渲染:把代码变成可视化界面

  • HTML解析:
  • CSS解析
  • 生成渲染树
  • 布局
  • 绘制
  • 合成

9.资源加载:加载页面依赖的其他资源

  • 外部CSS
  • 图片
  • 外部JS

总结:核心流程简化

从输入地址到页面展示,本质是 “请求→处理→响应→渲染” 的闭环,可简化为:
URL解析 → 缓存检查 → DNS解析 → TCP三次握手(+TLS握手) → 发送HTTP请求 → 服务器处理 → 接收HTTP响应 → 页面渲染(DOM+CSSOM→渲染树→布局→绘制→合成) → 加载依赖资源

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

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