EL表达式和JSTL表达式(详解)
1.EL表达式:
导包:
isELIgnored="false"就可以用了,这个包是用的tomcat内置的,如果不行的话,就需要导包
<%@ page contentType="text/html;charset=UTF-8" isELIgnored="false" language="java" %>
El表达式默认对JavaBean对象的getter方法进行调用
在 JSP 中,可以使用 EL 表达式获取 User 对象的 name 属性值:
${user.name} 实际上会调用 user 对象的 getName() 方法,获取 name 属性的值。
${user.name}
当出现多个作用域key相同时:
会由小到大的范围进行找
页面作用域: ${pageScope.xx}
请求作用域: ${requestScope.xx}
会话作用域: ${sessionScope.xx}
程序作用域: ${applicationScope.xx}
EL表达式的运算:
empty运算:
在 EL 表达式中,empty 运算符用于检查一个值是否为空或为 null。它可以用于各种类型的值,包括字符串、集合、数组和对象等。empty 运算符返回一个布尔值,如果值为空或为 null,则返回 true;否则返回 false。
<%-- 使用 empty 运算符检查各种类型的值 --%>
<p>Is name empty? ${empty person.name}</p> <%-- 输出:false --%>
<p>Is age empty? ${empty person.age}</p> <%-- 输出:false --%>
<p>Is hobbies empty? ${empty person.hobbies}</p> <%-- 输出:true,因为 hobbies 属性尚未设置 --%>
中括号运算:
中括号运算用于访问集合(数组、List、Map等)类型的数据。
1.集合对象
${集合名.get[下标].属性名}
<p>第一个人:${peopleList.get[0].name},年龄:${peopleList.get[0].age}</p>
<p>第二个人:${peopleList.get[1].name},年龄:${peopleList.get[1].age}</p>
<p>第三个人:${peopleList.get[2].name},年龄:${peopleList.get[2].age}</p>
2.数组,集合,Map
${名字[下标]}
${map[key]}
数组:
<% String[] fruits = {"Apple", "Banana", "Orange"}; %>
<p>First fruit: ${fruits[0]}</p> <%-- 输出:First fruit: Apple --%>
<p>Last fruit: ${fruits[2]}</p> <%-- 输出:Last fruit: Orange --%>
list集合:
<% List<String> colors = new ArrayList<String>(); %>
<% colors.add("Red"); %>
<% colors.add("Green"); %>
<p>First color: ${colors[0]}</p> <%-- 输出:First color: Red --%>
<p>Last color: ${colors[2]}</p> <%-- 输出:Last color: Blue --%>
Map集合:
<% Map<String, Integer> scores = new HashMap<String, Integer>(); %>
<% scores.put("Alice", 85); %>
<% scores.put("Bob", 92); %>
<% scores.put("Charlie", 78); %>
<p>Alice's score: ${scores["Alice"]}</p>
<%-- 输出:Alice's score: 85 --%>
EL表达式运算符:
2.JSTL格式化标签:<fmt:formatDate>
参数:
使用指定的风格或模式格式化日期和时间
<fmt:formatDate value="${provider.creationDate}" pattern="yy-MM-dd hh:mm:ss" />
2.JSTL核心标签:
JSP标准标签库,可以嵌入在jsp页面中使用标签的形式完成业务逻辑等功能。
一共13个标签
1.表达式控制标签:out、set、remove、catch
2.流程控制标签:if、choose、when、otherwise
3.循环标签:forEach、forTokens
4.URL操作标签:import、url、redirect
使用标签时,要在前面加上
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
1. <c:out>
用来显示数据对象(字符串、表达式)的内容或结果
输出到页面
使用Java脚本的方式为:
<% out.println("hello") %> <% =表达式 %>
使用JSTL标签:
<c:out value="字符串">,例如:
2. <c:set>
用于将变量存取于 JSP 范围中或 JavaBean 属性中。
<c:set var="variableName" value="someValue" [scope="page|request|session|application"] />
设置简单值:
<c:set var="username" value="张三" scope="session" />
使用标签体设置值:message的值设为welcome
<c:set var="message" scope="request">
welcom
</c:set>
设置属性值:给user的name属性赋值,相当于setName
<c:set target="${user}" property="name" value="李四" />
3.<c:remove>
主要用来从指定的 jsp 范围内移除指定的变量。
删除session作用域中的username变量
<c:remove var="username" scope="session" />
4.<c:catch>
用来处理 JSP 页面中产生的异常,并存储异常信息
如果抛异常,则异常信息保存在变量 name1 中。
<c:catch var="name1">
容易产生异常的代码
</c:catch>
5.<c:if>
如果标签之间没有东西就会输出true或者false
<c:if test="条件1" var="name" [scope="page|request|session|application"]></c:remove>
输出布尔值
<c:if test="${person.name == '赵五'}" var="name2"></c:if>
满足条件则输出中间的内容
<c:if test="${user.age > 18}">
您已成年!
</c:if>
满足条件并且赋值到变量isAdult
<c:if test="${user.age > 18}" var="isAdult" scope="request">
<p>成年人的相关信息...</p>
</c:if>
<p>是否成年: ${isAdult}</p>
6. <c:choose> <c:when> <c:otherwise>
三个标签通常嵌套使用,第一个标签在最外层,最后一个标签在嵌套中只能使用一次
<c:set var="score">85</c:set>
<c:choose>
<c:when test="${score>=90}">
你的成绩为优秀!
</c:when>
<c:when test="${score>=70&&score<90}">
您的成绩为良好!
</c:when>
<c:when test="${score>60&&score<70}">
您的成绩为及格
</c:when>
<c:otherwise>
对不起,您没有通过考试!
</c:otherwise>
</c:choose>
7.<c:forEach>
语法:
1. items 属性:必须属性,用于指定要遍历的集合或数组。可以是 List、Set、Map、数组等。
2. var 属性: 必须属性,用于指定一个变量名,该变量将在每次迭代中保存当前元素的值。
3. varStatus 属性:可选属性,用于指定一个变量名,该变量将保存当前迭代的状态信息,包括索引、计数等。状态信息是一个 javax.servlet.jsp.jstl.core.LoopTagStatus 对象。表示下标那种
4. begin 属性:可选属性,用于指定开始迭代的索引位置,默认为 0。
5. end 属性:可选属性,用于指定结束迭代的索引位置(包含)。
6. step 属性:可选属性,用于指定每次迭代的步长,默认为 1。
<c:forEach var="name" items="Collection" varStatus="statusName"
begin="begin" end="end" step="step"></c:forEach>
<c:forEach var="provider" items="${requestScope.list}">
<tr>
<td>${provider.id}</td>
<td>${provider.proCode}</td>
<td>${provider.proName}</td>
<td>${provider.proDesc}</td>
</tr>
</c:forEach>
8.<c:forTokens>
用于浏览字符串,并根据指定的字符串截取字符串
语法:
<c:forTokens items="stringOfTokens"
delims="delimiters" [var="name" begin="begin" end="end" step="len" varStatus="statusName"]></c:forTokens>
JSTL函数:
1.fn:indexOf()
返回指定字符串在输入字符串中出现的位置
${fn:indexOf(<原始字符串>,<子字符串>)}
2.fn:join()
将数组中的元素合成一个字符串然后输出
${fn:join([数组], <分隔符>)}
3.fn:length()
返回字符串长度
${fn:length(string)}
4.fn:replace()
将输入字符串中指定的位置替换为指定的字符串然后返回
${fn:replace(<原始字符串>, <被替换的字符串>, <要替换的字符串>)}
5.fn:split()
将字符串用指定的分隔符分隔然后组成一个子字符串数组并返回
${fn:split(<带分隔符的字符串>, <分隔符>)}
6.fn:substring()
返回字符串的子集
${fn:substring(<string>, <beginIndex>, <endIndex>)}
7.fn:trim()
移除首位的空白符
${fn:trim(<string>)}