当前位置: 首页 > article >正文

网络程序设计入门第一章:Web、JSP、Tomcat 到底是什么?

一、前言很多同学第一次上《网络程序设计》这门课都会有一种很强的迷惑感JSP 是什么Tomcat 是什么浏览器为什么能打开我写的页面HTML、JSP、Servlet 到底什么关系这门课和“计算机网络”到底有什么联系更麻烦的是很多教材一上来就开始写代码% page contentTypetext/html;charsetUTF-8 % html body Hello World /body /html你虽然能照着敲出来但其实并不知道它为什么能运行。所以这一章不急着堆代码而是先把最核心的底层逻辑讲清楚。你只要把这一章真正搞懂后面学表单、JSP、request、session、JavaBean 才不会一直发懵。这一章的目标只有一个搞明白网络程序设计这门课到底在做什么。二、什么是网络程序设计先说最本质的一句话网络程序设计就是让不同计算机上的程序通过网络进行通信并完成数据交互和业务处理。这个定义听起来有点抽象我们换成更直白的说法。你平时打开一个网站比如学校官网、教务系统、电商平台表面上看只是“点开网页”实际上背后发生的是你的浏览器向服务器发送请求服务器接收到请求服务器处理数据服务器把结果返回给浏览器浏览器把结果渲染成你看到的网页所以这门课的重点本质上就是研究浏览器怎么发请求服务器怎么接收请求服务器怎么返回页面页面之间怎么传数据用户状态怎么保存也就是说这门课不是单纯写页面而是在学浏览器—服务器—页面—数据这一整套交互机制三、什么是 Web很多人会把“网络程序设计”和“网页制作”混为一谈其实不一样。1. Web 是什么Web 可以理解为“基于浏览器访问的信息系统”。你用浏览器访问新闻网站学校教务系统论坛登录注册页面查询成绩页面这些都属于 Web 应用。Web 的核心特点就是用户不需要安装专门客户端直接通过浏览器访问浏览器负责显示页面服务器负责处理逻辑和数据2. Web 应用和普通网页有什么区别普通静态网页只是固定内容比如一个纯 HTML 页面h1欢迎来到我的网页/h1无论谁打开看到的都一样。但 Web 应用不一样。比如登录页面张三登录后显示张三的信息李四登录后显示李四的信息这就说明页面内容是动态生成的。所以你可以这样理解HTML决定网页长什么样JSP / Servlet / Java决定网页显示什么内容Tomcat负责运行这些 Web 程序四、什么是 B/S 结构这一部分是网络程序设计最基础的架构概念。1. B/S 的含义B/S Browser / Server也就是BBrowser浏览器端SServer服务器端比如你电脑上的 Chrome、Edge就是浏览器。Tomcat 所在的机器就是服务器。浏览器不负责复杂业务处理它主要负责显示页面提交表单向服务器发送请求服务器主要负责接收请求执行业务逻辑查询数据返回响应结果2. 一个典型的 B/S 交互流程以“登录”为例第一步用户输入账号密码浏览器显示一个登录表单form actionlogin.jsp methodpost 用户名input typetext nameusername 密码input typepassword namepassword input typesubmit value登录 /form第二步浏览器提交请求用户点击“登录”浏览器把用户名和密码发给服务器。第三步服务器处理请求服务器拿到数据后判断用户名对不对密码对不对是否允许登录第四步返回结果服务器返回一个新的页面比如登录成功登录失败欢迎你张三3. B/S 和 C/S 的区别B/S 和 C/S 是经常考的概念。B/SB 浏览器用户直接用浏览器访问部署方便维护简单很适合 Web 系统C/SC Client客户端程序比如 QQ、微信桌面版、游戏客户端需要安装专门软件功能通常更强更新和维护成本更高你们这门《网络程序设计》主要学的是B/S 模式。五、浏览器和服务器到底是怎么通信的这一部分非常关键。你后面学 request、response、Cookie、Session全部都建立在这里。1. 浏览器不是“凭空打开页面”的当你在浏览器输入http://localhost:8080/test/index.jsp这不是“打开本地文件”而是在发起一个HTTP 请求。这个地址可以拆开理解http://使用 HTTP 协议localhost本机8080服务器端口号/test/index.jsp要访问的资源路径也就是说浏览器实际上是在说请把 localhost 这台机器上8080 端口里的 test 项目中的 index.jsp 页面给我。2. 服务器收到请求后做什么服务器比如 Tomcat收到请求后会判断你访问的是哪个项目你访问的是哪个页面这个页面是静态资源还是动态资源如果是 JSP就先执行 JSP 代码然后把最终生成的 HTML 返回给浏览器这句话非常重要浏览器不能直接执行 JSP浏览器只能接收服务器返回的 HTML 结果。也就是说浏览器看到的不是 JSP 源码而是 JSP 执行之后的结果。3. 请求和响应网络程序设计里有两个最核心的词Request请求Response响应请求浏览器发给服务器的数据和访问要求。比如我要访问哪个页面我提交了什么表单数据我用的是 GET 还是 POST响应服务器返回给浏览器的结果。比如一个 HTML 页面一段文本一张图片一个跳转结果后面你学request.getParameter()其实就是从浏览器发来的请求中把表单数据取出来。六、什么是 JSP终于说到 JSP 了。1. JSP 是什么JSP 全称是Java Server Pages中文一般叫Java 服务器页面你可以把 JSP 理解成HTML Java 代码也就是在普通网页里加入 Java 代码让页面内容能动态变化。比如你想让网页显示当前时间、用户名、成绩、乘法表、表格这些动态内容光靠 HTML 是不够的就需要 JSP。2. 为什么需要 JSP纯 HTML 是静态的。比如h1欢迎来到系统/h1所有人打开看到都一样。但实际系统中很多内容都需要动态生成欢迎你张三当前时间2026-03-12成绩95 分显示数据库中的学生信息根据输入的 m、n 画表格这些都不是固定写死的所以需要服务器先计算再返回页面。JSP 就是干这个的。3. JSP 的本质很多初学者以为 JSP 是一种特别神秘的新语言其实不是。JSP 本质上还是运行在服务器端的 Java 技术。它的主要作用就是接收请求嵌入 Java 代码动态生成 HTML返回给浏览器简单理解HTML 决定页面样子JSP 决定页面内容能不能动态变化七、什么是 Tomcat如果说 JSP 是你写的程序那么 Tomcat 就是运行这些程序的环境。1. Tomcat 是什么Tomcat 是一个Web 服务器 / Servlet 容器。你可以把它理解成一个“网页程序运行平台”。你写好的 JSP 页面不能像普通.txt文件一样双击就运行。它必须放到服务器里由服务器来处理。Tomcat 就负责做这件事。2. 没有 Tomcat 行不行不行至少在你们这门课的学习阶段不行。因为HTML 文件浏览器可以直接打开但 JSP 需要服务器解析执行Tomcat 就是负责解析 JSP、处理请求、返回响应的所以HTML 可以离开 Tomcat 单独看JSP 不行JSP 必须依赖服务器环境运行3. Tomcat 像什么你可以这样类比浏览器 顾客JSP 页面 菜单/订单处理逻辑Tomcat 厨房服务器返回的 HTML 做好的菜顾客不能直接进厨房炒菜。浏览器也不能直接执行 JSP。它只能向 Tomcat 发请求再由 Tomcat 处理后返回结果。八、为什么访问地址里总有 localhost:8080这也是新手高频疑问。1. localhost 是什么localhost表示本机也就是你自己的电脑。所以http://localhost:8080/意思就是访问我自己电脑上的 8080 端口服务2. 8080 是什么8080 是 Tomcat 默认常用端口之一。端口可以理解成一台计算机里不同程序“对外提供服务的窗口”。比如浏览器访问网页通常找某个端口Tomcat 默认可能是 8080MySQL 常见是 3306当你写http://localhost:8080/test/index.jsp浏览器就知道去找主机localhost端口8080资源/test/index.jsp3. 为什么有时打不开常见原因有这几个1Tomcat 没启动最常见。2端口写错了比如 Tomcat 不是 8080而你还在用 8080 访问。3项目路径写错了项目名不是test你却写了test。4JSP 文件没放对位置路径和部署目录不一致。5Tomcat 启动报错比如端口冲突、配置错误。九、第一个网络程序是怎么跑起来的这一段你一定要形成完整脑图。假设你写了一个文件% page contentTypetext/html;charsetUTF-8 % html head title第一个 JSP 页面/title /head body Hello JSP /body /html然后把它部署到 Tomcat 中浏览器访问http://localhost:8080/test/hello.jsp这个过程背后发生了什么第一步浏览器发请求浏览器告诉服务器我要访问 test 项目的 hello.jsp第二步Tomcat 接收请求Tomcat 找到对应文件发现它是 JSP不是普通 HTML。第三步Tomcat 解析 JSPTomcat 会把 JSP 中的内容处理成最终的响应结果。如果里面有 Java 代码也会一起执行。第四步返回 HTMLTomcat 把最终页面返回给浏览器。第五步浏览器显示结果浏览器把返回的内容渲染出来你就看到Hello JSP所以一定记住你写的是 JSP浏览器看到的是执行结果。十、网络程序设计这门课后面到底会学什么如果你现在还觉得这门课有点散我给你把后面的知识链串起来。第一步先学页面基础你要先会HTML 基本标签表格表单提交按钮输入框因为用户要先有页面可以操作。第二步再学 JSP 动态输出你要会% %% %for 循环if 判断因为服务器要根据不同情况生成不同页面。第三步再学 request / response你要知道表单提交的数据去哪了怎么接收用户输入怎么处理中文乱码怎么在页面之间传值第四步再学 Cookie / Session你要解决用户登录后怎么记住身份页面跳转后数据怎么保存为什么 HTTP 本身是无状态的第五步再学 JavaBean / Servlet / MVC这是提高部分也是课程从“会写小例子”到“能做小项目”的关键。你会学到如何把数据封装起来如何把页面和业务逻辑分开如何让项目结构更规范十一、初学者最容易混淆的几个概念这一部分很重要我帮你提前排雷。1. HTML 和 JSP 的区别HTML静态页面浏览器可直接打开不能直接写 Java 逻辑JSP动态页面需要服务器运行可以嵌入 Java 代码2. 浏览器和服务器的区别浏览器负责显示页面提交请求接收服务器返回结果服务器负责处理请求执行 JSP / Servlet返回响应3. 请求和响应的区别请求浏览器发给服务器响应服务器返回给浏览器4. localhost 和 Internet 网站的区别localhost表示访问你自己的电脑真实网站表示访问远程服务器本质一样只是服务器位置不同。十二、本章你必须真正记住的 8 句话这一章内容不少但真正必须牢牢记住的其实就这 8 句网络程序设计的核心是浏览器和服务器之间的数据交互。这门课主要学的是 B/S 结构不是桌面软件开发。浏览器负责发请求和显示页面服务器负责处理逻辑。Web 应用不是单纯网页而是能动态处理数据的系统。JSP 本质上是 HTML Java用来生成动态页面。浏览器不能直接执行 JSP必须由服务器先处理。Tomcat 是运行 JSP / Servlet 的服务器环境。request 是请求response 是响应后面很多知识都围绕这两个对象展开。十三、本章实战任务这一章虽然以理解为主但还是建议你做 3 个最基础的练习。练习1解释下面地址每一部分的含义http://localhost:8080/test/index.jsp你要能说清楚协议主机端口项目路径资源路径练习2说出 HTML 和 JSP 的区别至少从这几个角度回答是否动态是否需要服务器是否能写 Java 代码浏览器能否直接打开练习3用自己的话描述一次网页访问过程比如访问一个登录页面写出浏览器做了什么Tomcat 做了什么JSP 做了什么浏览器最后看到了什么十四、本章小结这一章我们没有急着堆很多语法而是先搭建了网络程序设计的完整认知框架。你现在应该已经明白这门课不是单纯写网页而是在学浏览器和服务器如何交互课程主体是 B/S 架构JSP 是用来生成动态页面的Tomcat 是 JSP 的运行环境浏览器不能直接执行 JSP只能接收服务器处理后的结果后面所有表单、request、session、Servlet本质上都是对这一套交互流程的进一步展开如果这一章你真的吃透后面学 JSP 代码时就不会只是在“背标签”而是会知道自己到底在做什么。

相关文章:

网络程序设计入门第一章:Web、JSP、Tomcat 到底是什么?

一、前言 很多同学第一次上《网络程序设计》这门课,都会有一种很强的迷惑感: JSP 是什么? Tomcat 是什么? 浏览器为什么能打开我写的页面? HTML、JSP、Servlet 到底什么关系? 这门课和“计算机网络”到…...

火箭仿真系列-蒙特卡洛仿真与敏感性分析完整使用示例

以下是蒙特卡洛仿真与敏感性分析模块的完整使用示例,涵盖从不确定性定义到结果可视化的全过程。一、完整蒙特卡洛分析示例import numpy as np import matplotlib.pyplot as plt import pandas as pd from datetime import datetime import seaborn as sns from scip…...

TongWeb7在国产操作系统上的安装与配置实战指南

1. 环境准备:为TongWeb7铺好国产化“地基” 大家好,我是老张,在中间件和国产化环境里摸爬滚打了十来年。今天咱们不聊虚的,直接上手,把TongWeb7在国产操作系统(比如咱们熟悉的麒麟)上从零开始装…...

SpringBoot与RocketMQ深度整合:多连接配置与动态Topic处理实战

1. 为什么需要多连接与动态Topic处理? 在实际的企业级项目中,我们使用消息队列的场景往往不是单一的。比如,你的订单服务可能需要向一个RocketMQ集群发送订单创建消息,同时,你的物流服务又需要从另一个独立的RocketMQ…...

威联通QNAP通过Container快速部署Tranmission及美化UI实战

1. 为什么选择在威联通上跑Transmission? 如果你和我一样,是个喜欢折腾家庭影音库、有大量下载需求的人,那么一台威联通(QNAP)NAS绝对是你的好帮手。它不仅仅是个存储数据的“大硬盘”,更是一个功能强大的…...

Windows11系统下如何将Chrome设置为默认浏览器的完整指南

1. 为什么你的Windows 11总是不听使唤?聊聊默认浏览器那点事儿 不知道你有没有遇到过这种烦心事儿:明明电脑上装的是Chrome,平时查资料、看视频都用它,可每次一点开别人发来的网页链接,或者打开电脑里存的HTML文件&…...

小白也能用:Qwen3本地字幕生成工具部署指南,纯离线保护隐私

小白也能用:Qwen3本地字幕生成工具部署指南,纯离线保护隐私 1. 为什么你需要一个本地字幕工具? 想象一下这个场景:你刚录完一段产品介绍视频,或者整理完一场重要的会议录音。接下来,你需要为这段音频配上…...

伏羲天气预报国产软件栈:全栈国产化(OpenEuler+MindSpore)适配

伏羲天气预报国产软件栈:全栈国产化(OpenEulerMindSpore)适配 1. 项目背景与价值 伏羲天气预报系统(FuXi)是复旦大学研发的15天全球天气预报级联机器学习系统,基于国际权威期刊《npj Climate and Atmosph…...

【临床数据挖掘黄金法则】:20年三甲医院R语言实战总结的7个避坑指南

第一章:临床数据挖掘的医学逻辑与R语言适配性 临床数据挖掘并非简单套用统计模型,而是以循证医学为内核、以临床决策路径为骨架的数据推理过程。从疾病自然史建模、风险分层到治疗响应预测,每一步都需尊重医学因果链——例如,时间…...

Qt状态机实战:5分钟搞定UI状态切换(附完整代码)

Qt状态机实战:5分钟搞定UI状态切换(附完整代码) 如果你在Qt开发中遇到过这样的场景:一个按钮点击后,界面上的多个控件需要同步改变样式、文本、甚至禁用状态;或者一个复杂的表单需要根据用户输入动态切换不…...

程序员必备:用GitHub免费搭建永久图床,VScode写Markdown再也不愁插图了

程序员专属图床方案:用GitHub与VScode打造无缝写作体验 作为一名长期与Markdown打交道的程序员,我深知写作流程中那些看似微小却极其恼人的痛点。其中最典型的,莫过于图片管理。无论是写技术博客、项目文档,还是个人笔记&#xf…...

深入解析nn.TransformerEncoder:从原理到PyTorch实战

1. 从“注意力”说起:为什么Transformer是革命性的? 如果你接触过自然语言处理,或者看过一些AI新闻,肯定听过“Transformer”这个词。它现在几乎是所有大语言模型(比如我们熟悉的那些聊天机器人)的基石。但…...

【Cesium打造动态地球】从零构建3D地球可视化与交互式坐标转换系统

1. 从零开始:为什么选择Cesium来构建你的3D地球? 如果你对在网页上展示一个可以自由旋转、缩放,还能叠加各种数据的3D地球感兴趣,那么Cesium几乎是你绕不开的选择。我刚开始接触Web 3D可视化的时候,也试过其他一些库&a…...

Volcano 进阶实战:网络拓扑与负载感知调度的深度协同

1. 从单打独斗到并肩作战:为什么我们需要协同调度? 大家好,我是老张,在AI基础设施这块摸爬滚打了十来年,亲眼看着集群规模从几十台服务器膨胀到成千上万台。早期做模型训练,调度器只管一件事:把…...

【UE5】多用户协同编辑实战:从配置到实时协作

1. 环境准备与插件启用:迈出协同第一步 想和团队小伙伴一起在虚幻引擎5(UE5)里“搭积木”吗?就像在线文档可以多人同时编辑一样,UE5的多用户协同编辑功能(Multi-User Editing)让美术、策划、程…...

Orange Pi Zero 2拓展板:宽压供电、散热增强与USB多接口扩展设计

1. 项目概述 Orange Pi Zero 2 是一款基于 Rockchip RK3566 四核 Cortex-A55 架构 SoC 的紧凑型单板计算机,主频最高达 1.8GHz,集成 Mali-G52 GPU 与 4K 视频编解码能力,板载 1GB/2GB LPDDR4 内存及 eMMC 接口。其核心板尺寸仅为 48mm 46mm&…...

408计组存储系统大题实战:TLB与Cache的相爱相杀(2018真题44题解析)

408计组存储系统大题实战:TLB与Cache的相爱相杀(2018真题44题解析) 备考408,尤其是计算机组成原理,很多同学一看到存储系统就头疼。虚拟内存、TLB、Cache,这些概念单独理解已经不易,更别提它们在…...

让ai帮你决策,基于快马平台分析jdk版本选型并生成新特性示例代码

最近在规划一个新的微服务项目,技术栈选型时,在Java 11和Java 17这两个长期支持版本之间犯了难。这让我想起以前的做法:打开搜索引擎,在各个技术博客、官方文档和社区讨论之间反复横跳,对比特性、评估兼容性、权衡利弊…...

MCP Inspector 连接失败:深入解析 ‘Connection Error, is your MCP server running?‘ 的五大常见原因及应对策略

1. 服务器未启动:最基础却最易被忽略的“空城计” “Connection Error, is your MCP server running?” 这行报错,字面意思直白得不能再直白了:“你的MCP服务器在运行吗?” 我刚开始接触MCP Inspector时,看到这个错误…...

SmallThinker-3B-Preview模型安全性与内容过滤配置指南

SmallThinker-3B-Preview模型安全性与内容过滤配置指南 最近在帮几个朋友的公司部署内部AI助手,他们最关心的不是模型有多聪明,而是“它会不会乱说话”。这确实是个大问题,尤其是在开放给员工或客户使用的场景里。一个不小心,模型…...

Faiss 实战指南:从基础索引到高级应用

1. 初识Faiss:向量搜索的“超级引擎” 如果你正在处理海量的图片、文本或者音频数据,并且想快速找到其中相似的内容,那么你很可能已经遇到了“向量相似性搜索”这个难题。简单来说,就是把一段内容(比如一张猫的图片&am…...

Hi3861单芯片Wi-Fi智能开关设计与量产实践

1. 项目概述本项目实现了一款基于华为海思Hi3861芯片的Wi-Fi智能开关系统,面向物联网边缘控制场景,支持本地物理按键操作与远程HTTP指令控制双重交互模式。系统采用轻量级鸿蒙(OpenHarmony LiteOS-M内核)作为软件平台,…...

地理空间可视化崩溃频发,R 4.5中rgdal弃用后5步无缝迁移至sf+wk+geoarrow(含完整迁移检查清单)

第一章:地理空间可视化崩溃频发的根源诊断与R 4.5兼容性挑战地理空间可视化在R生态中长期依赖sf、sp、rgdal和mapview等核心包,但自R 4.5发布以来,多起不可恢复的段错误(segmentation fault)和GDAL驱动初始化失败案例集…...

拇指大小的射频功率计设计与宽量程实现原理

1. 项目概述对讲机射频功率计是一款面向业余无线电、应急通信及现场工程调试场景设计的便携式射频功率测量工具。其核心价值在于将传统实验室级功率测量能力压缩至拇指大小的物理封装内,实现从手台、车台到小型基站发射端口的快速、原位功率验证。该设备并非通用频谱…...

基于N32G430的USB供电参数监测终端设计

1. 项目概述本项目是一款基于国民技术N32G430C8L7微控制器的USB供电参数监测终端,集成了高精度电压/电流采集、实时功率计算与本地可视化显示功能。系统采用单板一体化设计,核心为N32G430C8L7——一款内置硬件乘除法器、支持多路高精度ADC与灵活时钟管理…...

快马平台AI助力:一分钟生成CentOS7的LNMP环境自动化部署脚本原型

最近在做一个Web项目的原型验证,需要快速搭建一个LNMP环境来测试一些功能。传统方式从安装系统到配置服务,步骤繁琐,耗时很长。这次我尝试用InsCode(快马)平台的AI能力,直接生成一个CentOS7下的自动化部署脚本,整个过程…...

DeepSeek-R1-Distill-Qwen-7B在新闻摘要生成中的实践

DeepSeek-R1-Distill-Qwen-7B在新闻摘要生成中的实践 1. 新闻摘要生成的痛点与解决方案 每天面对海量的新闻资讯,内容编辑和读者都面临同样的困境:信息过载、时间有限、关键信息难以快速捕捉。传统的人工摘要方式效率低下,一个编辑每小时可…...

老码农和你一起学AI系列:RNN循环神经网络

RNN(Recurrent Neural Network,循环神经网络)最好的方式,是把它和我之前聊过的N-grams以及Transformer放在一起,看成语言模型进化史上的关键中间环节。如果说N-grams是个“记忆力只有7秒的金鱼”(只看局部&…...

进站必看——关于博客内容的规划

你好,我的朋友,欢迎来到我的博客!我写博客的目的是通过博客的写作来沉淀我的技术,但聪明的朋友已经发现我的博客存在着一些问题:第一:博客内容杂乱。一会计网,一会C语言,一会就是一些…...

Kotlin泛型实战:从基础到高阶

Kotlin 泛型基础泛型允许在定义类、接口或函数时使用类型参数&#xff0c;从而提高代码的复用性和类型安全性。Kotlin 的泛型语法与 Java 类似&#xff0c;但提供了更灵活的特性。class Box<T>(val value: T)fun main() {val intBox Box(1) // 类型推断为 Box<…...