JSP EL表达式基本使用

今天我们来说EL表达式
这在整个jsp中都是非常重要的一章

因为 如果我们用 <%=属性%>
属性为空时 直接就是个 null 这个肯定是不能让用户看到的东西
所以 我们就需要EL表达式

例如 我们jsp代码编写如下

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%request.setCharacterEncoding("UTF-8");%>
<!DOCTYPE html>
<html>
<head><title>JSP - Hello World</title>
</head>
<body>
<%=request.getAttribute("userName")%>、
</body>
</html>

这里 因为我们并没有设置过userName 所以肯定是没有值的 那么 他的默认值就是 null
页面效果如下
在这里插入图片描述
实际开发中 也会存在很多变量没值的情况,那你不可能让用户看这个null啊 用户又不知道是什么情况

这边 我们可以将写法改成

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%request.setCharacterEncoding("UTF-8");%>
<!DOCTYPE html>
<html>
<head><title>JSP - Hello World</title>
</head>
<body>
${userName}
</body>
</html>

${内容} 这就是一个标准的EL表达式
而且方便在 我们只需要写个名字 他就会自己去作用域找 不需要我们再什么什么get的了
然后 EL表达式的默认值是空字符串 而不是null
我们运行界面 看到效果
在这里插入图片描述
刚才的null就没了

为了证明没问题 我们这里定义一下

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%request.setCharacterEncoding("UTF-8");%>
<!DOCTYPE html>
<html>
<head><title>JSP - Hello World</title>
</head>
<body>
<%request.setAttribute("userName","你好");
%>
${userName}
</body>
</html>

我们在java代码中定义了request作用域中的 userName 的值为你好 然后下面用EL表达式输出
运行结果如下
在这里插入图片描述
非常的完美

然后 这边需要注意 EL会自己去域对象中 拿取对应名字的变量 但是 他一般操作的都是域对象中的东西 他是操作不了局部变量的
还可以操作字面量 但比较少用 主要还是域对象
域对象 我们之前 JSP 四大域对象
中也讲过了

那么 这里就有个问题了 如果四个域对象设置同一个变量 它用谁的?
我们代码写成这样

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%request.setCharacterEncoding("UTF-8");%>
<!DOCTYPE html>
<html>
<head><title>JSP - Hello World</title>
</head>
<body>
<%//设置page作用域pageContext.setAttribute("name","zhangsan");//设置request作用域request.setAttribute("name","lisi");//设置session作用域session.setAttribute("name","wangwu");//设置application作用域application.setAttribute("name","zhoaliu");
%>
${name}
</body>
</html>

我们运行之后看界面
在这里插入图片描述
他采用了 page作用域的
那么 我们这里 可以总结为 EL 是从小到大去找 顺序就是 page request session application
取到了 他就不会去找其他作用域了

然后还有一个点就是 EL 不操作局部变量 我们可以这样写

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%request.setCharacterEncoding("UTF-8");%>
<!DOCTYPE html>
<html>
<head><title>JSP - Hello World</title>
</head>
<body>
<%String name = "你好";
%>
${name}
</body>
</html>

运行之后 也会发现 EL是没能输出我们在局部定义的这个name的
在这里插入图片描述
但是 很多人就会想 那EL 是不是表示我们就不能在不同作用域设置同名变量了呢?
当然不是 EL是方便jsp开发的 他不会限制你
我们可以将代码改成这样

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%request.setCharacterEncoding("UTF-8");%>
<!DOCTYPE html>
<html>
<head><title>JSP - Hello World</title>
</head>
<body>
<%//设置page作用域pageContext.setAttribute("name","zhangsan");//设置request作用域request.setAttribute("name","lisi");//设置session作用域session.setAttribute("name","wangwu");//设置application作用域application.setAttribute("name","zhoaliu");
%>
<p>${pageScope.name}</p>
<p>${requestScope.name}</p>
<p>${sessionScope.name}</p>
<p>${applicationScope.name}</p>
</body>
</html>

作用域后跟Scope
告诉它去哪个作用域取
运行结果如下
在这里插入图片描述
但这里还是建议大家不要取同样的名字 毕竟 搞不好自己都弄混了 别人看也不好维护

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/206931.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

专访|OpenTiny 开源社区 常浩:完成比完美更重要

前言 2023年已过大半&#xff0c;备受关注的 OpenTiny*开源之夏活动也顺利结项。开源之夏由中国科学院软件研究所发起的计划&#xff0c;目的在于鼓励在校学生积极参与开源软件的开发维护&#xff0c;推动优秀开源软件社区的繁荣发展。该活动联合各大开源社区&#xff0c;聚焦…

python实现调和反距离空间插值法AIDW

1 简介 AIDW 主要是针对 IDW 的缺点进行了改进&#xff0c;考虑了样本点与预测点的位置&#xff0c;即方向和距离&#xff0c;具体见下图&#xff1a; 2 改进 IDW 公式&#xff1a; 从IDW算法可看出&#xff0c;插值点的估算值仅与插值样本距插值点的远近相关&#xff0c;并未…

99. 恢复二叉搜索树

99. 恢复二叉搜索树 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;参考代码&#xff1a;错误经验吸取 原题链接&#xff1a; 99. 恢复二叉搜索树 https://leetcode.cn/problems/recover-binary-search-tree/description/ 完成情况&#xff1a; 解题思路&a…

接口自动化测试实战经验分享,测试用例也能自动生成

作为测试&#xff0c;你可能会对以下场景感到似曾相识&#xff1a;开发改好的 BUG 反复横跳&#xff1b;版本兼容逻辑多&#xff0c;修复一个 BUG 触发了更多 BUG&#xff1b;上线时系统监控毫无异常&#xff0c;过段时间用户投诉某个页面无数据&#xff1b;改动祖传代码时如履…

HCIA-Datacom跟官方路线学习

通过两次更换策略。最后找到最终的学习方案&#xff0c;华为ICT官网有对这个路线的学习&#xff0c;hcia基础有这个学习路线&#xff0c;hcip也有目录路线。所以&#xff0c;最后制定学习路线&#xff0c;是根据这个认证的路线进行学习了&#xff1a; 官网课程&#xff1a;课程…

rsync配置和守护进程实践

目录 一、rsync概念 1.rsync简介 2.rsync特点 3、增量和全局传输 二、Rsync工作方式 1.准备好rsync备份服务器 2.本地的数据传输模式 3.远程的数据传输模式 4.rsync数据推拉模式 三、实践 1.准备三台虚拟机 2.都安装rsync服务 3.拉取远程文件 3.推送文件 4.rsyn…

机器学习实战第1天:鸢尾花分类任务

专栏介绍 欢迎订阅专栏——机器学习实战 机器学习实战_Nowl的博客-CSDN博客 纸上得来终觉浅 本专栏项目将着重于解决各类实际机器学习问题&#xff0c;带你上手各种场景的实际问题 数据集可以在我的资源中找到&#xff0c;也可以自行搜索 文中导入数据集的路径要改成自己的…

Vue2系列 — 渲染函数 (render + createElement)

官网文档&#xff1a;https://v2.cn.vuejs.org/v2/guide/render-function.html 1 render 函数 render 函数 不使用模板&#xff0c;使用 js 生成虚拟 dom 2 createElement() 接受的参数&#xff1a; 参数1 节点类型参数2 attribute参数3 子节点 3 DEMO <template>&…

采用connector-c++ 8.0操作数据库

1.下载最新的Connector https://dev.mysql.com/downloads/connector/cpp/&#xff0c;下载带debug的库。 解压缩到本地&#xff0c;本次使用的是带debug模式的connector库&#xff1a; 注&#xff1a;其中mysqlcppconn与mysqlcppconn8的区别是&#xff1a; 2.在cmakelist…

并发编程:共享模型之管程

目录 管程 临界区 竞态条件 案例 通过synchronized阻塞解决 synchronized添加位置 设计模式之保护性暂停 Join原理 修改线程状态的几种方法 单向改变不可返回的状态 双向可改变的状态 多把锁 线程活跃性 死锁 定位死锁 活锁 饥饿 ReentrantLock 可重入 可打…

安卓隐私指示器学习笔记

最近了解到Google 在Android12上新增了权限指示器&#xff0c;可以在信号栏的右侧显示当前访问录音机和Camera的应用&#xff0c;点击后可以跳转到相应应用的权限界面&#xff0c;消费者可以控制权限的开启和关闭。国内手机厂商最近几年都在增加隐私看板供能&#xff0c;消费者…

【endnote】如何将参考文献放到想放的位置

1. 方式 直接将生成的文献全选拖到想放的位置 注意&#xff1a;不要使用ctrlx这种操作。 2.具体操作 2.1 新建测试文档 如下图&#xff1a; 2.2 引用两篇文献】 如下图&#xff1a; 2.3 测试 如下图&#xff0c;选中所有已经引用的文献。 拖拽到想要防止的位置。 新…