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

别再死记硬背了!用Tomcat 10 + IDEA手把手带你理解Servlet和JSP到底怎么工作

别再死记硬背了用Tomcat 10 IDEA手把手带你理解Servlet和JSP到底怎么工作刚接触JavaWeb开发时很多人会被Servlet和JSP的各种概念搞得晕头转向。生命周期、九大内置对象、MVC模式...这些教科书式的术语堆砌往往让人越看越迷糊。今天我们就换一种方式——打开IDEA启动Tomcat用可视化调试的方式带你亲眼看看一个HTTP请求是如何被处理的。1. 环境准备搭建可调试的实验室工欲善其事必先利其器。我们先准备好以下工具IntelliJ IDEA Ultimate 2023社区版也可用但功能略少Tomcat 10.1.x注意与JDK版本的兼容性JDK 17LTS版本推荐使用1.1 创建Web项目在IDEA中新建项目时选择New Project → Jakarta EE → Web Application勾选Create web.xml选项虽然Servlet 5.0支持注解配置但保留它有助于理解传统配置方式。项目创建完成后检查目录结构src ├── main │ ├── java # Servlet源代码 │ ├── resources # 配置文件 │ └── webapp # 前端资源 │ ├── WEB-INF │ │ └── web.xml │ └── index.jsp1.2 配置Tomcat服务器打开Run/Debug Configurations添加Tomcat Server → Local在Deployment标签页添加项目war包关键步骤勾选Show dialog when application stops这样当我们在调试时暂停程序浏览器请求会被挂起方便观察中间状态提示建议修改Tomcat的conf/logging.properties文件将日志级别调整为FINE可以看到更详细的处理流程。2. 解剖Servlet从请求到响应的完整旅程让我们创建一个最简单的Servlet来观察生命周期WebServlet(/demo) public class LifeCycleServlet extends HttpServlet { Override public void init() { System.out.println(【Init】Servlet被容器初始化); } Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) { System.out.println(【Service】处理GET请求); resp.getWriter().println(h1Hello from Servlet/h1); } Override public void destroy() { System.out.println(【Destroy】Servlet即将被销毁); } }2.1 调试观察点设置在IDEA中设置以下断点init()方法第一行doGet()方法第一行resp.getWriter().println()这一行启动调试模式访问http://localhost:8080/demo你会看到首次访问时Tomcat会先调用init()然后执行doGet()后续访问直接进入doGet()服务器关闭时触发destroy()注意在web.xml中配置load-on-startup1/load-on-startup可以改变初始化时机。3. JSP的魔法面具揭开编译背后的真相很多人以为JSP就是HTML里写Java其实它会被Tomcat转换成Servlet。让我们验证这一点创建time.jsp% page contentTypetext/html;charsetUTF-8 % html head title时间展示/title /head body 当前时间% new java.util.Date() % /body /html3.1 查看编译结果访问该页面后打开Tomcat的work/Catalina/localhost目录找到对应项目目录下的org/apache/jsp子目录你会看到生成的time_jsp.java文件关键代码片段public void _jspService(HttpServletRequest request, HttpServletResponse response) { // 自动生成的页面上下文和输出流 PageContext pageContext _jspxFactory.getPageContext(this, request, response, null, true, 8192, true); JspWriter out pageContext.getOut(); // 我们的JSP内容被转换成了Java代码 out.write(html...); out.print(new java.util.Date()); out.write(/body/html); }3.2 九大内置对象的真相在生成的Servlet中可以看到这些对象其实都是_jspService方法的局部变量final javax.servlet.jsp.PageContext pageContext; javax.servlet.http.HttpSession session null; final javax.servlet.ServletContext application; final javax.servlet.ServletConfig config; javax.servlet.jsp.JspWriter out null; final java.lang.Object page this; // ...4. 全流程跟踪一个请求的奇幻漂流现在我们把所有环节串联起来用调试模式完整跟踪一个请求浏览器发起请求访问http://localhost:8080/greet?nameAliceTomcat接收请求在org.apache.catalina.core.ApplicationFilterChain的doFilter方法设断点Servlet处理阶段观察HttpServletRequest对象如何解析参数转向JSP在Servlet中使用request.getRequestDispatcher(result.jsp).forward(req, resp)JSP渲染查看_jspService方法如何组合最终HTML4.1 关键对象状态记录表阶段关键对象重要状态变化请求到达HttpServletRequestmethodGET, queryStringnameAliceServlet处理HttpServletResponsecontentType未设置buffer为空JSP渲染PageContext初始化out、session等内置对象响应返回HttpServletResponsecontentTypetext/html, buffer已填充5. 实战技巧常见问题排查指南5.1 为什么我的Servlet没响应检查清单WebServlet注解路径或web.xml配置是否正确项目是否成功部署到Tomcat的webapps目录控制台是否有ClassNotFoundException5.2 JSP显示源码而不是执行可能原因Tomcat的JSP引擎未正确配置文件没有放在webapp目录下文件扩展名不是.jsp5.3 调试时看不到变量值解决方案确保使用Debug模式启动Tomcat检查IDEA的Build → Rebuild Project在断点处右键选择Make Default确保所有线程暂停6. 进阶探索自定义JSP标签实战理解了原理后我们可以尝试更高级的应用。创建一个显示当前时间的自定义标签定义标签处理器public class NowTag extends SimpleTagSupport { Override public void doTag() throws JspException { getJspContext().getOut().print(new Date()); } }在WEB-INF/tags下创建mytag.tag% tag body-contentempty % % attribute nameformat requiredfalse typejava.lang.String % jsp:invoke fragmenttimeFragment/在JSP中使用% taglib prefixmy tagdir/WEB-INF/tags % my:now formatyyyy-MM-dd/通过这个案例你会发现JSP标签本质上也是被转换成了Servlet代码只不过封装了更复杂的逻辑。

相关文章:

别再死记硬背了!用Tomcat 10 + IDEA手把手带你理解Servlet和JSP到底怎么工作

别再死记硬背了!用Tomcat 10 IDEA手把手带你理解Servlet和JSP到底怎么工作 刚接触JavaWeb开发时,很多人会被Servlet和JSP的各种概念搞得晕头转向。生命周期、九大内置对象、MVC模式...这些教科书式的术语堆砌,往往让人越看越迷糊。今天我们就…...

OpenClaw 龙虾 = 效率倍增器 + 数字员工孵化器+附安装教程

作为一个每天和电脑打交道 12 小时的 IT 从业者,我用过不下 50 款 AI 工具,但能让我坚持用了 3 个月、每天都离不开的,只有OpenClaw 龙虾。很多人还把它当成普通的聊天机器人,这真的大错特错。OpenClaw 龙虾不是未来科技&#xff…...

Blue-Topaz主题快速上手:打造个性化Obsidian笔记环境

Blue-Topaz主题快速上手:打造个性化Obsidian笔记环境 【免费下载链接】Blue-Topaz_Obsidian-css A blue theme for Obsidian. 项目地址: https://gitcode.com/gh_mirrors/bl/Blue-Topaz_Obsidian-css Blue-Topaz是一款为Obsidian设计的蓝色主题,…...

Python AI服务上线倒计时:Cuvil预编译缓存机制如何帮你抢在竞品前24小时完成vLLM兼容升级?

第一章:Cuvil编译器在Python AI推理中的定位与价值Cuvil编译器是一个面向AI推理场景的轻量级、Python原生友好的编译框架,专为优化动态图模型(如PyTorch TorchScript子集、ONNX子图及自定义算子图)在CPU/GPU边缘设备上的执行效率而…...

OpenClaw如何做好记忆持久化的 · 六、经济学与可扩展性——记忆的代价

六、经济学与可扩展性——记忆的代价⏱ 30 秒速览 | 中度使用(日均 50 次对话)纯记忆附加成本:~$5/月(Claude Sonnet)/ ~$1/月(GPT-4o-mini)。72% 花在记忆注入,24% 花在自动提取&am…...

3分钟搞懂增量式PID:为什么你的温控系统更适合用这个?

增量式PID:工业温控系统抗干扰的隐秘武器 车间里的温度控制系统突然开始剧烈震荡,显示屏上的曲线像心电图一样疯狂跳动——这种场景对PLC工程师来说再熟悉不过了。当传统的位置式PID在噪声干扰下"失控"时,增量式PID往往能成为稳定系…...

选择AutoCAD许可管理工具的七大关键评估维度

智能选择AutoCAD许可管理工具的七大关键维度你正在为AutoCAD许可证管理找工具,这是个门槛高的活,就是不光是没门路我帮你梳理出七大关键评估维度,帮你少踩坑,多省钱。许可方式匹配是否够精细?AutoCAD的许可机制越细化&…...

给硬件小白的保姆级教程:手把手搞定RK3399 Linux-SDK的MIPI屏幕驱动配置

从零点亮RK3399的MIPI屏幕:一份没有硬件基础也能上手的实战指南 当你第一次拿到RK3399开发板和那块神秘的MIPI屏幕时,可能会被各种专业术语吓到——DTS配置、初始化序列、GPIO引脚、背光控制...这些概念对于软件背景的开发者来说,简直就像天书…...

汽车变速箱企业Kisssoft许可证成本控制成功案例

汽车变速箱企业Kisssoft许可证成本控制成功案例讲真,用Kisssoft做仿真设计,许可证成本真是吃掉不少预算,是一大推企业并尚未真正掌握咋用好这伙许可证一出来,弄得浪费严重,合规风险也高。咱就在2026年帮助一家汽车变速…...

柔性车间动态重调度实战:机器故障下的遗传算法优化策略

1. 柔性车间调度与机器故障的实战挑战 想象一下你正在管理一个汽车零部件生产车间,突然一台关键数控机床在下午3点15分突发故障,维修需要4小时。此时有10个不同型号的曲轴正在排队等待加工,每道工序都有多个备选设备但加工效率各不相同。这就…...

5步构建家庭网络广告拦截系统:从规则部署到性能优化

5步构建家庭网络广告拦截系统:从规则部署到性能优化 【免费下载链接】AdGuardHomeRules 高达百万级规则!由我原创&整理的 AdGuardHomeRules ADH广告拦截过滤规则!打造全网最强最全规则集 项目地址: https://gitcode.com/gh_mirrors/ad/…...

深入解析Qt平台插件xcb连接失败问题及高效解决方案

1. 为什么你的Qt程序突然罢工了? 最近在远程服务器上调试Qt程序时,你是不是也遇到过这个让人抓狂的错误提示?"qt.qpa.xcb: could not connect to display"这个报错就像一堵墙,把我们的开发工作拦在了半路。作为一个在Li…...

永磁同步电机转速PI控制与SMC滑模控制及ADRC自抗扰控制的Simulink仿真对比:矢量控...

永磁同步电机转速PI控制,SMC滑模控制,ADRC自抗扰控制Simulink对比仿真模型 1.永磁同步电机SVPWM控制算法,实现FOC矢量控制,DQ轴解耦控制~ 2.转速电流双闭环控制,电流环采用PI控制,转速环分别采用…...

再次革新 .NET 的构建和发布方式(一)蚕

本文能帮你解决什么? 1. 搞懂FastAPI异步(async/await)到底在什么场景下能真正提升性能。 2. 掌握在FastAPI中正确使用多线程处理CPU密集型任务的方法。 3. 避开常见的坑(比如阻塞操作、数据库连接池耗尽、GIL限制)。 …...

5步打造梦幻桌面:TranslucentTB任务栏美化完全指南

5步打造梦幻桌面:TranslucentTB任务栏美化完全指南 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB Windows个性化已成为现代桌…...

从经验到智能:TVA时代企业质检员的角色转型

随着工业4.0的推进,汽车零部件生产逐渐向智能化、自动化转型,智能体视觉检测系统(TVA)的广泛应用,彻底改变了传统焊接点检测的模式,也对质检员的角色与能力提出了新的要求。传统模式下,质检员的…...

医疗卫生机构数据安全和个人信息保护管理办法(试行)

...

笑不活了!学生自研反外挂系统,结果反手把自己“误封”了|从翻车到封神全过程

笑不活了!学生自研反外挂系统,结果反手把自己“误封”了|从翻车到封神全过程 文章目录笑不活了!学生自研反外挂系统,结果反手把自己“误封”了|从翻车到封神全过程事情起因:我想写个反外挂&…...

告别“伪快充”:实测2026年五款最快移动电源,消费者需警惕哪些坑?

面对“告别充电焦虑”的营销话术,消费者最该关注的是“实测”与“兼容”。2026年这五款移动电源虽标榜高功率,但实际体验取决于三点:第一,协议匹配。若你的手机不支持该电源的私有快充协议(如某品牌200W仅适配自家旗舰…...

上海文化墙设计:让空间成为品牌价值的视觉表达

在企业品牌建设中,视觉空间的设计与呈现正在成为传递企业价值观、增强员工认同感和提升品牌形象的关键载体。特别是在上海这样的商业中心,企业文化墙的设计需求日益增长,如何在有限的空间内实现品牌故事的立体化表达,成为许多企业…...

NISSHINBO日清纺 NJW4104U2-05A-TE1 SOT-89-5 线性稳压器(LDO)

特性通过AEC-Q100 1级认证(仅T1规格)低静态电流:典型值5.5μA(A版本),典型值5.0μA(B版本)工作电压4.0V至40V工作温度Ta -40C至125C输出电压精度:V0 1.0%(T…...

魔兽争霸III运行卡顿、画面变形?WarcraftHelper开源工具助你解决经典游戏兼容难题

魔兽争霸III运行卡顿、画面变形?WarcraftHelper开源工具助你解决经典游戏兼容难题 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 经典游戏…...

SMART200与FANUC机器人Profinet通讯:除了组态,这些调试‘玄学’问题你遇到过吗?

SMART200与FANUC机器人Profinet通讯实战:那些手册上没写的调试技巧 第一次在项目现场看到FANUC机器人手臂突然停止动作,而SMART200 PLC的指示灯还在正常闪烁时,我就知道遇到了传说中的"通讯玄学"问题。这种场景对于自动化工程师来说…...

GLM-. 全面支持与 Gemini CLI 集成:HagiCode 的多模型进化之路闲

1. 流图:数据的河流 如果把传统的堆叠面积图想象成一块块整齐堆叠的积木,那么流图就像一条蜿蜒流淌的河流,河道的宽窄变化自然流畅,波峰波谷过渡平滑。 它特别适合展示多个类别数据随时间的变化趋势,尤其是当你想强调…...

Redis持久化:从AOF到RDB,如何实现数据不丢失?聊

Qt是一个跨平台C图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本笔记将重点介绍QSpinBox数值微调组件的常用方法及灵活应用。…...

C#串口通讯实战:从基础配置到高效数据交互

1. 串口通讯基础与C#实现原理 第一次接触串口通讯时,我盯着那堆参数完全摸不着头脑。后来在工业现场调试传感器时才发现,这东西就像两个人打电话——波特率是语速,数据位是词汇量,停止位就是通话结束时的"再见"。C#中的…...

计算机毕业设计:Python全国气象数据采集与可视化平台 Flask框架 可视化 数据分析 机器学习 天气 深度学习 AI 空气质量分析(建议收藏)✅

博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ > 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与…...

嘎嘎降AI怎么用?新手从注册到拿到低于15%的完整操作步骤

嘎嘎降AI的使用很简单,从注册到拿到检测结果,整个流程20分钟内可以完成。这篇是给没用过的新手写的,把每一步都说清楚。 网址:www.aigcleaner.com 第一步:注册账号 打开 www.aigcleaner.com,点击右上角“…...

Windows HEIC缩略图终极指南:免费解决iPhone照片预览问题

Windows HEIC缩略图终极指南:免费解决iPhone照片预览问题 【免费下载链接】windows-heic-thumbnails Enable Windows Explorer to display thumbnails for HEIC/HEIF files 项目地址: https://gitcode.com/gh_mirrors/wi/windows-heic-thumbnails 你是否曾将…...

基于 LocalClaw 的多 Agent 协作体系实战

基于 LocalClaw 的多 Agent 协作体系实战 ⏱️ 阅读时间:10分钟 | 🏷️ 标签:LocalClaw / 多Agent / AI协作 / 工作流自动化 前言:为什么需要多 Agent 协作? 当我们一个人管理多个平台的内容运营时,往往会…...