感谢原文作者:Mr_J316
原文链接:https://www.jianshu.com/p/52764edd1713
EL(Expression Language)表达式并不是通用的程序设计语言,仅是一种数据访问语言,可以在JSP中方便地访问Java数据。
示例:${expression}
EL隐式对象列表
类别 | 标识符 | 描述 |
---|---|---|
JSP | pageContext | 当前页面 |
作用域 | pageScope | 页面作用域 |
- | requestScope | 请求作用域 |
- | sessionScope | 会话作用域 |
- | applicationScope | 应用程序作用域 |
请求参数 | param | 存储请求参数 |
- | paramValues | 将请求参数的所有值作为 String 数组存储 |
请求头 | header | 按名称存储请求头 |
- | headerValues | 将请求头的所有值作为 String 数组存储 |
Cookie | cookie | 按名称存储请求附带的 cookie |
初始化参数 | initParam | 按名称存储 Web 应用程序上下文初始化参数 |
EL数据访问
作用域对象
applicationScope:用来取得application范围属性值。
sessionScope:用来取得session范围属性值。
requestScope:用来取得request范围属性值。
pageScope:用来取得page范围属性值。
这些隐式对象对应于JSP中的pageContext,request,session,application,只用来读取属性值。
//创建对象,分别放进不同作用域
User myUser = new User("0001", "张三", 20);
pageContext.setAttribute("currentUser", myUser);
request.setAttribute("currentUser", myUser);
session.setAttribute("currentUser", myUser);
application.setAttribute("currentUser", myUser);
//读取不同范围的值
page范围:${pageScope.currentUser.name}<br />
request范围:${requestScope.currentUser.name}<br />
session范围:${sessionScope.currentUser.name}<br />
application范围:${applicationScope.currentUser.name}<br />
不指定范围:${currentUser.name}
如果不指定范围,默认会从page范围内找,如果找不到,再依次到request、session、application范围中找。如果没有找到就返回null。
读取集合或map
//存入集合
ArrayList<User> lists = new ArrayList<User>();
lists.add(new User("0001", "张三", 20));
lists.add(new User("0002","李四",30));
session.setAttribute("userList", lists);
//存入map
Map<String,User> map = new HashMap<String,User>();
map.put("user1", new User("0001","张三",20));
session.setAttribute("currentUser", map);
// 读取集合
${userList[0].name}<br />
${userList[1].name}<br />
// 读取map
${currentUser.user1.name}<br />
请求参数对象
//在EL之前使用如下代码取得请求参数
request.getParameter(name);
request.getParameterValues(name);
//在EL中使用如下隐式对象取得请求参数
param:接收的参数只有一个值。
paramValues:接受的参数有多个值。
示例:
<form method="post" action="buyMessage.jsp">
<p>
请选择您要购买的商品:
</p>
<p>
<input type="checkbox" name="goods" value="手机"/>手机
</p>
<p>
<input type="checkbox" name="goods" value="电脑"/>电脑
</p>
<p>
<input type="checkbox" name="goods" value="空调"/>空调
</p>
<p>
请输入收货地址:<input type="text" name="address" />
</p>
<input type="submit" value="确定" />
</form>
<!--获取前一页面请求中的值 -->
<body>
<%
request.setCharacterEncoding("utf-8");
%>
您选择的商品是:
<p></p>
${paramValues.goods[0]}<p></p>
${paramValues.goods[1]}<p></p>
${paramValues.goods[2]}<p></p>
您的收货地址是:
<p></p>
${param.address}
<p></p>
<input type="button" value="下一步" />
<input type="button" value="返回上一步" />
</body>
Cookie对象
// 颁发Cookie
Cookie c = new Cookie("username", "admin");
response.addCookie(c);
// 获取cookie
${cookie.username.value }
EL运算符
算术运算符
算术运算符 | 说明 | 示例 | 结果 |
---|---|---|---|
+ | 加 | ${1 + 1} | 2 |
- | 减 | ${1 - 1} | 0 |
* | 乘 | ${1 * 2} | 2 |
/或div | 除 | ${3 / 2} | 1.5 |
%或mod | 取余 | ${3 % 2} | 1 |
关系运算符
关系运算符 | 说明 | 示例 | 结果 |
---|---|---|---|
= = 或 eq | 等于 | {1 eq 1} | true |
!= 或ne | 不等于 | {1 ne 1} | false |
< 或 lt | 小于 | {1 lt 1} | true |
> 或 gt | 大于 | {1 gt 1} | false |
<= 或 le | 小于或者等于 | {1 le 1} | true |
>= 或 ge | 大于或者等于 | {1 ge 1} | false |
逻辑运算符
逻辑运算符 | 说明 | 示例 | 结果 |
---|---|---|---|
&& 或 and | 交集 | {A and B} | 当A和B都为true时为true,其他情况为false |
|| 或 or | 并集 | {A or B} | 当A和B都为false时为false,其他情况为true |
! 或 not | 非 | {not A} | 当A为true时,为false 当A为false时,为true |
条件运算符
${表达式1 ? 表达式2 : 表达式3} // 与java用法相同
${currentUser.name=="admin"?"管理员":"普通用户"}
验证运算符
${empty 表达式}
返回布尔值判断表达式是否为"空"值,null值、无元素的集合或数组、长度为零的String被认为是空值。
在JS中使用EL
在本页面中使用EL
<%
session.setAttribute("username", "admin");
%>
<script>
alert("${username}");
</script>
在外链JS文件中引用EL
必须在当前页面的JS脚本中定义变量存放EL表达式,然后在外部JS文件中引用该变量。
<%
session.setAttribute("username", "admin");
%>
<script src="js/function.js"></script>
<script>
var username="${username}";
myFun();
</script>
//外联js文件
function myFun(){
alert(username);
}
补充
https://www.runoob.com/jsp/jsp-expression-language.html
https://www.jb51.net/article/107468.htm
https://www.jb51.net/article/105314.htm
https://www.jb51.net/article/111703.htm