JavaWeb——JSP表达式语言(EL)
1、JSP表达式语言(EL)用于在jsp从访问存储在JavaBean中的数据,例如
User ID: ${user.userId}<br />
这里的${user.userId}就是JSP EL表达式,效果就是:
User ID: 19358
19358是userId的数据
2、语法
- 立即执行
 
立即执行EL表达式将在页面渲染的时候,被JSP引擎解析和执行。这就意味着EL表达式将在JSP引擎中发现它,并在继续执行其他页面部分之前执行它,就类似c语言中的宏那样,下面的例子中EL表达式将会立即执行,其中expr是一个EL表达式
${expr}
美元符号和两个花括号定义了EL表达式的边界,在括号中的所有的内容都会作为EL表达式执行。所以如果我们需要使用美元符号就需要进行转义
- 延迟执行
 
延迟执行EL表达式是统一表达式的一部分主要用于满足JavaServer Faces的需要。下面的例子将是一个延迟执行的EL表达式
#{expr}
3、添加EL表达式
EL表达式可以直接用在JSP的任何位置,除了少数特殊情况。首先不能用在任何指令中,因为编译JSP时,指令将会被执行,但是EL表达式是在渲染JSP时执行,所以这里的EL表达式是无法正常工作的。
另外,JSP声明<%!%>、脚本<%%>或者表达式<%=%>中的EL表达式也是无效的。
除此之外,EL表达式可以添加在任意的位置
- 简单文本中
 
User ID: ${expr}
- 标准的HTML标签中
 
<input type="text" name="something" value="${expr}"/>
- JSP标签中
 
<c:url value ="/something/${expr}/${expr}"/>
4、基础操作符
| 操作符 | 描述 | 
|---|---|
| . | 访问一个Bean属性或者一个映射条目 | 
| [] | 访问一个数组或者链表的元素 | 
| ( ) | 组织一个子表达式以改变优先级 | 
| + | 加 | 
| - | 减或负 | 
| * | 乘 | 
| / or div | 除 | 
| % or mod | 取模 | 
| == or eq | 是否相等 | 
| != or ne | 是否不等 | 
| < or lt | 是否小于 | 
| > or gt | 是否大于 | 
| <= or le | 是否小于等于 | 
| >= or ge | 是否大于等于 | 
| && or and | 与 | 
| || or or | 或 | 
| ! or not | 取反 | 
| empty | 是否空值 | 
5、对象属性和方法
EL表达式通过.进行JavaBean中属性的简化语法,假设现在有一个类user,有名为userId的类
${user.userId}
如果使用这个表达式来访问userId字段,这是行不通的因为这里的.实际寻找的是userId属性而非字段,也就是说将调用的是user.getuserId()类似的JavaBean标准访问方法。
如果没有这样的标准方法,应该这样进行访问
${user["userId"]}
6、EL函数
JSP EL允许您在表达式中使用函数。这些函数必须被定义在自定义标签库中。函数的使用语法如下:
${ns:func(param1, param2, ...)}
其中ns是命名空间,func是函数名,param1、param2...是参数
比如,有函数fn:length,在JSTL库中定义,可以像下面这样来获取一个字符串的长度:
${fn:length("Get my length")}
7、lambda表达式
lambda表达式就是一个匿名函数,EL lambda就是用箭头操作符->分割左侧的表达式参数和右侧的表达式,以下是两个有效的EL lambda表达式
${(a -> a + 5) (4)}
${((a,b) -> a + b) (3, 5)}
还可以这样使用:
${v = (a , b) -> a +b; v(3, 5)}
8、集合
- map
 
现假设有一个map拥有键username和ueseId,那么可以使用中括号访问这两个键的键值
${map["username"]}
${map["userId"]}
也可以使用.
${map.username}
${map.userId}
- list
 
假设有一个list,它包含了三个值"green"、"red"、"blue",按照0到2d的顺序一存储,那么可以只有访问
${list[0]}
${list[1]}
${list[2]}
不能使用.
9、试用
先新建一个类User,每个字段都将拥有相应的set和get方法
public class User {
    private long userId;
    private String username;
    private String firstname;
    private String lastname;
    private Map<String,Boolean> permission = new Hashtable<>();
    public long getUserId() {
        return userId;
    }
    public void setUserId(long userId) {
        this.userId = userId;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getFirstname() {
        return firstname;
    }
    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }
    public String getLastname() {
        return lastname;
    }
    public void setLastname(String lastname) {
        this.lastname = lastname;
    }
    public Map<String, Boolean> getPermission() {
        return permission;
    }
    public void setPermission(Map<String, Boolean> permission) {
        this.permission = permission;
    }
}
然后是Servlet:
@WebServlet(
name = "ELServlet",
urlPatterns = "/EL"
)
public class ELServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
User user = new User();
user.setUserId(19358L);
user.setUsername("Username");
user.setFirstname("Firstname");
user.setLastname("Lastname"); Hashtable<String,Boolean> permissions = new Hashtable<>();
permissions.put("user", true);
permissions.put("moderator", true);
permissions.put("admin", false);
user.setPermission(permissions); req.setAttribute("user",user);
req.getRequestDispatcher("/WEB-INF/jsp/view/EL.jsp")
.forward(req,resp);
}
}
最后是JSP
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>User</title>
</head>
<body>
User ID: ${user.userId}<br />
Username: ${user.username}(${user.username.length()} characters)<br/>
Full Name: ${user.lastname += "," += user.firstname}
<br/><br/>
<b>Permissons (${fn:length(user.permission)})</b><br/>
User: ${user.permission["user"]}<br/>
Moderator: ${user.permission["moderator"]}<br/>
Admin: ${user.permission["admin"]}<br/>
</body>
</html>
需要注意的地方有user.username.length()这里相等于使用的是String的length方法,user.lastname += "," += user.firstname这里也是简单的使用 += 进行字符串的拼接fn:length(user.permission),这里调用fn:length函数输出permission的长度。
  结果:
  
10、使用隐含的EL变量
JSP EL支持下表列出的隐含对象:
| 隐含对象 | 描述 | 
|---|---|
| pageScope | page 作用域 | 
| requestScope | request 作用域 | 
| sessionScope | session 作用域 | 
| applicationScope | application 作用域 | 
| param | Request 对象的参数,字符串 | 
| paramValues | Request对象的参数,字符串集合 | 
| header | HTTP 信息头,字符串 | 
| headerValues | HTTP 信息头,字符串集合 | 
| initParam | 上下文初始化参数 | 
| cookie | Cookie值 | 
| pageContext | 当前页面的pageContext | 
JavaWeb——JSP表达式语言(EL)的更多相关文章
- 【jsp】详解JSP表达式语言(EL)
		
一.JSP EL语言定义 E L(Expression Language) 目的:为了使JSP写起来更加简单. 表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 ...
 - JSP 表达式语言
		
JSP 表达式语言 JSP表达式语言(EL)使得访问存储在JavaBean中的数据变得非常简单.JSP EL既可以用来创建算术表达式也可以用来创建逻辑表达式.在JSP EL表达式内可以使用整型数,浮点 ...
 - JSP表达式语言(EL)
		
JSP表达式语言(EL)使得访问存储在JavaBean中的数据变得非常简单.JSP EL既可以用来创建算术表达式也可以用来创建逻辑表达式.在JSP EL表达式内可以使用整数型.浮点型.字符串.常量 ...
 - 表达式语言EL
		
表达式语言EL 表达式语言 EL(Expression Language,表达式语言)主要是用在JSP页面中,用来辅助我们产生无脚本的JSP页面,此处的脚本指的是JSP中的Java代码. EL的语法是 ...
 - 表达式语言EL简单学习
		
Jsp2.0最重要的特性就是表达式语言EL.jsp用户可以用它来访问应用程序数据. EL表达式以${开头并以}结束. ${expresion} ${x+y} 它也常用来连接两个表达式,取值将从 ...
 - JSP-Runoob:JSP 表达式语言
		
ylbtech-JSP-Runoob:JSP 表达式语言 1.返回顶部 1. JSP 表达式语言 JSP表达式语言(EL)使得访问存储在JavaBean中的数据变得非常简单.JSP EL既可以用来创建 ...
 - 06.十分钟学会表达式语言EL
		
一. 概念:MVC设计模式一个主要好处就是让jsp中的代码越来越来少,而且规定只能出现三种代码:接收属性,判断语句,迭代输出.但是,在开发中,jsp输出至少还是需要接受VO对象的,这时候为了避免导入V ...
 - Java EE之表达式语言EL(上)
		
1.了解表达式语言 表达式语言(EL)用于在不使用脚本.声明或者表达式的情况下,在JSP页面中渲染数据. EL曾是JSTL 1.0规范(与JSP 1.2)中的一部分,并且只可以用作JSTL标签的特性. ...
 - Java EE之表达式语言EL(下)
		
1.在EL表达式中使用作用域变量 表达式语言对作用域变量的支持,以及它解析变量的方式都使它变得非常有用. 1.1 EL表达式的隐式变量 EL表达式的作用域中定义了11个隐式变量. 当EL表达式引用了一 ...
 
随机推荐
- 网络虚拟化基础协议·Geneve
			
[分层] 要实现网络虚拟化,最基础的技术肯定是分层(OverLay & UnderLay). ·UnderLay 中文释义中,老房子漏雨,在房子里面撑一把大雨伞,这把大雨伞就是UnderLay ...
 - scrapy基础知识之 CrawlSpiders(爬取腾讯校内招聘):
			
import scrapyfrom scrapy.spider import CrawlSpider,Rulefrom scrapy.linkextractors import LinkExtract ...
 - 消息队列(MQ)
			
什么是消息队列 消息队列,即MQ,Message Queue. 消息队列是典型的:生产者.消费者模型.生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息.因为消息的生产和消费都是异步的,而且 ...
 - C语言指针学多了,你为什么会觉得晕?
			
对于C语言中的指针概念,如果我告诉你,它是一个地址变量,你听了一头雾水,"地址?啥意思?"见你不理解,我说的详细点"指针变量跟其他变量一样,存储的是一个地址". ...
 - ZIP:ZipFile
			
ZipFile: /* 此类用于从 ZIP 文件读取条目 */ ZipFile(File file) :打开供阅读的 ZIP 文件,由指定的 File 对象给出. ZipFile(File file, ...
 - 【题解】P2078 朋友-C++
			
题目传送门 这道题目就是一个模板并查集 但是!唯一不同的地方在于,这道题的编号有负数. C++的map你忘了吗!!!下表可以是任意类型. 所以把fa数组开成一个int->int的map就可以了 ...
 - vs项目依赖项黄色感叹号解决方案
			
右键项目解决方案,生成解决方案或重新生成解决方案,黄色感叹号消失,依赖项生效,亲测有效
 - 查看http请求的header信息
			
1 下载chrome浏览器 chrome浏览器是google开发的一块非常绑定浏览器.chrome浏览器下载地址. 2 通过chrome控制台查看http请求的header信息 2.1 打开chrom ...
 - 个人永久性免费-Excel催化剂功能第24波-批量发送邮件并指点不同附件不同变量
			
批量发送邮件功能,对高级OFFICE用户来说,第1时间会想到使用WORD的邮件合并功能.但对于需要发送附件来说,邮件合并功能就无能为力,同样还有的限制是用户电脑上没有安装OUTLOOK,同样也不能发送 ...
 - c语言进阶2-变量的作用域与无参函数
			
一. 什么是函数 函数是具有特定功能的模块.可以说一个完整的程序其实是由多个函数共同完成的.C语言的全部工作都是由程式各样的函数完成的,所以也把C语言称为函数式语言.使用模块化设计可能 使 ...