EL:Expression Language(表达式语言),用于替换JSP页面中Java代码,简化书写。
语法格式:${表达式} (表达式可以是字符串,数字,字母等不带有任何运算性质的内容,也可以是带有运算性质的表达式,如果是字符串、数字之类的,会在页面直接输出内容,如果是带有运算性质的表达式,输出的内容为表达式的结果)。
注意事项:
JSP默认支持EL表达式,如果想要忽略El表达式,有两种方式:
1.在JSP页面的page指令行中,添加书写isELIgnored=“true”,会忽略当前页面所有EL表达式。
2.在EL表达式前加"\",即\${表达式},会忽略当前这一条语句。
<%@ page contentType="text/html;charset=UTF-8" isELIgnored="false" language="java" %>
<html>
<head>
<title>Titletitle>
head>
<body>
${2>1}
\${3>4}
body>
html>
运算符:
*算术运算符:+、-、*、/(div)、%(mod)
*比较运算符:>、<、 ==、 >=、 <=
*逻辑运算符:&&(and) 、||(or) 、!(not)
*空运算符:empty
${empty 对象名}用于判断数组、集合、字符串对象的长度是否为0或者是否为null。
${not empty 对象名}用于判断数组、集合、字符串对象的长度是否不为0或者不为null。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL2title>
head>
<body>
${1+2}
${1-2}
${1*2}
${1/2}
${1 div 2}
${1%2}
${1 mod 2}
${1>2}
${1<2}
${1==2}
${1!=2}
${1>=2}
${1<=2}
${1>2&&3>2}
${1>2||3>2}
${!(1>2&&3>2)}
<%
ArrayList al = new ArrayList();
al.add(1);
al.add(2);
request.setAttribute("al",al);
%>
${empty al}
body>
html>
EL对象只能从域对象获取值。
域对象:
pageScope:对应pageContext
requestScope:对应于request
sessionScope:对应于session
applicationScope:对应于application
1.获取已定义好的数据类型数据
语法格式:
*${域名称.键名}:从对应的域中获取键名所对应的值
*${键名}:如果有多个域有相同的键,便从最小的域开始找,与语句定义的为止无关,一旦找到,便不再向上寻找。
域范围:pageScope
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL3title>
head>
<body>
<%
//为了进行展示,写一些java代码
application.setAttribute("name","hehe");
session.setAttribute("name","jim");
request.setAttribute("name","jack");
pageContext.setAttribute("name","tom");
%>
<%--通过${域名称.键名}进行获取--%>
${pageScope.name}
${requestScope.name}
${sessionScope.name}
${applicationScope.name}
<%--通过${键名}进行获取--%>
${name}
body>
html>
2.获取对象的值
一般使用的类都为JavaBean,但可以直接写键名.属性名,因为默认调用的是getXxx()方法,因此想要调用方法,直接写键名.xxx即可进行调用。
语法格式:
${域名称.键名.属性名}
${键名.属性名}
import java.text.SimpleDateFormat;
import java.util.Date;
public class User {
private String name;
private Date date;
public User(String name,Date date){
this.name = name;
this.date = date;
}
public User(){
}
/*
逻辑视图
*/
public String getSdf(){
if(date!=null){
//1.获取日期对象
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//2.进行格式化
return sdf1.format(date);
}else{
return "";
}}
public void setName(String name) {
this.name = name;
}
public void setDate(Date date) {
this.date = date;
}
public String getName() {
return name;
}
public Date getDate() {
return date;
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>获取的值title>
head>
<body>
<%
User user = new User();
user.setName("hehe");
user.setDate(new Date());
request.setAttribute("user",user);
ArrayList<Integer> al = new ArrayList<>();
al.add(123);
al.add(321);
request.setAttribute("al",al);
Map map = new HashMap();
map.put("name","tom");
map.put("age",18);
map.put("user",user);
request.setAttribute("map",map);
%>
${requestScope.user} <%-- 打印地址值 JSP.User@3bcb159e --%>
<%--获取属性值
属性名可以直接写,因为默认调用的是getXxx方法,比较方便.
即在调用属性时,可以直接将JavaBean中的getXxx方法名写成xxx,就可以直接调用
--%>
${requestScope.user.name} <%--hehe--%>
${user.name}
${requestScope.user.date} <%-- Wed Mar 17 18:24:11 CST 2021--%>
<%--${user.date}--%>
<%--将日期进行格式化输出,在User中定义getSdf()方法--%>
${user.sdf} <%-- 2021-03-17 18:46:31--%>
body>
html>
3.获取集合与数组的值
List集合与数组:
格式:
${域名.键名[索引值]}
${键名[索引值]}
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>获取的值title>
head>
<body>
<%
ArrayList<Integer> al = new ArrayList<>();
al.add(123);
al.add(321);
request.setAttribute("al",al);
%>
<%--获取list集合数据--%>
${requestScope.al} <%--[123, 321]--%>
${al} <%--[123, 321]--%>
${al[0]} <%--123--%>
${al[1]} <%--321--%>
${al[2]} <br><%--不打印异常,不显示值--%>
<%--获取数组数据--%>
${requestScope.array[1]}
${array[2]}
body>
html>
Map集合
语法格式:
${域名.键名.key}
${域名.键名[“key”]}(双引号必须带上)
${键名.key}
${键名[“key”]}(双引号必须带上)
<%@ page import="JSP.User" %>
<%@ page import="java.util.Date" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %><%--
Created by IntelliJ IDEA.
User: if shining
Date: 2021/3/17
Time: 18:17
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>获取的值title>
head>
<body>
<%
Map map = new HashMap();
map.put("name","tom");
map.put("age",18);
map.put("user",user);
request.setAttribute("map",map);
%>
<%--获取map集合数据--%>
${requestScope.map} <%--{name=tom, user=JSP.User@6fa1558d, age=18} --%>
${map.name} <%--tom --%>
${map["name"]} <%--tom --%>
${map.user} <%--JSP.User@6fa1558d --%>
body>
html>