《Java 100 天进阶之路》第69篇:JSP与EL表达式(2026版)
第69篇JSP与EL表达式2026版系列导航《Java 100 天进阶之路》完整目录 |⬅️ 上一篇第68篇JavaWeb核心技术之Servlet |➡️ 下一篇第70篇Cookie与Session待发布️ 本文阅读地图3 分钟速览第68篇搞定了Servlet本篇深入JSP与EL表达式。JSP曾是Java Web的“视图层王者”虽然现在新项目多用模板引擎但理解JSP仍是理解Java Web演进的关键模块核心问题一句话回答JSP本质JSP到底是什么JSP本质就是Servlet——第一次访问时被翻译成Servlet源码并编译生命周期JSP从生到死经历什么翻译→编译→加载→实例化→初始化→服务→销毁九大内置对象JSP中可以直接用哪些对象request、response、out、session、application、pageContext、config、page、exceptionEL表达式怎么简化JSP取值${表达式}替代% %自动从四大作用域取值四大作用域数据存在哪里page request session applicationJSTLJSP中怎么做循环和判断用c:forEach和c:if替代Java脚本JSP现状2026年还用JSP吗新项目少用但维护老系统必备技能面试最爱问高频考点有哪些见文末 小节一、核心知识点1. JSP是什么JSPJavaServer Pages是一种动态网页技术允许在HTML中嵌入Java代码由服务器端执行后生成动态内容返回给客户端。本质JSP本质就是Servlet。JSP页面在第一次被请求时由Web容器如Tomcat翻译成Servlet源码.java再编译成字节码.class最终执行并响应HTTP请求。2. JSP vs Servlet 核心定位对比ServletJSP角色控制器Controller——处理业务逻辑视图View——展示数据代码形式Java类输出HTML需要拼接字符串HTML Java更直观适合场景请求处理、业务逻辑页面展示、数据渲染MVC角色ControllerView核心理解Servlet负责“接活、干活”JSP负责“展示结果”。两者配合构成Java Web的MVC模式。3. 2026年JSP现状新项目Spring Boot Thymeleaf/Vue/React已很少使用JSP。但大量遗留系统ERP、CRM、政府系统仍在使用JSP掌握JSP是维护老系统的必备技能。二、通俗讲解1分钟开心学把JSP想象成“带填空的HTML模板”静态HTML一张印好的菜单内容固定不能改变。JSP一张带填空格的菜单模板。服务员服务器根据顾客请求的不同在空格里填上不同的内容动态数据再打印出来给顾客看。JSP本质就是Servlet你写了一个hello.jsp里面混着HTML和Java代码。第一次有人访问时Tomcat偷偷把hello.jsp翻译成一个hello_jsp.javaServlet源码。然后编译成hello_jsp.classServlet字节码。以后每次访问直接执行这个Servlet不再重新翻译编译。核心理解JSP是“写起来像HTML跑起来是Servlet”的混合体。三、JSP生命周期JSP的生命周期遵循“翻译→编译→初始化→服务→销毁”五个阶段。关键点翻译和编译只在第一次访问时执行后续请求直接执行已编译的Servlet。所以第一次访问JSP页面会稍慢后续速度与Servlet相同。四、JSP三大指令JSP指令用于设置页面属性、引入标签库等格式为% 指令名 属性值 %。1. page指令设置页面属性% page contentTypetext/html;charsetUTF-8 languagejava % % page importjava.util.*, java.text.* % % page errorPage/error.jsp % !-- 指定错误页面 -- % page isErrorPagetrue % !-- 当前页面为错误页面 -- % page sessiontrue % !-- 是否启用Session --2. include指令静态包含其他文件% include file/header.jsp % !-- 页面编译时合并 --注意include是静态包含编译时合并jsp:include是动态包含运行时包含更灵活。3. taglib指令引入标签库% taglib prefixc urijakarta.tags.core %五、JSP九大内置对象JSP在翻译成Servlet时容器会自动创建9个内置对象开发者可以直接使用无需显式声明。5.1 九大内置对象速查表对象名类型作用使用频率requestHttpServletRequest获取请求参数、请求头、请求属性⭐⭐⭐⭐⭐responseHttpServletResponse设置响应内容、状态码⭐⭐⭐outJspWriter输出内容到页面⭐⭐⭐⭐sessionHttpSession存储用户会话数据⭐⭐⭐⭐⭐applicationServletContext存储全局应用数据⭐⭐⭐pageContextPageContext操作所有域对象获取其他内置对象⭐⭐⭐⭐configServletConfig获取Servlet配置参数⭐pageObject当前Servlet实例当前JSP页面对象相当于this⭐exceptionThrowable获取异常信息仅错误页面⭐5.2 四大作用域与对应内置对象作用域对象生命周期使用场景pagepageContext当前页面页面内临时数据requestrequest一次请求请求间传递数据sessionsession一次会话用户登录状态、购物车applicationapplication整个应用全局配置、统计数据作用域查找顺序page → request → session → application从小到大。5.3 pageContext详解pageContext是九大内置对象中功能最强的对象它可以获取JSP页面中的其他所有内置对象% // 通过pageContext获取其他内置对象 HttpServletRequest req (HttpServletRequest) pageContext.getRequest(); HttpServletResponse resp (HttpServletResponse) pageContext.getResponse(); HttpSession ses pageContext.getSession(); ServletContext app pageContext.getServletContext(); JspWriter out2 pageContext.getOut(); // 操作四个域对象 pageContext.setAttribute(pageData, 页面数据, PageContext.PAGE_SCOPE); pageContext.setAttribute(requestData, 请求数据, PageContext.REQUEST_SCOPE); pageContext.setAttribute(sessionData, 会话数据, PageContext.SESSION_SCOPE); pageContext.setAttribute(appData, 应用数据, PageContext.APPLICATION_SCOPE); %六、EL表达式6.1 什么是ELELExpression Language表达式语言是JSP 2.0引入的一种简化页面代码的语言。它允许开发者使用简单的语法访问JavaBean属性、集合元素、请求参数等无需编写Java脚本% %。基本语法${表达式}!-- 传统JSP脚本不推荐 -- % request.getAttribute(userName) % !-- EL表达式推荐 -- ${userName}6.2 四大作用域取值EL表达式自动按page → request → session → application顺序查找属性!-- 自动按作用域查找 -- ${userName} !-- 指定作用域查找 -- ${pageScope.userName} ${requestScope.userName} ${sessionScope.userName} ${applicationScope.userName}6.3 EL支持的数据类型基本类型、字符串JavaBean属性自动调用getter数组元素${arr[0]}List/Set元素${list[0]}Map元素${map.key}或${map[key]}集合遍历配合JSTL6.4 EL中的运算符运算符示例说明算术${1 2}加、减、乘、除、取余比较${age 18}、、、、、!逻辑${empty list}、三元${score 60 ? 及格 : 不及格}条件 ? 真值 : 假值empty${empty userList}判断是否为null或空集合6.5 EL的11个隐式对象隐式对象类型说明pageScopeMappage作用域属性requestScopeMaprequest作用域属性sessionScopeMapsession作用域属性applicationScopeMapapplication作用域属性paramMap请求参数单个值paramValuesMap请求参数多个值headerMap请求头单个值headerValuesMap请求头多个值cookieMapCookie对象initParamMap上下文初始化参数pageContextPageContextJSP的pageContext对象使用示例${param.username} !-- 获取请求参数 -- ${header[User-Agent]} !-- 获取请求头 -- ${cookie.JSESSIONID.value} !-- 获取Cookie -- ${pageContext.request.contextPath} !-- 获取应用上下文路径 --七、JSTL标准标签库7.1 什么是JSTLJSTLJSP Standard Tag Library是JSP标准标签库用于替换和简化JSP页面上的Java代码。它提供了一组标准标签使JSP页面更加简洁、可读、易于维护。引入方式% taglib prefixc urijakarta.tags.core %7.2 核心标签库标签作用示例c:set设置变量c:set varname value张三/c:remove删除变量c:remove varname/c:out输出变量c:out value${name}/c:if条件判断c:if test${age 18}成年/c:ifc:choose多条件分支c:when/c:otherwisec:forEach循环遍历遍历集合、数组c:forTokens字符串分割遍历按分隔符拆分c:url构造URL自动添加Session IDc:import导入外部资源包含其他页面内容c:redirect重定向跳转到其他页面使用示例!-- 条件判断 -- c:if test${user ! null} p欢迎${user.name}/p /c:if !-- 多条件分支 -- c:choose c:when test${score 90}优秀/c:when c:when test${score 60}及格/c:when c:otherwise不及格/c:otherwise /c:choose !-- 循环遍历 -- c:forEach items${userList} varuser varStatusstatus tr td${status.index 1}/td td${user.name}/td td${user.age}/td /tr /c:forEach八、避坑要点错误/误区后果正确做法在JSP中写大量Java脚本% %代码难以维护MVC混乱用EL JSTL替代忘记设置页面编码中文乱码% page contentTypetext/html;charsetUTF-8%混淆四大作用域数据生命周期失控明确page/request/session/application的适用场景误用${}和% %语法错误或安全风险EL${}是JSP 2.0推荐方式EL表达式不输出预期值作用域顺序不对检查数据是否在正确的作用域中忽略isELIgnored属性EL表达式被当作文本设置% page isELIgnoredfalse %新项目用JSP技术栈落后新项目推荐Thymeleaf或前后端分离九、面试高频考点Q1JSP的本质是什么JSP本质就是Servlet。JSP页面第一次被访问时由Web容器翻译成Servlet源码.java再编译成字节码.class后续请求直接执行编译后的Servlet。Q2JSP的九大内置对象有哪些request、response、out、session、application、pageContext、config、page、exception。其中exception只能在错误页面isErrorPagetrue中使用。Q3JSP的四大作用域是什么page当前页面、request一次请求、session一次会话、application整个应用作用范围依次扩大。EL表达式按此顺序自动查找属性。Q4EL表达式和JSP脚本表达式% %的区别EL表达式${}是声明式的自动处理null值语法简洁JSP脚本表达式% %是命令式的需要写Java代码null值会报错。EL是JSP 2.0推荐的取值方式。Q5JSTL的作用是什么JSTL用于替代JSP中的Java脚本代码提供条件判断c:if、c:choose、循环遍历c:forEach、变量操作c:set等标签使JSP页面更加简洁、可读、易于维护。 面试官追问陷阱加分题追问1“JSP第一次访问为什么慢后续为什么快” 第一次访问时JSP需要经历**翻译.jsp → .java和编译.java → .class**两个步骤耗时较长。后续访问直接执行已编译的Servlet速度与普通Servlet相同。追问2“JSP和Servlet在MVC中分别扮演什么角色” Servlet作为控制器Controller负责接收请求、处理业务逻辑、转发到JSPJSP作为视图View负责展示数据。这种分离提高了代码的可维护性和可扩展性。十、练习题简答题JSP的本质是什么为什么第一次访问JSP比后续访问慢代码题使用EL表达式和JSTL的c:forEach遍历一个ListUser并在表格中展示。分析题在JSP中${userName}和% request.getAttribute(userName) %有什么区别哪个更好为什么 你的学习进度当前第69篇 / 共108篇 ·进阶篇JavaWeb核心技术第68~72篇✅ 已完成基础篇44篇 第45~69篇 正在学第69篇⏳ 待学习第70~108篇 完整目录 学习指南 | 订阅本专栏不错过每一篇 下一篇文章预告下一篇《第70篇Cookie与Session》内容简介Cookie与Session的原理、区别、分布式Session方案Spring Session、登录状态管理实战。JavaWeb专题持续深入拿下会话管理《Java 100 天进阶之路 | 从入门到上岗就业》每天一篇建议收藏 关注一起100天拿offer 点击关注我更新后第一时间收到推送

相关新闻

智能CLI工具Grok Build:用自然语言自动化日常任务的技术实践

智能CLI工具Grok Build:用自然语言自动化日常任务的技术实践

这次我们来看一个名为Grok Build的项目。从名称和网络热度来看,它似乎是一个与命令行界面(CLI)紧密相关,并旨在处理电脑日常任务的工具。结合“Grok”一词在技术领域常有的“深入理解”之意,以及“Build”所代表的构建…

2026/8/4 10:26:57 阅读更多 →
【AI自媒体变现黄金法则】:20年实战总结的7个零门槛赚钱路径,第5个90%的人还没试过

【AI自媒体变现黄金法则】:20年实战总结的7个零门槛赚钱路径,第5个90%的人还没试过

更多请点击: https://codechina.net 第一章:AI做自媒体赚钱 人工智能正深刻重塑内容创作与流量变现的底层逻辑。借助大模型、自动化工具和智能分发平台,普通人无需专业剪辑或写作功底,也能规模化生产高传播性内容,并通…

2026/8/4 10:26:57 阅读更多 →
无标题技术项目的系统化开发与管理方法论

无标题技术项目的系统化开发与管理方法论

1. 项目概述作为一名从业多年的技术博主,我经常遇到一个有趣的现象:许多最有价值的项目往往最初连标题都没有。这种"无标题"状态反而可能蕴含着最纯粹的创意和技术探索。今天我想分享的就是关于如何处理这类"无标题"项目的系统方法论…

2026/8/4 10:25:57 阅读更多 →

最新新闻

Notion从入门到精通:构建个人知识库与项目管理系统的实战指南

Notion从入门到精通:构建个人知识库与项目管理系统的实战指南

最近在整理个人项目和知识库时,发现很多零散的资料、代码片段和灵感笔记散落在各个角落——电脑桌面、手机备忘录、微信收藏夹,甚至还有纸质便签。这种信息孤岛的状态,不仅查找效率低下,也阻碍了知识的有效沉淀和复用。为了解决这…

2026/8/4 11:16:17 阅读更多 →
Windows热键冲突终结者:Hotkey Detective让你三分钟定位占用程序

Windows热键冲突终结者:Hotkey Detective让你三分钟定位占用程序

Windows热键冲突终结者:Hotkey Detective让你三分钟定位占用程序 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective …

2026/8/4 11:16:17 阅读更多 →
Unity毛发模拟实战:Fluffy Grooming Tool GPU驱动方案解析与应用

Unity毛发模拟实战:Fluffy Grooming Tool GPU驱动方案解析与应用

1. 项目概述:为什么我们需要一个专门的毛发梳理工具? 在Unity项目中处理毛发,尤其是追求写实效果的动物毛皮或角色短发,一直是个让开发者头疼的“老大难”问题。传统的解决方案,比如用大量细长的Alpha贴图面片&#xf…

2026/8/4 11:16:17 阅读更多 →
京东自动化脚本终极指南:5分钟打造你的智能京豆管家

京东自动化脚本终极指南:5分钟打造你的智能京豆管家

京东自动化脚本终极指南:5分钟打造你的智能京豆管家 【免费下载链接】jd_scripts-lxk0301 长期活动,自用为主 | 低调使用,请勿到处宣传 | 备份lxk0301的源码仓库 项目地址: https://gitcode.com/gh_mirrors/jd/jd_scripts-lxk0301 还在…

2026/8/4 11:16:17 阅读更多 →
生成式AI商业化落地:技术架构与行业实践

生成式AI商业化落地:技术架构与行业实践

1. 生成式AI的商业化浪潮:从技术奇点到产业标配 三年前当GPT-3首次展示续写小说能力时,多数人还将其视为实验室里的科技玩具。如今走进任何一家科技公司的产品会议,讨论"如何集成LLM"已成为标配议程。生成式AI正在经历从技术演示到…

2026/8/4 11:16:17 阅读更多 →
AI应用开发新范式:Pokee平台如何将Agent工作流从想法变为服务

AI应用开发新范式:Pokee平台如何将Agent工作流从想法变为服务

如果你最近在关注 AI 领域,可能会感觉信息过载:新模型、新工具、新框架层出不穷,每周都有“重磅发布”。但真正值得开发者投入时间学习的,往往不是那些最炫酷的,而是那些能切实改变工作流、解决具体工程痛点的。本周&a…

2026/8/4 11:15:17 阅读更多 →

日新闻

AI Agent白手起家26: 使用标准事件驱动大模型实践

AI Agent白手起家26: 使用标准事件驱动大模型实践

纲要 练习目标:掌握大模型标准事件的调用回顾 LangChain 中的核心标准事件 invokestreambatchastream_eventswith_structured_output 环境准备实战代码:多种事件调用对比 同步调用与流式输出批量处理异步事件流监听结构化输出 运行说明与预期结果总结与扩…

2026/8/4 0:00:40 阅读更多 →
dealsea是什么?跨境卖家必知的美国deal站入门指南

dealsea是什么?跨境卖家必知的美国deal站入门指南

说实话,第一次听说美国这个老牌折扣网站的跨境卖家,十个有八个会问同一个问题:这个平台到底是干嘛的?我见过一个做家居出口的朋友,他在亚马逊上月销二十万美金,却从来没用过它。我给他看了首页——一屏一屏…

2026/8/4 0:01:40 阅读更多 →
清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

通讯作者:邓兵、刘建国通讯单位:清华大学DOI:https://doi.org/10.1021/acs.est.6c00603研究背景稀土元素(REEs)是清洁能源技术与电子器件不可或缺的核心原料,然而传统提取方式依赖能耗高、排放大的采矿与强…

2026/8/4 0:01:40 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/3 4:58:13 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/3 1:53:31 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/4 5:26:40 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/3 13:07:03 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/4 11:09:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/3 8:27:36 阅读更多 →