云计算百科
云计算领域专业知识百科平台

全栈学习 ——JavaWeb(二)Web 服务器

目录

一、计算机网络基础:Web 通信的底层支撑

1. TCP/IP 协议栈:网络通信的 “通用语言”

2. HTTP 协议:Web 服务器与浏览器的 “对话规则”

(1)HTTP 请求格式

(2)HTTP 响应格式

3. Web 服务器的定位:应用层的 “请求处理器”

二、Web 服务器核心:从概念到功能

1. 什么是 Web 服务器?

2. JavaWeb 服务器的三大核心功能

三、底层原理:Web 服务器如何工作?

1. Tomcat 核心架构:连接器与容器

2. HTTP 请求处理的完整流程(以登录请求为例)

(1)建立 TCP 连接(传输层)

(2)解析 HTTP 请求(应用层)

(3)匹配并调用 Servlet(业务处理)

(4)生成并返回响应

3. Servlet 生命周期管理:容器的 “资源调度”

四、表单提交的完整处理流程

1. 前端表单准备(login.html)

2. 表单提交到响应的底层步骤

(1)浏览器处理(客户端)

(2)Tomcat 处理(服务器端)

3. 常见问题及解决

五、主流 Web 服务器介绍

1. 轻量级 Web 服务器(开发与中小应用)

(1)Tomcat

(2)Jetty

2. 企业级 Web 服务器(大型应用)

(1)WebLogic(Oracle)

(2)WebSphere(IBM)

(3)WildFly(原 JBoss)

六、实战:Tomcat 安装与表单应用部署

1. Tomcat 安装与配置(Windows)

2. 表单应用部署实战

(1)创建应用目录

(2)编写前端表单(login.html)

(3)编写并编译 Servlet

(4)测试流程

七、总结:从网络基础到 Web 服务器


在 JavaWeb 开发中,Web 服务器是连接用户与应用的核心枢纽。但它的运作离不开计算机网络的底层支撑 —— 从用户在浏览器输入网址到页面显示,背后是 TCP/IP 协议栈、HTTP 协议与 Web 服务器的协同工作。本文将从计算机网络基础讲起,详解 Web 服务器的核心功能、原理及实战操作,并重点分析表单提交的完整流程。

一、计算机网络基础:Web 通信的底层支撑

Web 服务器的核心作用是 “处理网络请求”,而网络请求的传输依赖于成熟的协议体系。理解这些基础,才能真正看懂 Web 服务器的工作原理。

1. TCP/IP 协议栈:网络通信的 “通用语言”

计算机之间的通信需要遵循统一规则,TCP/IP 协议栈就是这套规则的集合,它分为 4 层(从底层到应用层):

  • 数据链路层:处理物理设备(如网卡)的信号传输,负责将数据转换成电信号或光信号;
  • 网络层:通过 IP 地址定位目标计算机(如192.168.1.1),并选择传输路径(路由);
  • 传输层:提供可靠传输(TCP 协议)或快速传输(UDP 协议)。Web 通信主要用TCP—— 它通过 “三次握手” 建立连接、“四次挥手” 断开连接,确保数据不丢失、不重复;
  • 应用层:定义具体应用的通信规则(如 HTTP 协议用于 Web,FTP 协议用于文件传输)。

                                                                             转换-定位-传输-通信

可以用 “快递运输” 比喻:

  • IP 地址 = 收件人地址(确定目标计算机);
  • TCP 协议 = 快递员(负责把包裹完整送到,丢件会重发);
  • HTTP 协议 = 包裹里的 “发货单”(规定内容格式,让收件人能看懂)。

2. HTTP 协议:Web 服务器与浏览器的 “对话规则”

HTTP(超文本传输协议)是应用层协议,定义了浏览器与 Web 服务器的通信格式。核心特点:

  • 请求 – 响应模式:浏览器发送 “请求”,服务器返回 “响应”,一次交互后连接关闭(HTTP/1.1 支持长连接优化);
  • 无状态:服务器不记录用户历史(如第一次和第二次请求无关联,需用 Cookie/Session 保持状态)。
(1)HTTP 请求格式

一个完整的 HTTP 请求由三部分组成:

请求行:POST /myapp/login HTTP/1.1 (方法 + 路径 + 版本)

请求头:Host: localhost:8080 (目标主机)

      Content-Type: application/x-www-form-urlencoded (数据类型)

      Content-Length: 27 (数据长度)

     (空行用于分隔请求头和请求体)

请求体:username=admin&password=123 (表单数据,POST方式才有)

(2)HTTP 响应格式

服务器的响应对应分为三部分:

响应行:HTTP/1.1 200 OK (版本 + 状态码 + 描述)

响应头:Content-Type: text/html;charset=UTF-8 (返回数据类型)

       

       Content-Length: 20 (响应体长度)

               

       空行隔响应头和响应体)

响应体:<h1>登录成功</h1> (实际显示的内容)

3. Web 服务器的定位:应用层的 “请求处理器”

Web 服务器工作在应用层,基于 TCP/IP 和 HTTP 协议实现两个核心功能:

  • 监听 TCP 端口(如 Tomcat 默认 8080),接收浏览器的 HTTP 请求;
  • 按 HTTP 规范解析请求、生成响应,协调后端资源(如 Servlet、静态文件)处理请求。

二、Web 服务器核心:从概念到功能

1. 什么是 Web 服务器?

Web 服务器是能通过 HTTP 协议与客户端(浏览器)通信的软件。它分为两类:

  • 静态 Web 服务器:仅处理静态资源(如 HTML、CSS、图片),如 Nginx、Apache;
  • JavaWeb 容器:除静态资源外,还能运行 Java 组件(Servlet/JSP),如 Tomcat、WebLogic—— 这是 JavaWeb 开发的核心,后续简称 “Web 服务器”。

比喻理解:静态服务器像 “便利店”(只卖现成商品),JavaWeb 容器像 “餐厅”(既能卖现成食品,也能按订单现做)。

2. JavaWeb 服务器的三大核心功能

  • 运行 Java 组件:管理 Servlet/JSP 的生命周期(创建、调用、销毁),这是与静态服务器的核心区别;
  • 解析 HTTP 协议:将浏览器发送的原始字节流解析为HttpServletRequest对象(封装请求数据),并将 Servlet 的处理结果封装为 HTTP 响应(HttpServletResponse);
  • 部署 Web 应用:提供标准化目录结构,统一管理应用的资源(如 HTML 放在根目录,Java 类放在WEB-INF/classes)。

三、底层原理:Web 服务器如何工作?

以 Tomcat 为例,其核心架构和请求处理流程是理解所有 JavaWeb 服务器的基础。

1. Tomcat 核心架构:连接器与容器

Tomcat 的架构像 “前台接待 + 后台厨房”,两大模块协同工作:

  • 连接器(Connector):前台接待员
    • 负责监听 TCP 端口(默认 8080),接收浏览器的连接;
    • 将 TCP 字节流解析为 HTTP 请求(提取 URL、参数等);
    • 将容器返回的结果封装为 HTTP 响应,通过 TCP 发送给浏览器。
  • 容器(Container):后台厨房
    • 管理 Web 应用(如myapp)和 Servlet;
    • 根据请求路径找到对应的 Servlet,调用其方法处理业务;
    • 提供HttpServletRequest和HttpServletResponse对象,作为 Servlet 与容器的交互接口。

协作流程:

浏览器 → TCP连接 → 连接器(解析HTTP请求) → 容器(调用Servlet) → 连接器(封装HTTP响应) → 浏览器

2. HTTP 请求处理的完整流程(以登录请求为例)

当用户访问http://localhost:8080/myapp/login并提交表单时,Tomcat 的处理步骤如下:

(1)建立 TCP 连接(传输层)
  • 浏览器通过 DNS 解析localhost为127.0.0.1,向该 IP 的 8080 端口发起 TCP 连接;
  • Tomcat 的连接器(Coyote)接收连接,通过 TCP 三次握手建立可靠传输通道。
(2)解析 HTTP 请求(应用层)

连接器读取请求数据,按 HTTP 格式解析:

  • 从请求行提取 POST/myapp/login HTTP/1.1,确定请求方法(POST)和目标路径;
  • 从请求头获取Content-Type: application/x-www-form-urlencoded,知道请求体是表单数据;
  • 按Content-Length读取请求体username=admin&password=123,解析为键值对。
(3)匹配并调用 Servlet(业务处理)

定位应用:容器根据/myapp找到部署的 Web 应用(webapps/myapp目录);

匹配 Servlet:根据/login找到通过@WebServlet("/login")配置的 LoginServlet;

调用方法:

    • 容器创建HttpServletRequest(封装解析后的参数)和HttpServletResponse(用于写响应);
    • 调用 LoginServlet 的service()方法,根据请求方法(POST)自动转发到doPost();
    • Servlet 通过request.getParameter("username")获取参数,执行登录验证。
(4)生成并返回响应
  • Servlet 处理完成后,将结果(如 “登录成功”)写入HttpServletResponse;
  • 容器通知连接器 “处理完成”,连接器封装响应(响应行200 OK、响应体<h1>登录成功</h1>);
  • 通过 TCP 连接发送响应,完成后按 HTTP/1.1 规则保持连接(或四次挥手断开)

3. Servlet 生命周期管理:容器的 “资源调度”

Servlet 的生命周期完全由容器控制,遵循 “按需创建、复用实例” 原则:

  • 初始化(init ()):第一次请求 Servlet 时,容器通过反射创建实例,调用init()(如加载配置),仅执行一次;
  • 服务(service ()):每次请求都调用service(),根据请求方法转发到doGet()/doPost();
  • 销毁(destroy ()):服务器关闭时,调用destroy()释放资源(如关闭数据库连接),然后销毁实例。

注意:Servlet 是单例多线程—— 一个实例处理所有请求,需避免使用成员变量(可能引发线程安全问题)。

四、表单提交的完整处理流程

表单是用户与 Web 应用交互的主要方式,从提交到响应的每一步都体现了 Web 服务器的工作原理。

1. 前端表单准备(login.html)

<form action="/myapp/login" method="post">

<input type="text" name="username" placeholder="用户名">

<input type="password" name="password" placeholder="密码">

<button type="submit">登录</button>

</form>

  • action:提交路径(/myapp是应用名,/login是 Servlet 路径);
  • method:post(参数在请求体,安全),get(参数在 URL,适合查询)。

2. 表单提交到响应的底层步骤

(1)浏览器处理(客户端)

用户点击 “提交” 后,浏览器自动完成:

验证表单(如必填项),拼接参数(username=admin&password=123);

按method生成 HTTP 请求:

    • POST:参数放入请求体,请求头Content-Type: application/x-www-form-urlencoded;
    • GET:参数拼接在 URL(/myapp/login?username=admin&password=123),无请求体

 通过 DNS 解析localhost为127.0.0.1,向 8080 端口发起 TCP 连接,发送 HTTP 请求。

(2)Tomcat 处理(服务器端)

连接器解析请求:

    • 读取请求数据,解析出应用名(myapp)、Servlet 路径(/login)、参数(username=admin);
    • 将参数存储到HttpServletRequest的内部 Map(键值对结构)。

@WebServlet("/login")

public class LoginServlet extends HttpServlet {

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {

// 设置编码(解决中文乱码)

req.setCharacterEncoding("UTF-8");

resp.setContentType("text/html;charset=UTF-8");

// 从请求中获取参数(容器已解析并存入request)

String username = req.getParameter("username");

String password = req.getParameter("password");

// 业务逻辑(模拟数据库验证)

String result = "admin".equals(username) && "123".equals(password)

? "登录成功!欢迎您," + username

: "登录失败:用户名或密码错误";

// 写入响应(容器后续会封装为HTTP响应)

resp.getWriter().write("<h1>" + result + "</h1>");

}

}

浏览器渲染响应:

    • 接收响应后,按Content-Type: text/html识别为 HTML,解析并显示<h1>登录成功</h1>;
    • 若响应是302 Redirect,则自动跳转到指定页面(如登录成功后跳转到首页)。

3. 常见问题及解决

  • 中文乱码:POST 请求需在doPost()中设置req.setCharacterEncoding("UTF-8"),响应需resp.setContentType("text/html;charset=UTF-8");
  • 404 错误:检查action路径是否正确(如/myapp/login是否对应@WebServlet("/login"));
  • 500 错误:Servlet 代码异常(如空指针),查看 Tomcat 的logs/catalina.out日志。

五、主流 Web 服务器介绍

根据应用规模和需求,JavaWeb 服务器分为轻量级和企业级两类。

1. 轻量级 Web 服务器(开发与中小应用)

(1)Tomcat
  • 特点:开源免费,支持 Servlet/JSP 规范,是 JavaWeb 开发的 “事实标准”;
  • 优势:
    • 内置在 Spring Boot,无需单独部署
    • 文档丰富,社区活跃(问题易解决);
    • 支持热部署(开发时修改代码无需重启)。
  • 适用场景:开发环境、企业官网、管理系统等中小应用。
(2)Jetty
  • 特点:比 Tomcat 更轻量,启动速度快(约 Tomcat 的 1/3),支持嵌入式部署;
  • 优势:架构灵活(可按需裁剪模块),适合微服务(如 Spring Cloud);
  • 适用场景:频繁启动的场景(如单元测试)、资源受限的微服务。

2. 企业级 Web 服务器(大型应用)

(1)WebLogic(Oracle)
  • 特点:闭源收费,支持完整 JavaEE 规范(如 EJB、JMS);
  • 企业级功能:集群部署、负载均衡、分布式事务、安全管理;
  • 适用场景:银行核心系统、电信业务平台(需厂商技术支持)。
(2)WebSphere(IBM)
  • 特点:与 IBM 生态(DB2、AIX)深度集成,提供全链路监控;
  • 优势:高可用(99.999% uptime)、支持海量并发;
  • 适用场景:金融、政府等对稳定性要求极高的核心系统。
(3)WildFly(原 JBoss)
  • 特点:开源免费,支持 JavaEE 规范,可扩展企业级功能;
  • 优势:比 WebLogic 轻量,适合预算有限的中型企业;
  • 适用场景:需要集群和事务管理,但无需商业支持的应用。

六、实战:Tomcat 安装与表单应用部署

1. Tomcat 安装与配置(Windows)

下载:从Tomcat 官网下载 9.x 版本(适配 Java 8+);

安装:解压到D:\\tomcat-9.0.80(路径无中文 / 空格);mac其实 差不多

核心目录:

    • bin/:startup.bat(启动)、shutdown.bat(停止);
    • webapps/:应用部署目录(放入应用即可访问);
    • conf/server.xml:配置端口(默认 8080)、虚拟主机等;
    • logs/:日志文件(catalina.out排查启动错误)。

启动验证:双击bin/startup.bat,访问http://localhost:8080,显示 Tomcat 欢迎页即成功。

2. 表单应用部署实战

(1)创建应用目录

webapps/myapp/ # 应用根目录

├─ login.html # 登录表单

└─ WEB-INF/

├─ classes/ # 存放编译后的Servlet

│ └─ LoginServlet.class

└─ lib/ # 依赖jar包(如JSTL)

(2)编写前端表单(login.html)

<!DOCTYPE html>

<html>

<body>

<form action="/myapp/login" method="post">

<label>用户名:</label>

<input type="text" name="username" required>

<br>

<label>密码:</label>

<input type="password" name="password" required>

<br>

<button type="submit">登录</button>

</form>

</body>

</html>

(3)编写并编译 Servlet

LoginServlet.java:

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

@WebServlet("/login") // 注解配置访问路径

public class LoginServlet extends HttpServlet {

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {

req.setCharacterEncoding("UTF-8");

resp.setContentType("text/html;charset=UTF-8");

String username = req.getParameter("username");

String password = req.getParameter("password");

String result = "admin".equals(username) && "123".equals(password)

? "登录成功!<a href='/myapp/login.html'>返回</a>"

: "登录失败!<a href='/myapp/login.html'>重试</a>";

resp.getWriter().write("<h1>" + result + "</h1>");

}

// 处理GET请求(直接访问/login时显示表单)

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {

resp.sendRedirect("/myapp/login.html");

}

}

编译命令(需指定 Tomcat 的 servlet-api.jar):

javac -cp D:\\tomcat-9.0.80\\lib\\servlet-api.jar LoginServlet.java

将LoginServlet.class放入myapp/WEB-INF/classes。

(4)测试流程

启动 Tomcat,访问http://localhost:8080/myapp/login.html;

输入admin和123,提交后显示 “登录成功”;

输入错误信息,显示 “登录失败”,流程验证通过。

七、总结:从网络基础到 Web 服务器

Web 服务器的核心价值是 “连接网络请求与 Java 应用”—— 它基于 TCP/IP 协议接收请求,通过 HTTP 协议解析数据,调用 Servlet 处理业务,最终生成响应。理解这一流程需要把握三个层次:

  • 网络层:TCP 保证数据可靠传输,IP 定位目标;
  • 应用层:HTTP 定义请求 / 响应格式,Web 服务器负责解析和封装;
  • 应用层之上:容器管理 Servlet 生命周期,实现动态资源处理。

表单提交流程是这一体系的典型实践 —— 从浏览器生成请求到服务器返回响应,每一步都依赖网络协议和服务器的协作。掌握这些知识,不仅能解决部署和调试问题,更能为后续学习分布式应用(如多服务器负载均衡)打下基础。


赞(0)
未经允许不得转载:网硕互联帮助中心 » 全栈学习 ——JavaWeb(二)Web 服务器
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!