概念

概念

静态Web: 数据不会改变,已经很少使用

动态Web:数据动态改变,几乎所有现代网站都是动态的,需要Servlet/Jsp、Asp、PHP等技术支持

JavaWeb是动态Web开发技术的统称

Web应用由html、css、js、jsp/servlet、java程序、jar/war包、配置文件等组成,由服务器统一管理

静态Web

文件类型

.html、.htm

特点

页面内容固定不变

无法与数据库交互(数据无法持久化)

可以通过 JavaScript 实现伪动态效果

动态Web

技术支撑

Servlet、JSP、PHP、ASP、Node.js 等

特点

页面内容可根据用户请求动态变化

支持与数据库交互,实现数据持久化

后台更新后需重新部署

支持复杂功能(登录、权限控制、支付等)

常见Web技术

技术 公司 特点
ASP 微软 微软开发、在HTML脚本中嵌入VB脚本,代码量庞大,页面混乱,难以维护
PHP 开源 快速开发、语法灵活、跨平台,适合中小型网站、无法承载大流量访问
JSP/Servlet Sun / Oracle 基于 Java,支持高并发、可扩展性强,适合大型项目

常见Web服务器

服务器 所属组织 特点
IIS 微软 支持 ASP,Windows 系统常用
Apache HTTP Server Apache 基金会 主要用于静态资源服务,常配合 Tomcat 使用
Tomcat Apache 基金会 轻量级 Servlet 容器,免费开源,适合中小型 JavaWeb 项目
Jetty Eclipse 基金会 更轻量,嵌入式部署友好
WebLogic Oracle 重量级 Java EE 服务器,企业级应用
Nginx 开源 高性能反向代理服务器,常用于负载均衡和静态资源服务

服务器是被动操作的,处理用户请求并返回响应信息

Web架构

类型 全称 特点
C/S 架构 Client/Server 客户端+服务器,需要安装客户端软件(如 QQ、微信)
B/S 架构 Browser/Server 浏览器+服务器,无需安装客户端,通过浏览器访问(如淘宝、百度)

B/S 架构是当前主流 Web 应用架构

网络协议

HTTP

超文本传输协议,是一个简单的请求响应型应用层协议,基于TCP(传输控制协议),数据明文传输,默认端口为80

HTTPS

HTTPS 是 HTTP 的安全版本,通过 SSL(Secure Sockets Layer)或 TLS(Transport Layer Security)加密技术为网络通信提供安全保障,默认端口为443

HTTP/1.0

短连接:每个HTTP请求都需要单独建立TCP连接,完成之后立即关闭连接。这种方式增加了网络延迟,因为每次请求都需要经历三次握手过程。

HTTP/1.1

长连接:引入了持久连接(Persistent Connection),允许在一个TCP连接上发送多个请求和接收多个响应,从而减少了重复建立连接的时间消耗。 管道化:支持请求管道化,即客户端可以在不等待前一个响应的情况下连续发送多个请求,不过服务器仍然按顺序响应这些请求。

HTTP请求

部分 描述 示例
请求行 包括请求方法(如GET, POST)、请求URI、HTTP版本 GET /index.html HTTP/1.1
请求头 提供关于请求的元数据,如客户端类型、可接受的内容类型等 Host: www.example.com, User-Agent: Mozilla/5.0
空行 标识头部结束,消息体开始 (\r\n)
消息体 可选,通常用于POST或PUT请求中携带的数据 表单数据、JSON、XML等

请求头

常见参数 描述
Accept 客户端可处理的内容类型(如 text/html, application/json)。
Accept-Charset 客户端接受的字符集编码(如 utf-8, iso-8859-1)。
Accept-Encoding 指定客户端能够理解的内容编码方式(如 gzip, deflate)。
Accept-Language 客户端希望接收的语言版本(如 en-US, zh-CN)。
Authorization 用于身份验证的信息(通常配合服务端的认证机制使用)。
Cache-Control 控制缓存的行为(如 no-cache, max-age=3600)。
Connection 控制网络连接的行为(如 keep-alive, close)。
Content-Length 请求体的长度(字节)。
Content-Type 请求体的数据类型(如 application/x-www-form-urlencoded, multipart/form-data)。
Cookie 存储在客户端并随请求发送到服务器的cookie数据。
Host 目标主机和端口号。
If-Modified-Since 只有当资源自指定日期以来被修改时才返回资源内容。
Referer 发出请求的页面URL。
User-Agent 发送请求的客户端信息(包括浏览器类型、操作系统等)。

HTTP响应

部分 描述 示例
状态行 包括HTTP版本、状态码及描述 HTTP/1.1 200 OK
响应头 提供关于响应的元数据,如内容类型、长度、缓存控制等 Content-Type: text/html; charset=UTF-8, Content-Length: 1024等
空行 标识头部结束,消息体开始 (\r\n)
消息体 可选,通常包含返回给客户端的实际内容 HTML文档、图片、JSON数据等

响应头

常见参数 描述
Content-Length 响应体的大小(字节)。
Content-Type 响应体的数据类型(如 text/html; charset=UTF-8, application/json)。
Content-Encoding 内容编码格式(如 gzip, deflate)。
Content-Disposition 提供有关如何处理响应内容的建议(如 attachment; filename="filename.jpg")。
Cache-Control 指示是否可以缓存响应及如何缓存(如 public, private, no-store)。
Expires 设置响应被认为过期的时间点。
Set-Cookie 向客户端设置一个cookie。
Access-Control-Allow-Origin 指定哪些域可以访问资源(CORS机制的一部分)。
Age 资源在代理缓存中存在的时间(秒)。
Content-Language 内容的语言类型(如 en, zh)。
Date 响应生成的日期和时间。
ETag 标识特定版本的资源,以便检测更新或避免重复获取相同内容。
Last-Modified 所请求资源最后一次修改的时间。
Location 重定向的目标地址(通常用于 3xx 状态码)。
Server 发送响应的服务器软件信息。

HTTP状态码

信息性响应 (100–199)

状态码 英文名称 作用
100 Continue 客户端应继续其请求。
101 Switching Protocols 服务器理解并正在切换到客户端请求的新协议。
102 Processing 请求将被处理,但需要一些时间完成。
103 Early Hints 提供一些关于最终响应的信息提示。

成功响应 (200–299)

状态码 英文名称 作用
200 OK 请求成功。
201 Created 请求成功并且服务器创建了新的资源。
202 Accepted 已接受请求,但尚未处理完成。
203 Non-Authoritative Information 返回的信息不是原始服务器确定的有效表示。
204 No Content 请求成功,但没有返回任何内容。
205 Reset Content 请求成功,但用户代理应重置视图。
206 Partial Content 服务器正在发送部分数据。
207 Multi-Status 可能包含多个单独响应的代码。
208 Already Reported DASL中定义,指示绑定已经报告过。
226 IM Used 服务器已完成对资源的请求,并且响应是对所请求实例的表示。

重定向消息 (300–399)

状态码 英文名称 作用
300 Multiple Choices 针对请求存在多个可能的响应。
301 Moved Permanently 所请求的页面已经永久移动到新位置。
302 Found 所请求的页面临时移到另一个位置。
303 See Other 应该通过GET方法来定位资源。
304 Not Modified 资源未被修改,可以使用缓存。
305 Use Proxy 请求的资源必须通过指定的代理访问。
307 Temporary Redirect 页面临时移到另一个位置,不改变请求方法。
308 Permanent Redirect 页面永久移到另一个位置,不改变请求方法。

客户端错误响应 (400–499)

状态码 英文名称 作用
400 Bad Request 因为语法无效,服务器无法理解此请求。
401 Unauthorized 当前请求需要用户验证。
402 Payment Required 此响应代码保留以备将来使用。
403 Forbidden 服务器拒绝执行所请求的操作。
404 Not Found 服务器找不到请求的网页。
405 Method Not Allowed 禁用请求中指定的方法。
406 Not Acceptable 服务器只能生成不被请求头接受的响应。
407 Proxy Authentication Required 类似于401,但要求先通过代理服务器的身份验证。
408 Request Timeout 服务器等待客户端发送请求的时间过长。
409 Conflict 由于与资源当前状态冲突,请求无法完成。
410 Gone 所请求的资源不再可用且无更多信息。
411 Length Required 服务器不接受不含实体长度的有效请求。
412 Precondition Failed 前提条件失败导致请求失败。
413 Payload Too Large 请求实体过大,超出了服务器处理能力。
414 URI Too Long 请求URI过长,服务器无法处理。
415 Unsupported Media Type 不支持的媒体类型。
416 Range Not Satisfiable 客户端请求的部分范围不在有效范围内。
417 Expectation Failed 服务器无法满足Expect请求头字段的要求。
418 I'm a teapot 这是一个愚人节笑话RFC中的状态码。
421 Misdirected Request 服务器无法产生响应。
422 Unprocessable Entity 请求格式正确,但由于含有语义错误而无法响应。
424 Failed Dependency 由于之前的请求失败,导致当前请求失败。
425 Too Early 表示服务器不愿意冒险处理一个可能被重放的请求。
426 Upgrade Required 客户端应当切换到TLS/1.0。
428 Precondition Required 原始服务器要求请求是条件性的。
429 Too Many Requests 用户在给定时间内发送了太多请求。
431 Request Header Fields Too Large 请求头字段太大。
451 Unavailable For Legal Reasons 由于法律原因不可用。

服务器错误响应 (500–599)

状态码 英文名称 作用
500 Internal Server Error 服务器遇到未知情况,阻止其完成请求。
501 Not Implemented 服务器不具备完成请求的功能。
502 Bad Gateway 作为网关或代理服务器,从上游服务器收到无效响应。
503 Service Unavailable 服务器暂时无法使用(可能是过载或维护)。
504 Gateway Timeout 作为网关或代理服务器,未能及时收到上游服务器的响应。
505 HTTP Version Not Supported 服务器不支持请求中使用的HTTP版本。
506 Variant Also Negotiates 内部配置错误。
507 Insufficient Storage 服务器无法存储完成请求所需的内容。
508 Loop Detected 服务器检测到请求处理中出现无限循环。
510 Not Extended 需要进一步扩展才能完成请求。
511 Network Authentication Required 客户端需要进行身份验证才能获得网络访问权限。

HTTP方法

方法名 描述
GET 获取资源,参数在 URL 中可见
POST 提交数据,参数在请求体中,更安全
PUT 更新资源(整个替换)
PATCH 更新资源(局部更新)
DELETE 删除资源
HEAD 获取资源头部信息
OPTIONS 获取服务器支持的方法

当用户在浏览器输入域名并回车后发生了什么?

首先,浏览器会检查其内部的DNS缓存(如果有的话)以寻找之前访问该域名时存储的IP地址。

如果未找到,系统还会检查本机的hosts文件(Windows路径为C:\Windows\System32\drivers\etc\hosts,Linux/macOS路径为/etc/hosts)。如果在此文件中找到了对应的域名和IP地址映射,则直接使用该IP地址进行连接。

如果未找到,操作系统将查询自身的DNS缓存。这包括了最近解析过的域名及其对应的IP地址记录。

如果未找到,计算机会联系预设的DNS服务器(通常是您的ISP提供的,也可以是自定义的如Google的8.8.8.8或Cloudflare的1.1.1.1等公共DNS服务)。这个DNS服务器可能会执行递归查询,这意味着它会代替客户端向其他DNS服务器询问直到找到正确的答案。 DNS递归查询: DNS查询可能涉及多个步骤,包括查询根DNS服务器、顶级域(TLD)DNS服务器(例如.com、.org等),以及最终的目标域名的权威DNS服务器。 一旦找到匹配的IP地址,这个信息会被返回给用户的计算机,并且通常也会被缓存起来以便未来的请求使用。

如果以上步骤均未获得IP地址,浏览器会返回错误

浏览器根据获得的IP地址尝试与目标服务器建立TCP连接(如果是HTTPS还需完成SSL/TLS握手)。 建立连接成功后,浏览器发送HTTP请求(对于现代网站,通常是HTTPS请求),请求页面的内容。

服务器处理请求并返回HTTP响应,包含HTML文档、CSS样式表、JavaScript脚本等资源。

浏览器开始解析这些资源,并逐步构建DOM树、加载图片、执行脚本等,直至网页完全呈现给用户。

为什么还要学习 Servlet/Jsp ?

学习基本的 Servlet 有助于理解 Spring MVC(Spring MVC 的核心是 DispatcherServlet) 等高级Java框架的底层原理,进而掌握高级框架的使用方法。

此外其也有助于掌握 Tomcat 的使用方法(部署、调优等)。

不必在 Servlet/Jsp 中太过深入学习,理解其总体原理即可,毕竟现在主流是 前后端分离 + 模板引擎

技术点 建议掌握程度
Servlet 生命周期(init/doGet/doPost/destroy) ✅ 必须掌握
请求和响应对象(HttpServletRequest / HttpServletResponse) ✅ 必须掌握
过滤器(Filter) ✅ 掌握基本用法(如编码处理、权限验证)
监听器(Listener) ✅ 了解监听事件类型
JSP 的执行过程和 EL 表达式 ✅ 了解即可
Session 和 Cookie ✅ 必须掌握,尤其是 Session 机制

Session 机制不可不品,它解决了 HTTP 协议无状态的问题,实现了用户身份的识别和数据的持久化。

#java##javaweb##spring#
全部评论

相关推荐

首先 我觉得最重要的其实就是方向不清晰。第一次面试是在大二的秋招,当时能力一般,但是胆子很大,直接去面了当时仅有的几个小巨人企业(学校蛮偏的,没大厂几乎),然后就清晰了很多。大概了解了不同岗位需要的不同技能,以及如何提升竞争力除了竞赛,项目,实习。还可以尝试扩展自己的技术栈,例如嵌入式可以结合Android,嵌入式也需要有一定的原理图理解能力,接触到了lvgl,rtos这些概念。找到方向之后就是努力,就是不知道怎么努力。打比赛发现在硬件实验室里面的软件没什么发挥的机会,基本都是裸机开发,没有系统。软件也比较多的就是做个深度学习,视觉处理。实在是电子信息的佬太强了,电机调节啥的都包了,所以一直找不到提升的好方法。后来下定决心自己做项目,从比较熟悉的上位机qt开始做,然后是树莓派网关,云服务器linux的应用层基础,第一次画板,第一次尝试设计协议,第一次做app…终于发现,比赛其实不需要多,更重点是自己能力的提升。如果能力不够,没必要空焦虑,要把焦虑的情绪指向可以控制的事情上,而不是去想能否就业,能否高薪这种控制不了的事情上。现在来说,其实个人能力不是很强,只能边学边做了。大厂对于我们双非或许就像是月亮吧,总有人能登月,但是更多的只能仰望。唯有一步一步踏实的搭好自己的火箭,才有机会一睹芳容。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务