Web 后端 请求与响应
一 请求响应
1. 请求(Request)
客户端向服务器发送的HTTP请求,通常包含以下内容:
-
请求行:HTTP方法(GET/POST等)、请求的URL、协议版本。
-
请求头(Headers):客户端信息(如浏览器类型、支持的语言)、Cookie、内容类型等。
-
请求体(Body):POST/PUT请求时携带的数据(如表单参数、JSON)。
在JavaWeb中的处理:
-
Servlet通过
HttpServletRequest对象接收请求:
protected void doGet(HttpServletRequest request, HttpServletResponse response) {// 获取请求参数(如URL中的参数)String username = request.getParameter("username");// 获取请求头信息String userAgent = request.getHeader("User-Agent");
}
2. 响应(Response)
服务器处理请求后返回给客户端的HTTP响应,通常包含:
-
状态行:状态码(如200成功、404未找到)、状态描述。
-
响应头(Headers):内容类型(如HTML/JSON)、Cookie、缓存控制等。
-
响应体(Body):返回的实际内容(如HTML页面、JSON数据)。
在JavaWeb中的处理:
-
Servlet通过
HttpServletResponse对象生成响应:
protected void doGet(HttpServletRequest request, HttpServletResponse response) {// 设置响应内容类型(如HTML或JSON)response.setContentType("text/html;charset=UTF-8");// 写入响应内容PrintWriter out = response.getWriter();out.println("<h1>Hello, World!</h1>");// 设置响应状态码(可选)response.setStatus(200);
}
3. 常见场景
-
GET请求:获取数据(如访问网页),参数通过URL传递。
-
POST请求:提交数据(如表单提交),参数通过请求体传递。
-
重定向:服务器返回302状态码,让客户端跳转到新URL。
response.sendRedirect("/new-page.jsp");
返回JSON:常用于前后端分离项目。
response.setContentType("application/json;charset=UTF-8");
String json = "{\"name\":\"Tom\", \"age\":20}";
out.print(json);
4. 典型流程
-
客户端发送HTTP请求到服务器(如访问
/login)。 -
服务器解析请求,交给对应的Servlet处理。
-
Servlet通过
request获取参数,执行业务逻辑(如查询数据库)。 -
Servlet通过
response生成响应(返回页面或数据)。 -
客户端接收并渲染响应结果。
5 总结
-
请求(Request):客户端向服务器要数据或提交数据。
-
响应(Response):服务器处理请求后返回结果。
-
JavaWeb通过
HttpServletRequest和HttpServletResponse对象封装了HTTP协议的底层细节,开发者只需关注业务逻辑的实现。
二 BS架构与CS架构

1. BS架构(Browser/Server)
定义
用户通过浏览器(如Chrome、Firefox)访问应用,业务逻辑和数据存储集中在服务器端,客户端仅负责展示和简单交互。
特点
-
客户端:无需安装额外软件,只需浏览器。
-
服务器:负责核心逻辑、数据处理和存储。
-
通信:基于HTTP/HTTPS协议,通过请求-响应模式交互。
优点
-
跨平台:支持任何有浏览器的设备(PC、手机、平板)。
-
维护方便:只需更新服务器,客户端自动同步。
-
低成本:无需开发和维护多平台的客户端。
-
轻量级:适合快速迭代的Web应用(如电商、博客)。
缺点
-
性能依赖网络:弱网环境下体验差。
-
功能受限:复杂操作(如3D渲染、本地硬件调用)支持有限。
-
安全性较低:易受XSS、CSRF等Web攻击。
适用场景
-
Web应用(如在线办公、电商网站)。
-
信息展示型系统(如新闻门户、企业官网)。
-
轻量级交互需求(如表单提交、数据查询)。
技术栈
-
前端:HTML/CSS/JavaScript、React/Vue等框架。
-
后端:Java/Python/PHP、Spring/Django/Node.js。
-
协议:HTTP/HTTPS、WebSocket。
2. CS架构(Client/Server)
定义
用户需要安装独立的客户端软件,客户端承担部分业务逻辑,与服务器协同工作。
特点
-
客户端:需安装特定程序(如桌面应用、手机APP)。
-
服务器:负责核心数据和业务逻辑。
-
通信:通常基于TCP/UDP或自定义协议,支持实时交互。
优点
-
性能高:客户端可处理复杂计算(如图形渲染、本地缓存)。
-
功能强大:支持本地硬件操作(如摄像头、打印机)。
-
离线可用:部分功能可在无网络时使用(如本地数据库)。
缺点
-
开发维护成本高:需适配多平台(Windows/macOS/iOS/Android)。
-
更新复杂:需用户手动升级客户端版本。
-
依赖用户设备:硬件兼容性可能存在问题。
适用场景
-
高性能需求应用(如大型游戏、视频编辑软件)。
-
本地硬件交互(如工业控制、医疗设备)。
-
企业级内部系统(如ERP、财务软件)。
技术栈
-
客户端:C++/C#(桌面)、Java/Kotlin(Android)、Swift(iOS)。
-
服务器:Java/Python/C++、MySQL/Oracle等数据库。
-
通信协议:TCP/UDP、gRPC、自定义二进制协议。
相关文章:
Web 后端 请求与响应
一 请求响应 1. 请求(Request) 客户端向服务器发送的HTTP请求,通常包含以下内容: 请求行:HTTP方法(GET/POST等)、请求的URL、协议版本。 请求头(Headers):…...
【深度解析】图解Deepseek-V3模型架构-混合专家模型(MoE)
一、引言 最近非常火爆的DeepSeek-V3模型,是一个包含6710亿总参数的强大混合专家模型(MoE),该模型在DeepSeek-V2验证有效的核心架构基础上,采用多头潜在注意力(MLA)机制和DeepSeekMoE架构&…...
全平台搭载旭日5!科沃斯GOAT智能割草机器人全新系列正式开售
要闻 近日,科沃斯全新发布的GOAT A Series 和 GOAT O Series割草机器人,将在多国市场正式上市发售。作为业界最强的割草机器人产品之一,GOAT致力为割草机带来基于机器人视觉的专业定位解决方案。科沃斯GOAT全新系列产品全平台搭载地瓜机器人…...
ORB-SLAM3的源码学习:TwoViewReconstruction通过两幅图像来实现重建
前言 TwoViewReconstruction和Initializer 在功能上实际是有重叠,但它们的设计目标和使用场景不同。TwoViewReconstruction专注于处理两幅图像之间的相对运动和三维点重建,而Initializer 负责整个 SLAM 系统的初始化,包括地图的构建和系统的…...
基于单片机ht7038 demo
单片机与ht7038 demo,三相电能表,电量数据包括电流电压功能,采用免校准方法 列表 ht7038模块/CORE/core_cm3.c , 17273 ht7038模块/CORE/core_cm3.h , 85714 ht7038模块/CORE/startup_stm32f10x_hd.s , 15503 ht7038模块/CORE/startup_stm32…...
【DeepSeek三部曲】DeepSeek-R1论文详细解读
这里写目录标题 摘要1. 引言1.1 贡献1.2 评估结果总结 2. 方法2.1 概述2.2 DeepSeek-R1-Zero:在base模型上进行强化学习2.2.1 强化学习算法2.2.2 奖励模型2.2.3 训练模版2.2.4 DeepSeek-R1-Zero的表现、自我进化过程以及顿悟时刻 2.3 DeepSeek-R1:带有冷…...
【深度学习】计算机视觉(CV)-目标检测-DETR(DEtection TRansformer)—— 基于 Transformer 的端到端目标检测
1.什么是 DETR? DETR(DEtection TRansformer) 是 Facebook AI(FAIR)于 2020 年提出的 端到端目标检测算法,它基于 Transformer 架构,消除了 Faster R-CNN、YOLO 等方法中的 候选框(…...
Windows Docker运行Implicit-SVSDF-Planner
Windows Docker运行GitHub - ZJU-FAST-Lab/Implicit-SVSDF-Planner: [SIGGRAPH 2024 & TOG] 1. 设置环境 我将项目git clone在D:/Github目录中。 下载ubuntu20.04 noetic镜像 docker pull osrf/ros:noetic-desktop-full-focal 启动容器,挂载主机的D:/Github文…...
ELK安装部署同步mysql数据
ELK 安装部署指南 ELK 是 Elasticsearch、Logstash 和 Kibana 的简称,用于日志收集、存储、分析和可视化。 1. 安装 Elasticsearch Elasticsearch 是一个分布式搜索和分析引擎。 1.1 下载并安装 访问 Elasticsearch 官网 下载最新版本。 解压并安装: tar…...
Vision Transformer图像分块嵌入核心技术解析:从数学推导到工业级应用
一、技术原理与数学建模 1.1 图像分块过程数学表达 给定输入图像 x ∈ R H W C x \in \mathbb{R}^{H \times W \times C} x∈RHWC,将其分割为 N N N 个尺寸为 P P P \times P PP 的图块: x p ∈ R N ( P 2 ⋅ C ) 其中 N H W P 2 x_p \in \m…...
【产品资料】陀螺匠·企业助手v1.8 产品介绍
陀螺匠企业助手是一套采用Laravel 9框架结合Swoole高性能协程服务与Vue.js前端技术栈构建的新型智慧企业管理与运营系统。该系统深度融合了客户管理、项目管理、审批流程自动化以及低代码开发平台,旨在为企业提供一站式、数字化转型的全方位解决方案,助力…...
深度求索-DeepSeek-R1本地部署指南
1、参考:部署指南 2、参考:deepseek本地部署只需三步 DeepSeek本地部署只需三步: 1、安装运行环境:安装 Ollama:Ollama官网:官网 2、下载模型:参数越大,需要物里硬件越多 3、安装部…...
代码随想录day12
144.二叉树的前序遍历 //明确递归的函数,结束边界,单层逻辑 void traversal(TreeNode* node, vector<int>& list){if(node nullptr){return;}list.push_back(node->val);traversal(node->left, list);traversal(node->right, list)…...
告别第三方云存储!用File Browser在Windows上自建云盘随时随地访问
文章目录 前言1.下载安装File Browser2.启动访问File Browser3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 无论是个人用户还是企业团队,都希望能够有一个高效、安全的解决方案来…...
Ubuntu 下 nginx-1.24.0 源码分析 - NGX_MAX_ALLOC_FROM_POOL
NGX_MAX_ALLOC_FROM_POOL 定义在 src\core\ngx_palloc.h #define NGX_MAX_ALLOC_FROM_POOL (ngx_pagesize - 1) 在 src/os/unix/ngx_alloc.h extern ngx_uint_t ngx_pagesize; 这个全局变量定义在 src\os\unix\ngx_alloc.c 中 ngx_uint_t ngx_pagesize; 在 src/os/unix/ngx_…...
PyQt6/PySide6 的 SQL 数据库操作(QtSql)
一、核心组件架构 1.1 QtSql模块构成 QSqlDatabase:数据库连接管理(支持连接池)QSqlQuery:SQL语句执行与结果遍历QSqlTableModel:可编辑的表格数据模型QSqlQueryModel:只读查询结果模型QSqlRelationalTab…...
利用IDEA将Java.class文件反编译为Java文件:原理、实践与深度解析
文章目录 引言:当.class文件遇到源代码缺失第一章:反编译技术基础认知1.1 Java编译执行原理1.2 反编译的本质1.3 法律与道德边界 第二章:IDEA内置反编译工具详解2.1 环境准备2.2 三步完成基础反编译2.3 高级反编译技巧2.3.1 调试模式反编译2.…...
Kafka偏移量管理全攻略:从基础概念到高级操作实战
#作者:猎人 文章目录 前言:概念剖析kafka的两种位移消费位移消息的位移位移的提交自动提交手动提交 1、使用--to-earliest重置消费组消费指定topic进度2、使用--to-offset重置消费offset3、使用--to-datetime策略指定时间重置offset4、使用--to-current…...
【R语言】GitHub Copilot安装-待解决
参考: 文章目录...
软件定义汽车时代的功能安全和信息安全
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
二维FDTD算法仿真
二维FDTD算法仿真,并带完全匹配层,输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...
6.9-QT模拟计算器
源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...
李沐--动手学深度学习--GRU
1.GRU从零开始实现 #9.1.2GRU从零开始实现 import torch from torch import nn from d2l import torch as d2l#首先读取 8.5节中使用的时间机器数据集 batch_size,num_steps 32,35 train_iter,vocab d2l.load_data_time_machine(batch_size,num_steps) #初始化模型参数 def …...
