文章目录
概述
- EL(Expression Language)是一门表达式语言,对应JSP中的<%=…=%>。
EL表达式的格式:${…} - 在使用EL表达式时,要求page指令的isELIgnored属性为false(默认为false)。这样JSP在编译成.java时,才不会忽略EL表达式。
- 如果你希望某个EL表达式被JSP编译器忽略,那么可以在EL表达式之前添加“\”,例如:${1+2}。
EL操作对象的方式
- 操作变量和常量:${name}、 ${8};
- 操作List和数组:${list[0]}、 ${arr[0]};
- 操作bean的属性:${person.name}、 ${person[‘name’]},对应person.getName()方法;
- 操作Map的值:${map.key}、 ${map[‘key’]},对应map.get(key)
EL运算符
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL运算符</title>
</head>
<body>
<label>常量输出:</label>${10 }<br>
<label>四则运算:</label>${10+2},${10-2},${10*2},${10/2},${10 div 2} <br>
<label>等于:</label>${10 == 10},${10 eq 10}<br>
<label>不等于:</label>${10 != 2},${10 ne 2}<br>
<label>取余数:</label>${10 % 3},${10 mod 3}<br>
<label>小于:</label>${5 < 10},${5 lt 10}<br>
<label>大于:</label>${5 > 10},${5 gt 10}<br>
<label>小于等于:</label>${5 <= 10}, ${5 le 10}<br>
<label>大于等于:</label>${5 >= 3},${5 ge 3}<br>
<label>逻辑与:</label>${true && true},${true and true}<br>
<label>逻辑或:</label>${true || false},${true or false}<br>
<label>逻辑非:</label>${!true }, ${not true}<br>
<label>判空:</label>${empty ""}<br>
<label>非空判断:</label>${not empty ""}<br>
</body>
</html>
运行结果:
常量输出:10
四则运算:12,8,20,5.0,5.0
等于:true,true
不等于:true,true
取余数:1,1
小于:true,true
大于:false,false
小于等于:true, true
大于等于:true,true
逻辑与:true,true
逻辑或:true,true
逻辑非:false, false
判空:true
非空判断:false
EL内置对象
在EL表达式中,无需创建就可以使用的对象称之为EL隐藏(隐藏、内置)对象。在EL中一共有11个隐藏对象,它们都与Map相似。其中10个是Map,1个是PageContext。
参数隐藏对象
这些隐藏对象都是Map类型。
param
单值接收,param是Map<String,String>类型。param对象可以用来获取参数,与request.getParamter()方法相同。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL内置对象</title>
</head>
<body>
<form action="testEL.jsp">
账户:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
<%
String username = request.getParameter("username");
String password = request.getParameter("password");
%>
<h1><%= username %></h1>
<h1><%= password %></h1>
<h1>${param.username}</h1>
<h1>${param.password}</h1>
</body>
</html>
上述jsp代码将一个form表单提交到本身。
request.getParameter(“username”)和${param.username}不同,前者为null串,后者为空字符串。
提交表单后,如图:
两者都可以获取值。
paramValues
多值接收。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL内置对象</title>
</head>
<body>
<form action="testEL.jsp">
爱好:<input type="text" name="hobby"><br>
爱好:<input type="text" name="hobby"><br>
<input type="submit" value="提交">
</form>
<h1>${paramValues.hobby[0]}</h1>
<h1>${paramValues.hobby[1]}</h1>
</body>
</html>
headerValues
是Map<String,String>类型。当一个请求头名称,对应多个值时,使用该对象。
${header.Host}
可以获得localhost:8080
initParam
是Map<String,String>类型。它对应web.xml文件中的<context-param>
参数。
ServletContext级别的参数获取:
web.xml文件:
<context-param>
<param-name>name</param-name>
<param-value>value</param-value>
</context-param>
jsp文件:
${initParam.name}
可以获取到value。
cookie
是Map<String,Cookie>类型,其中key是Cookie的名字,而值是Cookie对象本身。
<%
response.addCookie(new Cookie("personName","zhangsan"));//先设置cookie
%>
<h1>${cookie.personName.name}</h1>
<h1>${cookie.personName.value}</h1>
域隐藏对象
使用EL表达式最为常用的就是获取域对象中保存的数据。以下域的范围越来越大。如果对象不加域的范围,将从小的域开始找。
pageScope
是Map<String,Object>类型,装载了pageContext对象中的所有数据。${pageScope.key}
与pageContext.getAttribute("key")
功能相同。两者的区别在于,前者在数据不存在时返回空字符串,后者返回null。
requestScope
是Map<String,Object>类型,装载了request对象中的所有数据。
sessionScope
是Map<String,Object>类型,装载了session对象中的所有数据。
applicationScope
是Map<String,Object>类型,装载了application对象中的所有数据。