【JSP】EL表达式

news2024/11/28 7:48:54

EL表达式

  • EL表达式干什么用的?
  • EL表达式的使用
    • 面试题
    • 如何输出对象属性值?
    • 域中取数据注意事项
    • EL表达式的空处理
    • 如何从Map集合中取数据
    • 如何从数组或者List集合中获取数据
    • 局部忽略EL表达式
    • EL表达式的内置对象
    • EL表达式的运算符

EL表达式干什么用的?

  • Expression Language(表达式语言缩写)
  • EL表达式可以代替JSP中的Java代码,让JSP文件中的程序看起来更加的整洁,美观。
  • JSP中夹杂着各种Java代码,例如<%
    java代码%>、<%=%>等,导致JSP文件混乱,不好维护,不美观。所以才有了后期的EL表达式。
  • EL表达式可以算是JSP语法中的一部分,EL表达式属于JSP
  • EL表达式出现在JSP中主要是:
  • 从某个作用域中取数据,然后将其转换成字符串,然后将其输出到浏览器,这就是EL表达式的功效,三大功效:
  • 第一功效:从某个域中取数据
    四个域:pageContext,request,session,application
  • 第二功效:将取出的数据转换成字符串
    如果是Java对象,也会自动调用toString方法自动转换成字符串
  • 将字符串输出到浏览器
    <%=%>一样,将其输出到浏览器

EL表达式的基本语法格式:

${表达式}

EL表达式的使用

<%
	//创建User对象
	User user = new User();
	user.setUsername("jack");
	user.setPassword("123");
	user.setAge(19);
	
	// 将user对象存储在请求域中
	// 数据必须存储到某四大范围之一的。
	request.setAttribute("user",user);
%>
// ${这里写的是存储到域对象当中的name,而且没有引号,如果有引号就是个普通字符串}
${user}等同于<%=request.getAttribute("user")%>

面试题

${abc} 和 ${"abc"}的区别是什么?
${abc}表示从某个域中取出数据,并且被取出的这个数据的name是"abc",之前有一定有这样的代码:域.setAttribute("abc",对象);
${“abc"}表示直接将”abc“当作普通字符串输出到浏览器,不会从某个域中去取出数据了。

${user} 底层是怎么做的呢?

从域中取出对象,然后调用user对象的toString方法,
转换成字符串,输出到浏览器。

如何输出对象属性值?

	使用下面语法前提是,User对象中有getUsername()方法
	${user.username}
	EL表达式中的这个语法,实际上调用了底层的getXXX()方法
	注意:如果没有对应的get方法,则出现异常,报500错误。

域中取数据注意事项

在没有指定范围的情况下,EL表达式优先从小范围中读取数据:
pageContext<request<session<application

在EL表达式中可以指定范围来读取数据,EL表达式有四个隐式的范围对象:
pageScoperequestScopesessionScopeapplicationScope

<%@page contentType="text/html;charset=UTF-8"%>
<%@page import="javawen.jsp.bean.User"%>

<%
   // 四个域都存储了数据,并且name相同
    pageContext.setAttribute("data","pageContext");
    request.setAttribute("data","request");
    session.setAttribute("data","session");
    application.setAttribute("data","application");
%>

${data}

<hr>

${sessionScope.data}
<br>
${pageScope.data}
<br>
${requestScope.data}
<br>
${applicationScope.data}

浏览器输出效果:
在这里插入图片描述

EL表达式的空处理

EL表达式对null进行了预处理,如果是null则对浏览器输出一个空字符串。

<%@page contentType="text/html;charset=UTF-8" %>

<%
    request.setAttribute("username","xmq");
%>

<%--取出数据输出到浏览器上--%>
<%=request.getAttribute("username")%>

采用EL表达式:${username}

<br>

<%=request.getAttribute("u")%>

<br>

<%--EL表达式主要任务是页面展示,从这方面是友好的--%>
<%--EL表达式对null进行了处理,如果是null则在浏览器上显示空白--%>
采用EL表达式:${u}

<hr>
<%--EL表达式表面是这种写法,实际上还是翻译成Java代码执行--%>
${username} 这个EL表达式等同于这行代码; <%=request.getAttribute("username")==null?"":request.getAttribute("username")%>

输出结果:
在这里插入图片描述

如何从Map集合中取数据

${Map_name.key}

例子:

<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="javawen.jsp.bean.User" %>
<%@page contentType="text/html;charset=UTF-8" %>

<%
    Map<String,String> map = new HashMap<>();
    map.put("username","zhangsan");
    map.put("password","123");
    //将map集合存到请求域中
    request.setAttribute("usermap",map);

    Map<String, User> userMap2 = new HashMap<>();
    User user = new User();
    user.setUsername("zhangsan");
    userMap2.put("user",user);
    request.setAttribute("user",userMap2);
%>

${usermap.username}
<br>
${usermap.password}
<br>
${user.user.username}

展示效果:
在这里插入图片描述

如何从数组或者List集合中获取数据

${数组名[0]}
${list[0]}
<%@ page import="javawen.jsp.bean.User" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Set" %>
<%@ page import="java.util.HashSet" %>
<%@page contentType="text/html;charset=UTF-8" %>

<%
  String[] userNames = {"zhangsan","xmq","shabi"};

  request.setAttribute("usernames",userNames);

  User user1 = new User();
  user1.setUsername("xzd");

  User user2 = new User();
  user2.setUsername("agewdgtaew");

  User[] users = {user1,user2};
  request.setAttribute("users",users);

  List<String> list = new ArrayList<>();
  list.add("dasg");
  list.add("ghfda");
  request.setAttribute("list",list);

  Set<String> set = new HashSet<>();
  set.add("gad");
  set.add("qwerhyg");
  request.setAttribute("set",set);
%>

${usernames}
<br>
${usernames[0]}
<hr>
${users[1].username}
<hr>
${list[1]}
<hr>
${set}

效果:
在这里插入图片描述

局部忽略EL表达式

可以在$前面加一个\

<%@page contentType="text/html;charset=UTF-8"%>
<%--这是忽略本页面的所有EL表达式,不常用--%>
<%--<%@page contentType="text/html;charset=UTF-8" isElIgnored="true" %>--%>

<%
  request.setAttribute("fasdf","ggaegaweg");
%>

${fasdf}
<hr>
<%--这是局部忽略EL表达式--%>
\${fasdf}

效果:
在这里插入图片描述

EL表达式的内置对象

EL表达式内置对象有十一个(注意是EL表达式的内置对象,别和JSP九大内置对象混在一起),下面列举几个常用的:

pageContext //对应JSP中的pageContext对象
pageScope  // 代表page域中用于保存属性的Map对象
requestScope //  代表request域中用于保存属性的Map对象
sessionScope //  代表session域中用于保存属性的Map对象
applicationScope  //  代表application域中用于保存属性的Map对象
param // 表示保存了所有请求参数的Map对象
paramValues //表示一个保存了所有请求参数的Map对象,它对于某个请求参数,返回的是一个string[]
initParam // 表示一个保存了所有web应用初始化参数的map对象

其他的内置对象:

header
headerValues
cookie

pageContext的一些方法:

在这里插入图片描述
EL表达式通过pageContext内置对象可以获取到jsp中的内置对象,除了out外,其他七大内置对象都可以获取到(因为EL表达式本身就会浮现在浏览器上,所以就没必要获取out内置对象了)

  1. 通过EL表达式获取应用的根:
  • ${pageContext.request.contextPath}等同于<%=pageContext.getRequest().getContextPath()%>
  1. param保存的是Map对象,所以我们提取就可以${param.key)就可以了
  • ${param.key}相当于<%=request.getParameter("key")%>

这获取的是请求参数key对应values的第一个。

  1. paramValues保存的也是Map对象,对应的value类型是String[]数组
  • ${paramValues.habbits[0]}就相当于<%=request.getParameterValuses("habbits")[0]%>
  1. initParam 也是一个Map,保存了webapp的配置信息;
  • <%=application.getInitParameter("key")%>等同于${initParam.key}

EL表达式的运算符

EL表达式支持简单的运算符:加减乘除取模(+ - * / %),逻辑运算符(! && || not and or),关系运算符(== != < > <= >=),三目运算符(? :),empty运算符

在这里插入图片描述

  • 其中 ==!= 都是调用 equals 方法
  • 其中 + 会将字符串转换后再进行 + 运算==》${10 + "20"}结果是30

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

手把手教你写一个图片预览组件

一、前言 本篇主要介绍&#xff0c;vue项目手写一个图片预览组件&#xff0c;组件主要包括图片方法、图片缩小、显示原图、下载、复制等功能。 二、实现方式 首先我们需要做一个图片预览组件都有的功能表头&#xff0c;如下图 主要功能包括&#xff0c;放大、缩放比例显示、…

设计模式:02观察者模式--labview实现

引言 在观察者模式中&#xff0c;一种叫做被观察者的对象维护了观察者对象的集合&#xff0c;当被观察者对象发生改变时候&#xff0c;它会通知观察者。 在被观察者对象所维护的观察者集合中&#xff0c;能够添加或者删除观察者。被观察者状态变化能够传递给观察者。这样观察者…

路西德Lucid EDI项目测试流程

Lucid Motors路西德汽车拥有电动汽车制造、储能技术和代工生产等业务&#xff0c;目前已成功研制出其第一辆汽车Lucid Air&#xff0c;并开始对外销售。随着企业的不断发展&#xff0c;对自动化的要求也越来越高&#xff0c;作为制造型企业&#xff0c;Lucid早已实现机械自动化…

多个JDK版本可以吗:JDK17、JDK19、JDK1.8轻松切换(无坑版)小白也可以看懂

多个版本JDK切换 多个JDK&#xff1a;JDK17、JDK19、JDK1.8轻松切换&#xff08;无坑版&#xff09;小白也可以看懂 提示&#xff1a;看了网上很多教程&#xff0c;5w观看、32w观看、几千观看的&#xff0c;多多少少带点坑&#xff0c;这里我就把踩过的坑都给抹了 文章目录多个…

架构演进技巧

架构演进剖析 架构演进定义 定义&#xff1a;通过设计新的系统架构&#xff08;4R&#xff09;来应对业务和技术的发展变化 目的&#xff1a;1、应对业务发展带来新的复杂度&#xff1b;2、应用技术发展带来的复杂度新的解决方法 关键&#xff1a;1、新架构&#xff1b;2、…

UDS知识整理(五):安全访问——0x27服务

目录 一、0x27服务&#xff08;安全访问&#xff09;简介 二、0x27服务信息格式 &#xff08;1&#xff09;请求格式 &#xff08;2&#xff09;正响应格式 &#xff08;3&#xff09;负响应格式 三、0x27服务服务举例 &#xff08;1&#xff09;请求种子与发送KEY 一、…

实变函数与泛函分析基础

集合的运算 并集&#xff1a;1、任意两个集合 2、任意多个集合的并集或和集&#xff1a; 设 一族集合 &#xff1b;由一切 的 元素组成的集合&#xff0c;其中 是固定指标集&#xff0c; 是 中变化的指标。 记为 &#xff0c;可表示为 是 有限集&#xff0c; 记 …

CoreData 同步 iCloud 数据导致 App 启动超时被系统 watchdog 终止的原因及解决

问题现象 CoreData + iCloud 支持的 App 在启动时偶尔会出现被系统强制退出的情况,用 Xcode 也无法中断调试这种崩溃,查看真机上的崩溃日志如下: 如上图所示,我可以了解到 App 崩溃的原因是由于启动超时被系统看门狗(watchdog)强行关闭了: process-launch watchdog tra…

宇视雷达雷视交付|问题定位(素材收集篇)

雷达&雷视交付|问题定位&#xff08;素材收集篇&#xff09; 雷视一体机作为行业明星产品&#xff0c;具备交通信息采集、交通事件检测等功能&#xff0c;在交通领域的应用前景十分广阔。为了快速响应现场交付时问题定位的诉求&#xff0c;提升一线的素材收集规范性和效率…

回收站清空了怎么恢复?数据恢复,有这些就足够了

大家都知道&#xff0c;数据在回收站中会有一定的时间&#xff0c;但是被清空之后&#xff0c;数据就很难恢复了。回收站清空了怎么恢复&#xff1f;首先需要知道&#xff0c;被清空的文件可以分为两类。一类是重要资料&#xff0c;另一类是一些无关紧要的资料。找到我们要恢复…

Kotlin高仿微信-第14篇-单聊-视频通话

Kotlin高仿微信-项目实践58篇详细讲解了各个功能点&#xff0c;包括&#xff1a;注册、登录、主页、单聊(文本、表情、语音、图片、小视频、视频通话、语音通话、红包、转账)、群聊、个人信息、朋友圈、支付服务、扫一扫、搜索好友、添加好友、开通VIP等众多功能。 Kotlin高仿…

SpringMVC(八):SSM整合

文章目录 SSM整合 一、准备数据库表格 二、创建maven web项目并补充项目结构&#xff0c;准备好MVC模式下的主要目录 三、更新web.xml 文件和准备包结构 四、导入依赖 五、log4j2.xml 六、jdbc.properties 七、springMVC.xml配置文件 八、applicationContext.xml 九、…

Anaconda默认安装在C:\Users\xxx\.conda\envs中

目录 问题&#xff1a; 解决&#xff1a; 更改默认安装位置 移动已安装环境 问题&#xff1a; 解决&#xff1a; 更改默认安装位置 用记事本打开 C:\Users\zqk\.condarc 在最后插入 envs_dirs: - D://anzhuang//Anaconda3//envs 如若需更改pkgs&#xff0c;插入如下代…

如何使用OpenCV作图像或矩阵的逻辑运算

所谓逻辑运算&#xff0c;主要是指逻辑与运算、逻辑或运算、逻辑非运算、逻辑异或运算。 可用函数bitwise_and()实现图像或矩阵的逻辑与运算&#xff1b; 可用函数bitwise_or()实现图像或矩阵的逻辑或运算&#xff1b; 可用函数bitwise_not()实现图像或矩阵的逻辑非运算&#x…

oh-my-zsh 为 ls 命令自定义颜色

ls 命令默认显示的颜色是&#xff1a; 白色&#xff1a; 表示普通文件 蓝色&#xff1a; 表示目录 绿色&#xff1a; 表示可执行文件 红色&#xff1a; 表示压缩文件 蓝绿色&#xff1a; 链接文件 红色闪烁&#xff1a;表示链接的文件有问题 黄色&#xff1a; 表示设备文件 灰…

Java实现3DES加密解密(DESede/ECB/PKCS5Padding使用)

一、简介 3DES&#xff08;又叫Triple DES&#xff09;是三重数据加密算法&#xff08;TDEA&#xff0c;Triple Data Encryption Algorithm&#xff09;块密码的通称。 它相当于是对每个数据块应用三次DES加密算法。密钥长度是128位&#xff0c;192位(bit)&#xff0c;如果密…

如何最简洁的使用iOS 开发证书 和 Profile 文件

如果你想在 iOS 设备&#xff08;iPhone/iPad/iTouch&#xff09;上调试&#xff0c; 需要有 iOS 开发证书和 Profile 文件。 在你拿到这两个文件之后&#xff0c;该如何使用呢&#xff1f; 证书使用说明&#xff1a; 1. iOS 开发证书&#xff1a;开发证书 &#xff08;Devel…

ROS——构建一个模拟的两轮ROS机器人

构建一个模拟的两轮ROS机器人1. 确保已经安装了Rviz2. 生成并构建ROS功能包2.1 生成一个catkin工作空间2.2 漏了一个懒得改2.3 构建差分驱动的机器人的URDF2.3.1 创建机器人底座2.3.2 使用roslaunch2.3.3 添加轮子2.3.4 添加颜色2.3.5 添加小脚轮2.3.6 添加碰撞属性2.3.7 移动轮…

CHS寻址

盘片&#xff08;platter&#xff09; 、磁头&#xff08;head&#xff09;、 磁道&#xff08;track&#xff09;、 扇区&#xff08;sector&#xff09;、 柱面&#xff08;cylinder&#xff09;。 CHS&#xff1a;通过柱面&#xff08;cylinder&#xff09;、磁头&#xff0…

成都易佰特的坑——E103-W06

写这篇博客&#xff0c;是为了记录&#xff0c;为了防止技术同行踩坑。 因为什么原因&#xff0c;就不说了。反正就是买了这个E103-W06模块来进行测试wifi透传的性能. 结果&#xff0c;好家伙&#xff0c;买回来就不能用。TMD虚拟串口都识别不了。还他妈卖的挺贵。95元~99元一…