EL表达式
1、概念:
-
Expression Language 表达式语⾔
2、作⽤:
-
替换和简化jsp⻚⾯中java代码的编写
3、基本格式:
-
${表达式}
4、注意:
jsp默认⽀持el表达式的。如果要忽略el表达式
-
1、设置jsp中page指令中:isELIgnored="true" 忽略当前jsp⻚⾯中所有的el表达式
-
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="true"%>
-
2、忽略当前这个el表达式
<%--写表达式--%> ${3 > 4} <%--忽略表达式--%> \${3 > 4}
5、EL表达式的使用:
1、运算:(判空重点)
-
运算符:
-
a、算数运算符:+、-、*、/(div)除、%(mod)取余
-
b、比较运算符:>、<、>=、<=、==、!=
-
c、逻辑运算符:&&(and) ||(or) !(not)
-
d、空运算符:empty
-
功能:⽤于判断字符串、集合、数组对象是否为null或者⻓度是否为0
-
${empty list}:判断字符串、集合、数组对象是否为null或者⻓度为0
-
${not empty str}:表示判断字符串、集合、数组对象是否不为null 并且 ⻓度>0<%
-
-
<h3>算数运算符</h3> ${3 - 4}<br> ${3 / 4}<br> ${3 div 4}<br> ${3 % 4}<br> ${3 mod 4}<br> <h3>比较运算符</h3> ${3 == 4}<br> <h3>逻辑运算符</h3> ${3 > 2 && 3 < 4}<br> ${3 > 2 or 3 < 4}<br> <h3>空运算符</h3> <% String str = ""; request.setAttribute("str",str); List list = new ArrayList(); request.setAttribute("list",list); %> ${not empty str} ${not empty list}
2、获取值
-
1、EL表达式只能从域对象中获取值
-
2、语法:
-
1、 ${域名称.键名}:从指定域中获取指定键的值
-
域名称:
-
1、pageScope --> pageContext
2、 requestScope --> request
3、sessionScope --> session
4、applicationScope --> application(ServletContext)
-
-
举例:在request域中存储了name=张三
-
获取:${requestScope.name}
-
-
2、${键名}:表示依次从最⼩的域中查找是否有该键对应的值,直到找到为⽌。
-
pageScope < requestScope < sessionScope < applicationScope
-
-
<% pageContext.setAttribute("v1","李白"); request.setAttribute("v2","王五"); session.setAttribute("v3","张飞"); application.setAttribute("v4","妮妮"); %> <h3>EL表达式获取值</h3> ${pageScope.v1} ${requestScope.v2} ${sessionScope.v3} ${applicationScope.v4}
3、获取对象、List集合、Map集合的值
1、获取对象:${域名称.键名.属性名}
-
本质上会去调⽤对象的getter⽅法
2、List集合:${域名称.键名[索引]}
User代码:
package com.admin; public class User { private long id; private String username; private String password; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
对象的jsp代码:
<% User user = new User(); user.setId(12); user.setUsername("list"); user.setPassword("123456"); request.setAttribute("s",user); %> ${s.id}<br> ${s.username}<br> ${s.password}
list集合的jsp代码
<% ArrayList<String> arrayList = new ArrayList<>(); arrayList.add("张三"); arrayList.add("李四"); arrayList.add("王五"); request.setAttribute("a",arrayList); %> ${a}
6、获取虚拟路径
el表达式中有11个隐式对象
pageContext:
获取jsp其他⼋个内置对象
${pageContext.request.contextPath}:动态获取虚拟路径
JSTL
1、介绍
-
1、Jsp standrad Tag Lib:JSP中标准的标签工具类库。
-
2、是suN公司提供
-
组成:
-
1)核心标签:Java在jsp上基本功能进行封装ifwhile
-
2)sql标签: JDBC在Js2上使用功能
-
3)xml标签:DOM4J在JSz使用功能
-
4)rormat标签:JSP文件格式转换
-
2、使用步骤
-
1、导入jstl依赖的jar包: jstl.jar standrad.jar
-
2、在jsp文件中引用 taglib 指令:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
3、常⽤的JSTL标签
1、set标签:
-
作用:在jsp文件上设置域对象中共享数据
-
使用:
<c:set scope="session" var="key" value="12">
-
代替:
<% session.setAttribute("key","12") %>
-
属性:
-
scope:指定操作的域对象别名 (scope="application/session/request/page")
-
var:声明域对象中关键字
-
value:存入的共亨数
-
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <h1>set标签使用</h1> <c:set scope="application" var="id" value="1" /> <c:set scope="session" var="name" value="zs" /> <c:set scope="request" var="age" value="27" /> <c:set scope="page" var="ah" value="lq" /> ${applicationScope.id} ${sessionScope.name} ${requestScope.age} ${pageScope.ah}
2、if 标签:
if标签相当于java代码中的if语句:
【作用】:在jsp文件上控制哪些内容可以写入到响应体。
【使用】:test 是必须属性,接受boolean表达式,如果为true则会显示if标签内容,若为false,则不显示标签体内容,
一般情况下test属性值会结合EL表达式一起使用
<c:if test="通过EL表达式进行判断"> 内容 </c:if>
例:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <h1>if标签:</h1> <c:set scope="request" var="age" value="12"/> <c:if test="${requestScope.age >= 18}"> <font color="red"><h1>欢迎光临</h1></font> </c:if> <c:if test="${requestScope.age <= 18}"> <font color="red"><h1>您的年龄不够哦!!!!</h1></font> </c:if>
3、choose标签:
【作用】:在JSP文件上实现多分支选择判断,决定哪一个内容能写入到响应体,在页面显示,及起到一个java中的switch语句的作用;
【使用】:
-
使用choose标签声明 相当于switch声明
-
使用when标签做判断 相当于case(test 是必须属性,接受boolean表达式,一般情况下test属性值会结合EL表达式一起使用)
-
otherwise标签 相当于default
<c:choose> <c:when test="EL表达式判断">内容1</c:when> <c:when test="EL表达式判断">内容2</c:when> </c:choose>
例题:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="C" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <font color="#663399"> <h1>choose标签</h1> </font> <C:set scope="request" var="number" value="8"/> <c:choose> <c:when test="${requestScope.number == 1}"> 星期一 </c:when> <c:when test="${requestScope.number == 2}"> 星期二 </c:when> <c:when test="${requestScope.number == 3}"> 星期三 </c:when> <c:when test="${requestScope.number == 4}"> 星期四 </c:when> <c:when test="${requestScope.number == 5}"> 星期五 </c:when> <c:when test="${requestScope.number == 6}"> 星期六 </c:when> <c:when test="${requestScope.number == 7}"> 礼拜天 </c:when> <c:otherwise> 数字输入错误!!!! </c:otherwise> </c:choose>
4、forEach标签:
【作用】:循环遍历,相当于java语句中的for循环语句;
a、第一种使用方法:
-
forEach各个属性代表的含义:
-
var="声明循环变量的名称"(就是java代码中 普通for 循环中的 i)
-
begin="初始化循环变量 "(就是java代码中 普通for 循环中的 int i=1)
-
end="循环变量可以接受的最大值"(就是java代码中 普通for 循环中的 i < 5;)
-
stap="循环变量执行递增(是1),还是递减(是 -1)"(就是java代码中 普通for 循环中的 i++、i--)
-
<c:forEach var="i" begin="1" end="5" step="1"> 开心${pageScope.i}次<br> </c:forEach>
-
例题:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <div style="color: darkgreen"> <h1>forEach标签</h1> </div> <select> <c:forEach var="i" begin="1" end="5" step="1"> <option> 第${pageScope.i}页 </option> </c:forEach> </select>
b、第二种使用方法:
创建的集合需要先加入到域中 <c:forEach items="通过EL表达式获取域对象集合" var="声明循环变量"> ${循环变量.对象属性名} </c:forEach>
例题:(list集合)
<%@ page import="java.util.ArrayList" %> <%@ page import="com.admin.User" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@include file="forEach.jsp"%> <div style="color: darkgreen"> <h2> 第二种方法: </h2> <h3>遍历集合</h3> </div> <% User zs = new User(1,"zs","123"); User ls = new User(2, "ls", "345"); ArrayList<User> user = new ArrayList<>(); user.add(zs); user.add(ls); request.setAttribute("u",user); for (User user1 : user) { %> <table border="3"> <tr> <td>id</td> <td>用户名</td> <td>密码</td> </tr> <tr> <td><%=user1.getId()%></td> <td><%=user1.getUsername()%></td> <td><%=user1.getPassword()%></td> </tr> </table> <% } %> <hr> <table border="3"> <tr> <td>id</td> <td>用户名</td> <td>密码</td> </tr> <c:forEach items="${u}" var="stu"> <tr> <td>${stu.id}</td> <td>${stu.username}</td> <td>${stu.password}</td> </tr> </c:forEach> </table>
例题:(map集合)
<%@ page import="com.admin.User" %> <%@ page import="java.util.Map" %> <%@ page import="java.util.HashMap" %><%-- Created by IntelliJ IDEA. User: HP Date: 2021/8/20 Time: 19:53 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <div style="border: red"> <h1>Map集合遍历</h1> </div> <% User zs = new User(1, "zs", "123"); User ls = new User(2, "ls", "456"); User ww = new User(3, "ww", "789"); Map map=new HashMap(); map.put("一班",zs); map.put("三班",ls); map.put("二班",ww); request.setAttribute("maps",map); %> <table border="4" > <tr> <td>id</td> <td>班级</td> <td>用户名</td> <td>密码</td> </tr> <c:forEach items="${maps}" var="m"> <tr> <td>${m.value.id}</td> <td>${m.key}</td> <td>${m.value.username}</td> <td>${m.value.password}</td> </tr> </c:forEach> </table>
5、练习
需求:在request域中有⼀个存有User对象的List集合。需要使⽤jstl+el将list集合数据展示到jsp⻚⾯的表格table中
<%@ page import="com.admin.User" %> <%@ page import="java.util.List" %> <%@ page import="java.util.ArrayList" %> <%-- 练习: 需求:在request域中有⼀个存有User对象的List集合。需要使⽤jstl+el将list集合数据展示到jsp⻚⾯的表格table中 --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <div style="border: red"> <h3>需求:在request域中有⼀个存有User对象的List集合。需要使⽤jstl+el将list集合数据展示到jsp⻚⾯的表格table中</h3> </div> <% User zs = new User(1, "zs", "187"); User ls = new User(2, "ls", "177"); User ww = new User(3, "ww", "166"); User ss = new User(4, "ss", "160"); List list=new ArrayList(); list.add(zs); list.add(ls); list.add(ww); list.add(ss); //将集合放到域中 session.setAttribute("arraylist",list); %> <table border="3"> <tr> <td>id</td> <td>姓名</td> <td>身高</td> </tr> <c:forEach items="${sessionScope.arraylist}" var="array"> <tr> <td>${array.id}</td> <td>${array.username}</td> <td>${array.password}</td> </tr> </c:forEach> </table>