概述
EL是expression Language的简称,意思是表达式语言,在EL出现之前,开发jsp程序时,经常需要写如大量的Java语言嵌入在jsp页面,它的出现使得页面看起来更加简洁
1、基本语法
EL的语言非常简单,它是以"${"开头,以"}"结束
具体的语法格式:
${expression},其中expression是指定要输出的内容
使用page指令可以禁止使用EL表达式,其中具体语法如下:
<%@ page isELIgnored="布尔值" %>
isELIgnored属性:用于是否禁止页面使用EL,true表示页面禁止使用EL,false就可以使用EL,不写这个是默认可以使用EL的,禁止使用的代码如下:
<%@ page isELIgnored="true" %>
在web.xml文件中配置<el-igonred>元素
在web.xml文件中配置<el-ignored>元素可以禁止服务器中的EL。在web.xml文件配置<el-ignored>元素的具体代码如下:
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<el-ignored>true</el-ignored> <!-- 将此处的值设置为false,表示使用EL-->
</jsp-property-group>
</jsp-config>
在EL中判断对象是否为空
在EL中判断对象是否为空,可以通过empty运算符实现,来确定一个对象或者变量是否为null或者空
empty运算符的语法格式:
${empty expression}
如果是真,就返回true
在EL中进行逻辑关系运算
1、关系运算符
运算符 | 功能 | 示例 | 结果 |
==或eq | 等于 | ${10==10}或者${10 eq 10} | true |
!=或ne | 不等于 | ${10!=10}或者${10 ne 10} | true |
<或lt | 小于 | ${10 <0}或者${10 lt 0} | false |
>或gt | 大于 | ${10>1}或者${10 ge 1} | true |
<=或le | 小于等于 | ${10<=20}或者${10 le 20} | true |
>=或ge | 大于等于 | ${10>=20}或者${10 ge 20} | false |
2、逻辑运算符
运算符 | 功能 | 示例 | 结果 |
&& 或 and | 与 | ${true && false}或${true and false} | false |
|| 或 or | 或 | ${true || false}或${true or false} | true |
!或 not | 非 | ${!true}或${not true} | false |
在EL中进行条件运算
EL运算的唯一优点就是非常简单和方便,和Java的用法一样,其语法格式如下
${ 条件表达式 ?表达式1 :表达式2 }
条件为真时表达式1作为返回的值,条件为假时表达式2为返回的值
${ empty name ? "名字为空" :name }
获取值
EL表达式只能从域对象中获取值
语法:
1、 ${域名称.键名}:从指定域中获取指定键的值
域名称 | |
pageScope | pageContext |
requestScope | request |
sessionScope | session |
applicationScope | application |
例如:在request域中存储了name=张三,获取:${requestScope.name}
2、${键名}
表示依次从最小的域中查找是否有该键对应的值,直到找到为止。
3、获取对象、List集合、Map集合的值
1. 对象:${域名称.键名.属性名}
本质上会去调用对象的getter方法
2. List集合:${域名称.键名[索引]}
3. Map集合:
${域名称.键名.key名称}
*${域名称.键名["key名称"]}
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@page import="com.atguigu.javaweb.Customer"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 7. EL 的运算符 -->
${param.score > 60 ? "及格" : "不及格" }
<br>
<%
List<String> names = new ArrayList<String>();
names.add("abc");
request.setAttribute("names", names);
%>
<!-- empty 可以作用于一个集合, 若该集合不存在或集合中没有元素, 其结果都为 true -->
names is empty: ${empty requestScope.names }
<br>
<!-- 6. 其他隐含对象: pageContext 等(cookie, header, initParam 只需了解.) -->
pageContext: pageContext 即为 PageContext 类型, 但只能读取属性就可以一直的 . 下去。
<br>
contextPath: ${pageContext.request.contextPath }
<br>
sessionId: ${pageContext.session.id }
<br>
sessionAttributeNames: ${pageContext.session.attributeNames }
<br>
initParam: ${initParam.initName }
<br>
Accept-Language: ${header["Accept-Language"] }
<br>
JSESSIONID: ${cookie.JSESSIONID.name } -- ${cookie.JSESSIONID.value }
<br>
<!-- 5. 与输入有关的隐含对象: param, paramValues -->
score: ${param.score }
<%--
<%= request.getParameter("score") %>
--%>
<br>
names: ${paramValues.name[0].class.name }
<%--
<%=
request.getParameterValues("name")[0].getClass().getName()
%>
--%>
<br>
<!-- 4. 隐含对象之与范围相关的: pageScope, requestScope, sessionScope, applicationScope -->
time: ${applicationScope.time.time }
<%--
<%= application.getAttribute("time") %>
--%>
<br>
<!-- 3. EL 可以进行自动的类型转换 -->
score: ${param.score + 11}
<br>
score: <%= request.getParameter("score") + 11 %>
<br>
<!-- 2. EL 中的隐含对象 -->
<%
Customer cust2 = new Customer();
cust2.setAge(28);
request.setAttribute("customer", cust2);
%>
age: ${customer.age }
<br>
<!-- 1. EL 的 . 或 [] 运算符 -->
age: ${sessionScope.customer["age"] }
<%--
Customer customer = (Customer)session.getAttribute("customer");
out.print(customer.getAge());
--%>
<%
Customer customer = new Customer();
customer.setName("ATGUIGU"); session.setAttribute("com.atguigu.customer", customer);
%>
<br>
<!--
如果域对象中的属性名带有特殊字符, 则使用 [] 运算符会很方便.
-->
name: ${sessionScope["com.atguigu.customer"].name }
</body>
</html>