EL表达式
jsp的核心语法:jsp表达式<%= %> 和jsp脚本<% %>
使用EL表达式替换掉jsp表达式。
EL表达式作用:向浏览器输出域对象中的变量或表达式计算的结果。
语法:${域对象中的变量或表达式}
1.输出基本数据类型变量
1.1 从4个域对象中获取
${域对象中的变量 }
例如:
<body> <% String name1 = "变量中的数据"; pageContext.setAttribute("name2", "page域中的数据"); pageContext.setAttribute("name3", "request域中的数据",pageContext.REQUEST_SCOPE); session.setAttribute("name4", "session域中的数据"); application.setAttribute("name5", "application域中的数据"); %> <hr/> jsp表达式:<%=pageContext.findAttribute("name1") %><br/> jsp表达式:<%=pageContext.findAttribute("name2") %><br/> jsp表达式:<%=pageContext.findAttribute("name3") %><br/> jsp表达式:<%=pageContext.findAttribute("name4") %><br/> jsp表达式:<%=pageContext.findAttribute("name5") %><br/> <hr/> EL表达式替换jsp表达式:${name1}<br/> EL表达式替换jsp表达式:${name2}<br/> EL表达式替换jsp表达式:${name3}<br/> EL表达式替换jsp表达式:${name4}<br/> EL表达式替换jsp表达式:${name5}<br/> <hr/> <%-- ${name3} 等价于 pageContext.findAttribute(name3); 自动在四个域中搜索数据, 查询顺序: page域 -> request域 -> session域- > context域(application域) --%> </body>
1.2指定域对象中获取
${域.变量}
例如:
<body> <% String name1 = "变量中的数据"; pageContext.setAttribute("name2", "page域中的数据"); pageContext.setAttribute("name3", "request域中的数据",pageContext.REQUEST_SCOPE); session.setAttribute("name4", "session域中的数据"); application.setAttribute("name5", "application域中的数据"); %> <hr/> EL表达式指定域获取:${pageScope.name2 }<br/> EL表达式指定域获取:${requestScope.name3 }<br/> EL表达式指定域获取:${sessionScope.name4 }<br/> EL表达式指定域获取:${applicationScope.name5 }<br/> <hr/> <%-- ${requestScope.name3 } 等价于 pageContext.getAttribute(name3, pageContext.REQUEST_SCOPE) --%> jsp表达式指定域获取:<%=pageContext.getAttribute("name2", pageContext.PAGE_SCOPE) %><br/> jsp表达式指定域获取:<%=pageContext.getAttribute("name3", pageContext.REQUEST_SCOPE) %><br/> jsp表达式指定域获取:<%=pageContext.getAttribute("name4", pageContext.SESSION_SCOPE) %><br/> jsp表达式指定域获取:<%=pageContext.getAttribute("name5", pageContext.APPLICATION_SCOPE) %><br/> </body>
整体Demo:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" session="true"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>My JSP 'el.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <% String name1 = "变量中的数据"; pageContext.setAttribute("name2", "page域中的数据"); pageContext.setAttribute("name3", "request域中的数据",pageContext.REQUEST_SCOPE); session.setAttribute("name4", "session域中的数据"); application.setAttribute("name5", "application域中的数据"); %> <hr/> jsp表达式:<%=pageContext.findAttribute("name1") %><br/> jsp表达式:<%=pageContext.findAttribute("name2") %><br/> jsp表达式:<%=pageContext.findAttribute("name3") %><br/> jsp表达式:<%=pageContext.findAttribute("name4") %><br/> jsp表达式:<%=pageContext.findAttribute("name5") %><br/> <hr/> EL表达式替换jsp表达式:${name1}<br/> EL表达式替换jsp表达式:${name2}<br/> EL表达式替换jsp表达式:${name3}<br/> EL表达式替换jsp表达式:${name4}<br/> EL表达式替换jsp表达式:${name5}<br/> <hr/> <%-- ${name3} 等价于 pageContext.findAttribute(name3); --%> EL表达式指定域获取:${pageScope.name2 }<br/> EL表达式指定域获取:${requestScope.name3 }<br/> EL表达式指定域获取:${sessionScope.name4 }<br/> EL表达式指定域获取:${applicationScope.name5 }<br/> <hr/> <%-- ${requestScope.name3 } 等价于 pageContext.findAttribute(name3); --%> jsp表达式指定域获取:<%=pageContext.getAttribute("name2", pageContext.PAGE_SCOPE) %><br/> jsp表达式指定域获取:<%=pageContext.getAttribute("name3", pageContext.REQUEST_SCOPE) %><br/> jsp表达式指定域获取:<%=pageContext.getAttribute("name4", pageContext.SESSION_SCOPE) %><br/> jsp表达式指定域获取:<%=pageContext.getAttribute("name5", pageContext.APPLICATION_SCOPE) %><br/> </body></html>
Student类:
package com.cn.entity;public class Student { private int id; private String name1;//注意这里是name1 private char sex; private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() {//注意这里是getName return name1; } public void setName(String name) { this.name1 = name; } public char getSex() { return sex; } public void setSex(char sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Student(int id, String name, char sex, int age) { super(); this.id = id; this.name1 = name; this.sex = sex; this.age = age; }}
效果:
2.输出对象的属性值
${对象.XXXX}
.XXXX相当于 .getXXXX()方法
注意:
其中,XXXX为对象对应类中属性的get方法getXXXX()的XXXX的小写,而不是属性名。
否则会出现如下异常:
例如:
<%@ page language="java" import="java.util.*, com.cn.entity.Student" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>My JSP 'el2.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <% //保存对象数据 Student stu = new Student(001, "木丁西", '男', 24); //放入域对象中 pageContext.setAttribute("stu", stu); %> <%-- 使用el表达式获取对象--%> 学生对象:${stu}<br/> 编号:${stu.id}<br/><%--注意这里的.id,并不是调用属性(Student类中,属性私有的private),而是调用get方法getId()--%> 姓名:${stu.name }<br/> 性别:${stu.sex }<br/> 年龄:${stu.age }<br/> <hr/> <h3>等价于:</h3> 学生对象:<%=(Student)pageContext.getAttribute("stu") %><br/> 编号:<%=((Student)pageContext.getAttribute("stu")).getId() %><br/> 编号:<%=((Student)pageContext.getAttribute("stu", pageContext.PAGE_SCOPE)).getId() %><br/> 编号:<%=((Student)pageContext.getAttribute("stu", pageContext.PAGE_SCOPE)).getName() %><br/> 姓名:<%=((Student)pageContext.getAttribute("stu")).getName() %><br/> 性别:<%=((Student)pageContext.getAttribute("stu")).getSex() %><br/> 年龄:<%=((Student)pageContext.getAttribute("stu")).getAge() %><br/> <%-- ${stu.id} 等价于 <%=((Student)pageContext.getAttribute("stu", pageContext.PAGE_SCOPE)).getId() %> --%> </body></html>
效果如下:
3.输出集合对象
${List集合对象名}
获取List集合中的第index个对象:
${List集合对象名[索引值] } 注意:这里的中括号[索引值]等价于调用list.get(索引值)方法
(假如List集合中存储的值为对象)获取List集合中的第index个对象中的属性值:${List集合对象名[index].xxx} 注意:注意这里的.XXX
,并不是
调用第index个对象中的属性名
,而是调用该对象的get方法getXxx()中Xxx的小写xxx
获取Map集合中对应key值的value值:
${Map集合对象名[key] }
注意:[key]相当于调用了get(key)方法
(假如Map集合中存储的值为对象)
获取Map集合中key值对应的的对象中的属性值:${Map集合对象名[key].xxx}
Demo如下:
<%@ page language="java" import="java.util.*, com.cn.entity.Student" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>My JSP 'el3.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <hr/><hr/> <h1>EL表达式获取List集合对象</h1> <% //创建Student对象 Student stu1 = new Student(1, "木丁西", '男', 24); Student stu2 = new Student(2, "小龙女", '女', 14); Student stu3 = new Student(3, "张馨予", '女', 28); Student stu4 = new Student(4, "刘先生", '男', 35); //创建集合对象 List<Student> list = new ArrayList(); list.add(stu1); list.add(stu2); list.add(stu3); list.add(stu4); //保存集合对象到page域对象中。 pageContext.setAttribute("list", list); %> <%-- 使用EL表达式获取集合对象 --%> EL表达式获取集合对象:${list }<br/> EL表达式获取集合中的第1个对象:${list[0] }<br/> <%-- 注意这里的中括号[]等价于调用get(索引值)方法 --%> --|EL表达式获取集合中的第1个对象中的属性值:${list[0].id }-${list[0].name }-${list[0].sex }-${list[0].age }<br/> <%-- 注意这里的.id,并不是调用属性(Student类中,属性私有的private),而是调用get方法getId()中Id的小写 --%> EL表达式获取集合中的第2个对象:${list[1] }<br/> --|EL表达式获取集合中的第1个对象中的属性:${list[1].id }-${list[1].name }-${list[1].sex }-${list[1].age }<br/> EL表达式获取集合中的第3个对象:${list[2] }<br/> --|EL表达式获取集合中的第1个对象中的属性:${list[2].id }-${list[2].name }-${list[2].sex }-${list[2].age }<br/> EL表达式获取集合中的第4个对象:${list[3] }<br/> --|EL表达式获取集合中的第1个对象中的属性:${list[3].id }-${list[3].name }-${list[3].sex }-${list[3].age }<br/> <hr/> <h3>上面的等价于</h3> jsp表达式获取集合对象: <% List<Student> stuList= (List<Student>)pageContext.getAttribute("list", pageContext.PAGE_SCOPE); %><%= stuList %><br/> jsp表达式获取集合中的第1个对象:<%= stuList.get(0) %><br/> --|jsp表达式获取集合中的第1个对象中的属性值:<%=stuList.get(0).getId()%>-<%=stuList.get(0).getName()%>-<%=stuList.get(0).getSex()%>-<%=stuList.get(0).getAge()%><br/> jsp表达式获取集合中的第2个对象:<%= stuList.get(1) %><br/> --|jsp表达式获取集合中的第2个对象中的属性值:<%=stuList.get(1).getId()%>-<%=stuList.get(1).getName()%>-<%=stuList.get(1).getSex()%>-<%=stuList.get(1).getAge()%><br/> jsp表达式获取集合中的第3个对象:<%= stuList.get(2) %><br/> --|jsp表达式获取集合中的第3个对象中的属性值:<%=stuList.get(2).getId()%>-<%=stuList.get(2).getName()%>-<%=stuList.get(2).getSex()%>-<%=stuList.get(2).getAge()%><br/> jsp表达式获取集合中的第4个对象:<%= stuList.get(3) %><br/> --|jsp表达式获取集合中的第4个对象中的属性值:<%=stuList.get(3).getId()%>-<%=stuList.get(3).getName()%>-<%=stuList.get(3).getSex()%>-<%=stuList.get(3).getAge()%><br/> <hr/><hr/> <h1>EL表达式获取Map集合对象</h1> <% //创建Map集合对象 Map<String, Student> map = new HashMap(); //添加数据到 Map结合中 map.put("001", stu1); map.put("002", stu2); map.put("003", stu3); map.put("004", stu4); //保存集合对象到page域对象中。 pageContext.setAttribute("map", map); %> <%-- 使用EL表达式获取Map集合对象 --%> EL表达式获取集合对象:${map }<br/> EL表达式获取集合中的第1个对象:${map["001"]}<br/> --|EL表达式获取集合中的第1个对象中的属性:${map["001"].id }-${map["001"].name }-${map["001"].sex }-${map["001"].age }<br/> EL表达式获取集合中的第2个对象:${map["002"]}<br/> --|EL表达式获取集合中的第2个对象中的属性:${map["002"].id }-${map["002"].name }-${map["002"].sex }-${map["002"].age }<br/> EL表达式获取集合中的第3个对象:${map["003"]}<br/> --|EL表达式获取集合中的第3个对象中的属性:${map["003"].id }-${map["003"].name }-${map["003"].sex }-${map["003"].age }<br/> EL表达式获取集合中的第4个对象:${map["004"]}<br/> --|EL表达式获取集合中的第4个对象中的属性:${map["004"].id }-${map["004"].name }-${map["004"].sex }-${map["004"].age }<br/> <hr/> <h3>上面的等价于</h3> jsp表达式获取集合对象: <% Map<String, Student> stuMap = (Map<String, Student>)pageContext.getAttribute("map", pageContext.PAGE_SCOPE); %><%= stuMap %><br/> jsp表达式获取集合中的第1个对象:<%= stuMap.get("001") %><br/> --|jsp表达式获取集合中的第1个对象中的属性值:<%=stuMap.get("001").getId()%>-<%=stuMap.get("001").getName()%>-<%=stuMap.get("001").getSex()%>-<%=stuMap.get("001").getAge()%><br/> jsp表达式获取集合中的第2个对象:<%= stuMap.get("002") %><br/> --|jsp表达式获取集合中的第2个对象中的属性值:<%=stuMap.get("002").getId()%>-<%=stuMap.get("002").getName()%>-<%=stuMap.get("002").getSex()%>-<%=stuMap.get("002").getAge()%><br/> jsp表达式获取集合中的第3个对象:<%= stuMap.get("003") %><br/> --|jsp表达式获取集合中的第3个对象中的属性值:<%=stuMap.get("003").getId()%>-<%=stuMap.get("003").getName()%>-<%=stuMap.get("003").getSex()%>-<%=stuMap.get("003").getAge()%><br/> jsp表达式获取集合中的第4个对象:<%= stuMap.get("004") %><br/> --|jsp表达式获取集合中的第4个对象中的属性值:<%=stuMap.get("004").getId()%>-<%=stuMap.get("004").getName()%>-<%=stuMap.get("004").getSex()%>-<%=stuMap.get("004").getAge()%><br/> </body></html>
效果如下:
4. 表达式计算
4.1 算数表达式
4.2 比较运算
4.3 逻辑运算
4.4 判空(null 或 空字符串)
Demo如下:
<%@ page language="java" import="java.util.*, com.cn.entity.Student" pageEncoding="UTF-8" session="true"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>My JSP 'el.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <%-- EL表达式计算 --%> <%-- 1.算数表达式 --%> 10+5:${10+5 }<br/> 10-5:${10-5 }<br/> 10*5:${10*5 }<br/> 10/5:${10/5 }<br/> <hr/> <%-- 2.比较运算 > < >= <= == != --%> 10>5:${10>5 }<br/> 10<5:${10<5 }<br/> 10==5:${10==5 }<br/> 10!=5:${10!=5 }<br/> <hr/> <%-- 3.逻辑运算 && || ! --%> true && true - ${true && true }<br/> true && false - ${true && false }<br/> true || true - ${true || true }<br/> true || false - ${true || false }<br/> !true - ${!true }<br/> !false - ${!false }<br/> <hr/> <%-- 4.判空(null 或 空字符串) empty 变量 --%> <% //String name = "木丁西"; //String name = ""; String name = null; pageContext.setAttribute("name", name); %> name是否为空:${name == null }<br/> name是否为空:${name == "" }<br/> name是否为空或null:${name == null || name == "" }<br/> <%-- 简化写法 --%> name是否为空或null:${empty name}<br/> </body></html>
效果如下: