javaWeb
一、EL表达式
Expression Language(表达式语言)
1.1 概念
书写在jsp中通过特定的语法对作用域中的数据进行快速获取,减少在jsp页面中java代码的书写,简化开发
1.2 语法
1.2.1 获取传递数据并进行自动转换
获取指定作用域数据并进行自动类型转换(因为保存的是object类型,el表达式在取出后会自动转换为放置之前的类型)
${作用域.name}
属性范围 | EL中的名称 |
---|---|
page | pageScope,例如${pageScope.username},表示在page范围内查找username变量,找不到返回空字符串 |
request | requstScope |
session | sessionScope |
application | applicationScope |
虽然可以通过各个作用域获取相同名字的数据,但是一般我们不会书写相同属性的数据,所以可以直接通过${name}进行获取,但是如果出现相同name可能会导致数据获取出现问题(如果没有书写作用域,那么会从小到大依次进行获取)
<%@ 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>
<%
pageContext.setAttribute("test", "page");
request.setAttribute("test", "request");
session.setAttribute("test", "session");
application.setAttribute("test", "application");
%>
page:${pageScope.test}<br>
request:${requestScope.test}<br>
session:${sessionScope.test}<br>
application:${applicationScope.test}<br>
啥都不写:${test }
</body>
</html>
1.2.2 获取指定数据的属性
使用属性获取时是自动根据属性调用对应的get方法进行获取
对象.属性
对象[“属性”]
<%@page import="com.yunhe.el.Student"%>
<%@page import="com.yunhe.el.Teacher"%>
<%@ 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>
<%
Teacher t=new Teacher("tname","tage");
Student s=new Student("sname",18,t );
session.setAttribute("stu", s); %>
<!-- 获取并进行自动类型转换 -->
${s}
<!-- 获取指定对象后获取对应的属性 -->
=${stu.teacher.name}
<hr>
${stu["teacher"]["name"]}
</body>
</html>
1.2.3 获取集合中的数据
List集合
<%@page import="java.util.ArrayList"%>
<%@page import="com.yunhe.el.Student"%>
<%@page import="com.yunhe.el.Teacher"%>
<%@ 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>
<%
ArrayList<Teacher> list=new ArrayList<>();
list.add(new Teacher("t1","t1"));
list.add(new Teacher("t2","t2"));
list.add(new Teacher("t3","t3"));
request.setAttribute("teacherlist", list);
%>
<!-- 获取 集合中的数据 -->
<!-- 通过类似于数组的获取方式进行获取 -->
${teacherlist[1]}
<hr>
${teacherlist.get(1)}
</body>
</html>
map集合
<%@page import="java.util.HashMap"%>
<%@page import="java.util.ArrayList"%>
<%@page import="com.yunhe.el.Student"%>
<%@page import="com.yunhe.el.Teacher"%>
<%@ 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>
<%
HashMap<String,String> names = new HashMap<>();
names.put("one","LiYang");
names.put("two","WangHua");
request.setAttribute("names",names);
%>
<!-- 可以将map集合的key当做对象的属性进行获取 -->
姓名:${names.one}<br/>
姓名:${names["two"] }<br/>
姓名:${names.get("one") }<br/>
</body>
</html>
1.2.4 El操作符
与java中的操作符使用方法一致,并提供了仅用于el的对应操作符的语法
关系操作符 | 说明 | 示例 | 结果 |
---|---|---|---|
==(或eq) | 等于 | 23 = = 5 或 {23==5}或 23==5或{23 eq 5} " a " = = " a " 或 {"a" =="a"}或 "a"=="a"或{“a” eq “a”} | falsetrue |
!=(或ne) | 不等于 | 23 ! = 5 或 {23!=5}或 23!=5或{23 ne 5} | true |
<(或lt) | 小于 | 23 < 5 或 {23<5}或 23<5或{23 lt 5} | false |
>(或gt) | 大于 | 23 > 5 或 {23>5}或 23>5或{23 gt 5} | true |
<=(或le) | 小于等于 | 23 < = 5 或 {23<=5}或 23<=5或{23 le 5} | false |
>=(或ge) | 大于等于 | 23 > = 5 或 {23>=5}或 23>=5或{23 ge 5} | ture |
逻辑操作符 | 说明 | 示例 | 结果 |
---|---|---|---|
&&(或and) | 逻辑与 | 如果A为true,B为false,则A&&B(或A and B) | false |
||(或or) | 逻辑或 | 如果A为true,B为false,则A||B(或A or B) | true |
! (或not) | 逻辑非 | 如果A为true,则!A (或not A) | false |
变量 a不存在,则${empty a}返回的结果为true
n
o
t
e
m
p
t
y
a
或
{not empty a}或
notemptya或{!empty a}返回的结果为false
1.3 el隐式对象
el表达式可以对当前服务存储在指定隐式对象中的数据进行获取
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mJXhpf0u-1616476712364)(day0318.assets/image-20210318112052080.png)]
对象名称 | 说 明 |
---|---|
pageScope | 返回页面范围的变量名,这些名称已映射至相应的值 |
requestScope | 返回请求范围的变量名,这些名称已映射至相应的值 |
sessionScope | 返回会话范围的变量名,这些名称已映射至相应的值 |
applicationScope | 返回应用范围内的变量,并将变量名映射至相应的值 |
param | 返回客户端的请求参数的字符串值 |
paramValues | 返回映射至客户端的请求参数的一组值 |
pageContext | 提供对用户请求和页面信息的访问 |