【JSP】EL表达式
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表达式有四个隐式的范围对象:
pageScope
、requestScope
、sessionScope
、applicationScope
<%@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内置对象了)
- 通过EL表达式获取应用的根:
${pageContext.request.contextPath}
等同于<%=pageContext.getRequest().getContextPath()%>
param
保存的是Map
对象,所以我们提取就可以${param.key)
就可以了
${param.key}
相当于<%=request.getParameter("key")%>
这获取的是请求参数key
对应values
的第一个。
paramValues
保存的也是Map
对象,对应的value
类型是String[]
数组
${paramValues.habbits[0]}
就相当于<%=request.getParameterValuses("habbits")[0]%>
initParam
也是一个Map
,保存了webapp
的配置信息;
<%=application.getInitParameter("key")%>
等同于${initParam.key}
EL表达式的运算符
EL表达式支持简单的运算符:加减乘除取模(+ - * / %),逻辑运算符(! && || not and or),关系运算符(== != < > <= >=),三目运算符(? :),empty运算符
- 其中
==
和!=
都是调用equals
方法 - 其中
+
会将字符串转换后再进行+
运算==》${10 + "20"}
结果是30
【JSP】EL表达式相关推荐
- JSP EL表达式详细介绍
2019独角兽企业重金招聘Python工程师标准>>> 一.JSP EL语言定义 E L(Expression Language) 目的:为了使JSP写起来更加简单. 表达式语言的 ...
- JSP EL表达式 param、paramValues的使用
JSP EL表达式 param.paramValues的使用: <%@ page language="java" import="java.util.*" ...
- jsp el 表达式_JSP表达式语言– JSP EL示例教程
jsp el 表达式 Today we will look into JSP Expression Language or JSP EL Example tutorial. 今天,我们将研究JSP表达 ...
- php el表达式,JSP EL表达式学习
pageContext JSP 页的上下文.它可以用于访问 JSP 隐式对象,如请求.响应.会话.输出.servletContext 等.例如,${pageContext.response} 为页面的 ...
- JSP EL 表达式取request parameter
前言 EL 全名为Expression Language. EL主要的语法结构:${sessionScope.user.age} EL 表达式取request parameter URL http:/ ...
- 跟小博老师一起学JSP ——EL表达式
为了尽可能减少JSP中的JAVA代码简化JSP开发,相关的新技术被引入了进来.EL表达式将原有的JAVA代码化繁为简,提升JSP代码的阅读性,也提高了开发效率. EL表达式 EL表达式全称叫Expre ...
- JSP EL表达式 将数组拼接成字符串
前言 el表达式拼接字符串 将数组拼接成字符串 EL表达式拼接字符串的方法 使用String类型的concat方法. ${jbstr.concat(',')} 示例 有一个数组(jbList),需要将 ...
- 【JSP EL表达式】动态表达式/表达式拼接
前言 EL 表达式提供 . 和 [ ] 两种运算符来导航数据. 假设个需求 requestScope中有个名为sysPage的对象.sysPage的对象有属性var1.var2.- 现在想根据某个规则 ...
- JSP EL表达式使用
为什么80%的码农都做不了架构师?>>> ##1.EL全名为Expression Language out.print(str) <%=str%> ${str} 例子: ...
- JSP EL表达式 c:forEach items
目录 myeclipse或者eclipse使用问题的解决 idea中使用问题的解决方案 myeclipse或者eclipse使用问题的解决 注意最上面的别名声明 <%@ taglib prefi ...
最新文章
- MS SQL SERVER 2005 用于Web开发的安装注意事项
- 使用Python控制1602液晶屏实时显示时间(附PyCharm远程调试)
- mysql主从同步配置超详细_MySQL主从同步配置
- nginx 源码学习笔记(十八)—— ngx_add_inherited_sockets 继承的sockets
- Mining Precision Interface From Query Logs -- 学习笔记(三)
- 使用Redis实现分布式锁
- 函数求值需要运行所有线程_精读《深度学习 - 函数式之美》
- 50条超精辟的经典语录:哗众,可以取宠,也可以失宠!
- 联想投资服务器5g芯片,从5G投票到要没必要做芯片,联想到了最危险的时候
- 服务器多路径 映射分区找不到,设备映射多路径DM-Multipath
- python中如何调用类takes no arguments_关于python中的 take no arguments 的解决方法
- 寻找电路布线最短路径算法BFS
- NoSQL的分类入门
- [转]Android调用so文件(C代码库)方法详解
- 国际著名密码学专家来学嘉:区块链对密码学的两大贡献
- ZStack 3.6.0发布:支持云主机从KVM云平台在线迁移至ZStack
- POJ 2976 裸的01分数规划
- 群赛14----2017.9.24
- F5 Networks数据中心资源整合解决方案
- 如何关注速卖通的一举一动
热门文章
- 单片机驱动SD3077时钟芯片
- 努比亚android最高版本,努比亚Z11安卓7.1固件开发版下载地址:新增压力按键等功能...
- 想知道全国有多少人和你同名同姓吗?我教你免费查询
- 深圳外包及不考虑公司名单
- Goland DEBUG报错(could not launch process: decoding dwarf section info at offset 0x0: too short)
- 多项式插值中的一些定理证明
- MP4文件格式简要解析
- ChemDraw加键的两种方法
- 通过贝壳物联,让小度或天猫精灵语音控制你的8266
- 人工神经网络的算法原理,深度神经网络算法原理