JavaWeb基础概念以及与架构之间有哪些区别

 更新时间:2025年12月24日 09:44:24   作者:guslegend  
JavaWeb是基于Java技术栈开发的Web应用,SpringMVC是实现JavaWeb的一种框架,C/S架构和B/S架构的区别主要在客户端形式、开发维护成本、响应速度和跨平台能力,本文介绍JavaWeb基础概念以及与架构之间有哪些区别,感兴趣的朋友跟随小编一起看看吧

什么是JavaWeb?架构之间有哪些区别?

Java Web 定义:

  • JavaWeb是基于Java技术栈开发的Web应用的总称;
  • Web(World Wide Web,中文为万维网)是一种基于互联网的信息服务系统;
  • 核心是通过浏览器访问全球各地服务器上的资源;
  • 我们日常用浏览器刷网页,看新闻,在线工具都是用的web服务器;
  • 本质是java技术与web架构的结合,是企业级web应用开发的主流方向之一;
  • SpringMVC是基于Javaweb实现的。

对比维度

C/S 架构(客户端 / 服务器)

B/S 架构(浏览器 / 服务器)

客户端形式

专用软件(需安装,适配特定系统)

通用浏览器(无需安装,跨设备兼容)

开发维护成本

高(多平台开发,客户端逐个升级)

低(仅维护服务器,升级同步所有用户)

响应速度

快(本地处理部分逻辑,减少网络传输)

较慢(依赖网络与服务器,高并发易卡顿)

跨平台能力

差(不同系统需单独开发客户端)

好(支持所有带浏览器的设备)

典型应用

游戏客户端、专业工具(如 Photoshop)

电商网站、在线文档、政务平台

用户使用门槛

高(需安装,对设备配置有要求)

低(输入 URL 即可访问,低配置设备可用)

Web工作的原理

第1步:用户发起请求(输入URL):在浏览器输入访问地址

  • 浏览器解析URL核心信息,协议,域名,资源路径。

第2步:域名解析(将域名转为IP地址):依赖DNS(域名系统)

  • 优先查询浏览器本地DNS缓存;
  • 如果本地没有缓存,查询路由器DNS缓存;
  • 仍无结果则向运营商DNS服务器发起查询;
  • 运营商DNS服务器向DNS服务器查询;

第3步:建立TPC连接:通过TPC协议建立可靠网络连接(三次握手🤝

  • 客户端(浏览器)向服务器发生"请求连接"数据包;
  • 服务器接受后,返回"同意连接"数据包;
  • 客户端确认收到响应,发送"连接确认"数据包,TCP连接正式建立;

第4步:发送HTTP请求

  • 请求内容组成:
    • 请求方法:GET(获取首页 HTML 等资源)、POST(提交登录表单等数据);
    • 请求头:包含浏览器信息(如 Chrome 版本)、Cookie(登录状态)、期望响应格式(如 HTML、JSON);
    • 请求体:仅 POST 请求包含(如加密后的用户名、密码)。
  • HTTP定义
    • HTTP(HyperText Transfer Protocol,超文本传输协议)是应用层的核心协议
    • 用于客户端(如浏览器、Postman)与服务器之间传输超文本数据(HTML、图片、视频、JSON 等)
    • 是万维网(WWW)服务的基础。
    • 浏览器与服务器的通信全依赖 HTTP 协议
    • 它定义了 “请求该发什么”“响应该怎么回” 的规则。

第5步:服务器处理请求并返回响应

  • 服务器协同处理流程:
    • 应用服务器(如 Nginx)解析请求(识别需返回首页资源);
    • 若需数据支撑(如首页推荐内容),应用服务器向数据库服务器发起查询;
    • 数据库服务器返回数据(如推荐新闻、图片链接);
    • 应用服务器生成响应内容(HTML 代码、CSS 样式、JS 脚本),经 HTTPS 加密后返回浏览器;
  • 响应内容组成:
    • 响应状态码:200(成功)、404(资源不存在)、500(服务器错误)等;
    • 响应头:包含服务器信息(如 Nginx 版本)、数据类型(text/html表示 HTML 页面)、缓存规则;
    • 响应体:核心资源(HTML 代码、图片二进制数据等)。

第6步:关闭TCP连接:浏览器没有请求其他资源,会发生四次挥手

  • 客户端发生"关闭连接"请求;
  • 服务器放回"准备关闭"响应,等待剩余数据传输;
  • 服务器确认无剩余数据,发生"关闭连接"请求;
  • 客户端返回"确认关闭"响应。TCP连接正式关闭;

第7步:浏览器解析并渲染页面

  • 解析 HTML:生成 DOM 树(描述页面结构,如标题、按钮位置);
  • 解析 CSS:生成 CSSOM 树(定义页面样式,如字体大小、颜色);
  • 结合 DOM 树与 CSSOM 树,生成渲染树(仅包含需显示的元素及样式);
  • 布局(Layout):计算渲染树中元素的位置和大小;
  • 绘制(Paint):根据布局结果将元素绘制到浏览器窗口(填充颜色、渲染图片);
  • 执行 JavaScript:运行页面 JS 脚本(如搜索框自动补全功能),动态修改页面内容(更新 DOM 树、发送异步请求)。

HTTP和HTTPS核心区别

HTTP 的明文传输存在 “窃听、篡改、伪造” 风险,HTTPS 通过 “TLS/SSL 加密” 解决此问题,两者核心区别如下:

对比维度

HTTP

HTTPS

默认端口

80

443

数据传输

明文(可被抓包工具直接查看)

TLS/SSL 加密(抓包仅见密文)

安全性

低(无加密、无身份验证)

高(加密 + 服务器身份验证,需 CA 证书)

性能开销

无加密 / 解密开销,速度快

需 TLS 握手、加密 / 解密,性能略低(可优化)

证书要求

无需证书

需 CA 机构颁发的 SSL 证书(免费 / 付费)

适用场景

非敏感数据(如静态文档、内部系统)

敏感数据(如登录、支付、电商、个人信息)

HTTP消息结构-请求

什么是http消息结构?

  • HTTP 消息是客户端与服务器通信的 “数据载体”
  • 遵循 “起始行 + 头部字段 + 空行 + 消息体” 的格式(空行是必需的,用于分隔头部和消息体)

请求报文结构

  • 请求报文由客户端发送给服务器,格式如下:
    • 请求行(必需):定义请求方法、目标资源、HTTP版本
    • 请求头(可选):描述请求的元数据(键值对形式)
    • 空行(必需):标识请求头结束
    • 请求体(可选):携带请求数据(如表单、JSON,但get方法不推荐携带请求体,却没有严格禁止)

请求行详解

  • 格式:请求方法 + 请求URI + HTTP版本
  • 请求方法:定义对资源的操作(如 GET = 查询、POST = 提交);
  • 请求 URI:目标资源路径(如/api/user/index.html);
  • HTTP 版本:如HTTP/1.1(最常用)、HTTP/2、HTTP/3。
  • 示例:
GET /user?page=1&size=10 HTTP/1.1  # GET请求:查询第1页用户,每页10条
POST /api/login HTTP/1.1           # POST请求:提交登录数据
  • 使用浏览器开发者工具查看结构信息

常见请求头(核心元数据)

请求头字段

作用说明

示例

Host

服务器域名 + 端口(HTTP/1.1 必需,区分虚拟主机)

Host: example.com:8080

User-Agent

客户端身份(浏览器 / 设备信息,用于服务器适配)

User-Agent: Mozilla/5.0 (Windows NT 10.0; ...)

Accept

客户端可接受的响应数据类型

Accept: text/html, application/json

Content-Type

请求体的数据类型(POST/PUT 时必需)

Content-Type: application/json

Content-Length

请求体的字节长度(帮助服务器接收完整数据)

Content-Length: 56

Cookie

客户端存储的 Cookie(用于会话管理)

Cookie: sessionId=abc123; username=test

Connection

是否复用 TCP 连接(HTTP/1.1 默认keep-alive

Connection: keep-alive

请求体示例(POST/PUT 方法)

  • 表单数据格式(
Content-Type: application/x-www-form-urlencoded

):text

username=admin&password=123456&remember=true
  • JSON 格式(
Content-Type: application/json

):json

{
  "username": "admin",
  "password": "123456",
  "remember": true
}

HTTP消息结构-响应

响应报文结构

  • 响应报文由服务器返回给客户端,格式如下:text
    • 响应行(必需):定义HTTP版本、状态码、原因短语
    • 响应头(可选):描述响应的元数据(键值对形式)
    • 空行(必需):标识响应头结束
    • 响应体(可选):服务器返回的实际数据(如HTML、JSON)

响应行详解

  • 格式:HTTP版本 + 状态码 + 原因短语
  • 状态码:3 位数字,标识请求处理结果(如 200 = 成功、404 = 资源不存在);
  • 原因短语:状态码的文字描述(仅辅助理解,程序不依赖)。
  • 示例:text
HTTP/1.1 200 OK              # 请求成功
HTTP/1.1 404 Not Found       # 资源不存在
HTTP/1.1 500 Internal Server Error  # 服务器内部错误

常见响应头(核心元数据)

响应头字段

作用说明

示例

Content-Type

响应体的数据类型 + 编码(客户端解析依据)

Content-Type: text/html; charset=UTF-8

Content-Length

响应体的字节长度

Content-Length: 2048

Server

服务器软件信息(如 Web 服务器类型)

Server: Nginx/1.21.0

Set-Cookie

服务器向客户端写入 Cookie(会话管理)

Set-Cookie: sessionId=xyz789; Max-Age=3600

Location

重定向的目标 URL(配合 3xx 状态码使用)

Location: /login

Cache-Control

缓存控制策略(如缓存有效期)

Cache-Control: max-age=86400

Retry-After

服务不可用时,建议重试的时间(秒,配合 503)

Retry-After: 3600

响应体示例

  • HTML 格式(
Content-Type: text/html

):html

<!DOCTYPE html>
<html>
  <head>
    <title>首页</title>
  </head>
  <body>
    <h1>欢迎访问HTTP协议讲解页面!</h1>
    <p>当前时间:2024-01-01 12:00:00</p>
  </body>
</html>
  • JSON 格式(
Content-Type: application/json

):json

{
  "code": 200,
  "message": "请求成功",
  "data": {
    "username": "admin",
    "role": "admin",
    "createTime": "2024-01-01"
  }
}

HTTP请求方法

HTTP 请求方法定义

  • HTTP 请求方法是客户端(如浏览器、APP、接口调用工具)向服务器发送请求时,声明 “请求目的” 的标准化指令
  • 它定义了客户端希望服务器对目标资源执行的操作(如 “获取资源”“提交数据”“更新信息”)。
  • 作为 HTTP 协议的核心组成部分,请求方法的设计遵循 “语义化” 原则
    • 不同方法对应明确的操作含义,确保客户端与服务器之间的沟通统一、无歧义
    • 同时也影响服务器的处理逻辑(如缓存策略、数据修改权限)。

核心方法如下:

请求方法

核心语义

关键特点

典型应用场景

GET

查询资源

1. 请求参数在 URL 中(可见);2. 无请求体;3. 幂等;4. 有 URL 长度限制(约 2KB)

访问页面、查询列表(如/user?page=1

POST

提交资源(创建)

1. 请求参数在请求体中(不可见);2. 非幂等;3. 无长度限制

表单提交、用户注册、登录

PUT

全量更新资源

1. 需提供资源的完整信息;2. 幂等;3. 覆盖式更新

全量修改用户信息(如PUT /user/1

DELETE

删除资源

1. 无请求体(或仅传辅助参数);2. 幂等

删除用户(DELETE /user/1

)、删除文章

PATCH

部分更新资源

1. 仅需提供需修改的字段;2. 幂等

仅更新用户手机号(PATCH /user/1

HEAD

获取资源头部

与 GET 一致,但无响应体(仅返回头信息)

检查资源是否存在、获取缓存信息

关键概念:幂等性

  • 指 “多次执行相同请求,结果完全一致(无副作用)”。例如:GET 查询 100 次,结果相同;DELETE 删除 100 次,第一次删完后,后续 99 次仍返回 “删除成功”(无额外副作用)。

重点:GET 与 POST 的核心区别

对比维度

GET

POST

数据位置

URL 参数(?key=value

请求体(Form/JSON)

安全性

明文传输(不安全,易被抓包)

数据在请求体(相对安全,需配合 HTTPS)

幂等性

幂等(适合查询)

非幂等(适合提交)

缓存支持

浏览器默认缓存(可通过头控制)

默认不缓存

长度限制

受 URL 长度限制(约 2KB)

无限制

HTTP状态码

什么是HTTP状态码?

  • HTTP 状态码(HTTP Status Code)是服务器对客户端(如浏览器、APP)发送的 HTTP 请求的响应状态标识
  • 由 3 位数字组成(范围 100-599)
  • 它的核心作用是:让客户端快速判断请求的处理结果(成功、失败、需要进一步操作等)
  • 无需解析响应体内容即可了解基本状态,同时为问题排查(如 “为什么页面打不开”“为什么登录失败”)提供明确方向。

HTTP 状态码分为 5 大类,每类代表不同的 “请求处理状态”,开发中需重点掌握常用状态码:

状态码分类

核心含义

常用状态码及说明

1xx

信息性(临时响应)

100 Continue:服务器已接收请求头,客户端可继续发送请求体(多用于大文件 POST)

2xx

成功

200 OK:请求成功(最常用);201 Created:资源创建成功(如 POST 新增用户);204 No Content:请求成功但无响应体(如 DELETE)

3xx

重定向(需额外操作)

301 Moved Permanently:永久重定向(如域名变更);302 Found:临时重定向(如未登录跳登录页);304 Not Modified:资源未修改,使用本地缓存

4xx

客户端错误

400 Bad Request:请求语法错误(如 JSON 格式错);401 Unauthorized:未认证(未登录);403 Forbidden:权限不足(如普通用户访问管理员接口);404 Not Found:资源不存在(URL 错);405 Method Not Allowed:请求方法不允许(如用 POST 访问 GET 接口)

5xx

服务器错误

500 Internal Server Error:服务器内部错误(如代码 BUG);502 Bad Gateway:网关错误(如 Nginx 连不上 Tomcat);503 Service Unavailable:服务暂时不可用(如维护、负载过高);504 Gateway Timeout:网关超时(如 Tomcat 处理太慢)

HTPP版本演进

HTTP 协议不断迭代,核心目标是 “提升性能、优化体验”,各 HTTP 版本核心差异对比:

版本

发布时间

核心传输层

关键特性

主要痛点

当前应用占比(2025)

HTTP/0.9

1991

TCP

仅 GET、纯 HTML、短连接

功能极简,无错误处理

0%(淘汰)

HTTP/1.0

1996

TCP

多方法、HTTP 头部、多媒体

短连接默认,无缓存

<1%(老旧设备)

HTTP/1.1

1999

TCP

长连接、管道化、缓存机制

队头阻塞、头部冗余

40%-50%

HTTP/2

2015

TCP

二进制帧(拆分消息为二进制格式的小块)、多路复用(同时传输多个 HTTP 请求 / 响应)、HPACK(头部压缩算法)

TCP 队头阻塞

45%-55%

HTTP/3

2022

UDP(QUIC)

无队头阻塞、0-RTT、连接迁移

兼容性需完善

10%-20%

关键问题:HTTP/1.1 的 “队头阻塞”

  • 指 “同一 TCP 连接中,前一个请求未完成,后续请求必须排队等待”—— 若前一个请求超时,后续所有请求都卡住。HTTP/2 的多路复用通过 “二进制帧拆分” 解决此问题。

到此这篇关于JavaWeb基础概念以及与架构之间有哪些区别的文章就介绍到这了,更多相关JavaWeb基础概念内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 关于Java的对象序列化流和反序列化流详细解读

    关于Java的对象序列化流和反序列化流详细解读

    这篇文章主要介绍了关于Java的对象序列化流和反序列化流,对象序列化:就是将对象保存到磁盘中,或者在网络中传输对象,反之,自己序列还可以从文件中读取回来,重构对象,对它进行反序列化,需要的朋友可以参考下
    2023-05-05
  • java开发中嵌套类的详解及实例

    java开发中嵌套类的详解及实例

    这篇文章主要介绍了 java开发中嵌套类的详解及实例的相关资料,一般把定义内部类的外围类成为包装类(enclosing class)或者外部类,需要的朋友可以参考下
    2017-07-07
  • java过滤html标签获取纯文本信息的实例

    java过滤html标签获取纯文本信息的实例

    今天小编就为大家分享一篇java过滤html标签获取纯文本信息的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • springAop实现讲解(看这篇够了)

    springAop实现讲解(看这篇够了)

    AOP面向切面编程是一种编程范式,它通过将通用的横切关注点(如日志、事务、权限控制等)与业务逻辑分离,使得代码更加清晰、简洁、易于维护,这篇文章主要介绍了springAop实现讲解(看这篇够了),需要的朋友可以参考下
    2024-02-02
  • Java7和Java8中的ConcurrentHashMap原理解析

    Java7和Java8中的ConcurrentHashMap原理解析

    这篇文章主要介绍了Java7和Java8中的ConcurrentHashMap原理解析,对ConcurrentHashMap感兴趣的读者,一定要好好看一下
    2021-04-04
  • SpringBoot整合Druid数据库连接池的方法

    SpringBoot整合Druid数据库连接池的方法

    Druid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。这篇文章主要介绍了SpringBoot整合Druid数据库连接池的方法,需要的朋友可以参考下
    2020-07-07
  • 基于MyBatis的简单使用(推荐)

    基于MyBatis的简单使用(推荐)

    下面小编就为大家带来一篇基于MyBatis的简单使用(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • Java Integer[]和int[]互相转换方式

    Java Integer[]和int[]互相转换方式

    这篇文章主要介绍了Java Integer[]和int[]互相转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • SpringBoot中GlobalExceptionHandler异常处理机制详细说明

    SpringBoot中GlobalExceptionHandler异常处理机制详细说明

    Spring Boot的GlobalExceptionHandler是一个全局异常处理器,用于捕获和处理应用程序中发生的所有异常,这篇文章主要给大家介绍了关于Java中GlobalExceptionHandler异常处理机制的相关资料,需要的朋友可以参考下
    2024-03-03
  • 深入浅出Java中的字节流和字符流详解

    深入浅出Java中的字节流和字符流详解

    Java 中的输入输出(I/O)流主要分为字节流和字符流,这两类流为开发者提供了高效的文件读写方式,也解决了不同编码格式下的字符处理问题,本文将带你深入了解字节流和字符流的区别、应用场景以及如何使用它们处理文件操作
    2024-12-12

最新评论