6.7、JSTL和EL
1、JSTL
JSTL是jsp的一个标准标签库,封装了jsp应用的通用核心功能。它支持迭代、条件判断、XML文档操作、国际化标签、SQL标签等,另外还提供了一个框架集成JSTL的自定义标签。
-
JSTL的安装
依赖JSTL
<!--JSTL的Maven依赖--> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency>
-
核心标签库
-
导入核心标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
1、<c:out value="" > 标签 与<%= %>的作用类似 属性:value 要输出的内容,必须存在,无默认值 default 输出的默认值 escapeXml 是否忽略XML特殊字符,默认值 true 2、<c:set> 标签 用于设置变量值和对象属性,并保存。和<jsp:setProperty>标签作用类似 属性:value="" 要存储的值 target="" 对象的名字 property 对象内的属性名(如果指定了target属性,那么property属性也需要被指定。) var 存储信息的变量 scope var属性的作用域,默认为page(当前页) 3、<c:remove var="要移除的变量名称" scope="变量所属的作用域"> 标签用于移除一个变量,可以指定这个变量的作用域,若未指定,则默认为变量第一次出现的作用域。不是特别有用 4、<c:catch var="用来储存错误信息的变量">...</c:catch> 标签处理产生错误的异常状况,将错误信息储存起来。 5、<c:if test="条件" var="用于存储条件结果的变量" scope="var属性的作用域">...</c:if> 标签判断表达式的值,如果表达式的值为 true 则执行其主体内容。 6、<c:forEach items="要被循环的集合" begin="从第几个元素开始" end="到第几个结束" var="每次循环的变量名" varStatus="表示集合中每个元素的相关信息:index(索引).count(已迭代的次数).first(是否为第一个位置),last(是否为最后一个位置)" step="默认是1,表示一个一个跳,还是任意数字跳"> 循环内容 </c:forEach> 标签用于迭代循环,forEach循环 7、<c:choose> <c:when test="<boolean>"> ... </c:when> <c:when test="<boolean>"> ... </c:when> ... <c:otherwise> ... </c:otherwise> </c:choose> 标签与Java switch语句的功能一样,用于在众多选项中做出选择。 8、<c:url var="url" scope="本地网络应用程序的名称" value="URL的变量名" context="var作用域"/> 标签将URL格式化为一个字符串,然后存储在一个变量中。var属性用于存储格式化后的URL。 9、<c:param name="URL中要设置的参数的名称" value="参数的值"/> 签用于在<c:url>标签中指定参数 9、<c:redirect url="目标URL" context="地网络应用程序的名称"/> 标签通过自动重写URL来将浏览器重定向至一个新的URL 10、<c:forTokens items="要分割的内容" delims="分割符" var="迭代中的变量"> <c:out value="${num}"></c:out><br> </c:forTokens> 根据指定的分隔符来分隔内容并迭代输出 11、<c:import url="路径" var="参数的名字" scope="作用域" varRender="资源 阅读器" context="上下文" charEncoding="字符编码"/> 加载一个页面。提供了所有<jsp:include>行为标签所具有的功能
-
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>
<c:out value="测试jstl标签库的使用"/>
</h1>
<h2>set设置属性值</h2>
<jsp:useBean id="userinfo" class="com.yu.pojo.Userinfo" scope="page"/>
<jsp:setProperty name="userinfo" property="username" value="用户名"/>
<c:set target="${userinfo}" property="username" value="更改用户名"/>
用户名:<c:out value="${userinfo.username}"/>
<br/>
<h2>set设置变量,remove移除变量,并用if判断是否移除</h2>
<c:set var="test" value="变量值" scope="page"/>
变量:
<c:if test="${test != null}" >
c:out value="${test}"/>
</c:if>
<br/>
<c:remove var="test"/>
<c:if test="${test == null}" >
<c:out value="已被移除了"/>
</c:if>
<h2>测试forEach</h2>
<%
int[] ints ={1,2,3,4,5};
request.setAttribute("ints",ints);
%>
<c:forEach items="${ints}" var="num" begin="0" end="4" step="1" varStatus="s">
<p>
<c:out value="${num}"/>
(索引:<c:out value="${s.index}"/>,
迭代的次数 <c:out value="${s.count}"/>,
是否为第一个位置: <c:out value="${s.first}"/>)
</p>
</c:forEach>
<h2>测试catch</h2>
<c:catch var="error">
<c:set target="${asdf}" property="sdfa"/>
</c:catch>
<c:out value="${error}"/>
<br/>
<h2>测试choose系列标签</h2>
<c:choose>
<c:when test="${test!=null}">
<c:out value="${test}"/>
</c:when>
<c:when test="${test==null}">
<c:out value="被移除了"/>
</c:when>
<c:otherwise>
<c:out value="错误"/>
</c:otherwise>
</c:choose>
<br>
<h2>测试分割</h2>
<c:forTokens items="010,12345,678" delims="," var="num">
<c:out value="${num}"/>
<br/>
</c:forTokens>
</body>
</html>
-
格式化标签
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
1、 标签用于格式化数字,百分比,货币。 <fmt:formatNumber value="要显示的数字" type="类型(NUMBER,CURRENCY,或 PERCENT类型)" pattern="格式化模式" 0 代表一位数字 E 使用指数格式 # 代表一位数字,若没有则显示 0,前导 0 和追尾 0 不显示。 . 小数点 , 数字分组分隔符 ; 分隔格式 - 使用默认负数前缀 % 百分数 ? 千分数 ¤ 货币符号,使用实际的货币符号代替 X 指定可以作为前缀或后缀的字符 currencyCode="货币码(type='currency'时使用)" currencySymbol="货币符号 (当 type='currency'时使用)" groupingUsed="是否对数字分组 (TRUE 或 FALSE)" maxIntegerDigits="整型数最大的位数" minIntegerDigits="整型数最小的位数" maxFractionDigits="小数点后最大的位数" minFractionDigits="小数点后最小的位数" var="存储格式化数字的变量" scope="var属性的作用域"/> 2、用于使用不同的方式格式化日期。 <fmt:formatDate value="要显示的日期" type="DATE, TIME, 或 BOTH" dateStyle="FULL, LONG, MEDIUM, SHORT, 或 DEFAULT" timeStyle="FULL, LONG, MEDIUM, SHORT, 或 DEFAULT" pattern="自定义格式模式" timeZone="时区" var="存储格式化日期的变量名" scope="存储格式化日志变量的范围"/> 3、<fmt:timeZone value=""/> 指定时区
-
JSTL函数
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
1、确定一个字符串是否包含指定的子串 不忽略大小写:fn:contains() <c:if test="${fn:contains(<原始字符串>, <要查找的子字符串>)}"> ... </c:if> 忽略大小写:fn:containsIgnoreCase() 2、fn:endsWith() 函数用于确定一个字符串是否以指定后缀结尾。 <c:if test="${fn:endsWith(<原始字符串>, <要查找的子字符串>)}"> ... </c:if> 3、fn:indexOf() 函数返回一个字符串中指定子串的位置。 ${fn:indexOf(<原始字符串>,<子字符串>)} 4、fn:join() 函数将一个数组中的所有元素使用指定的分隔符来连接成一个字符串。 ${fn:join([数组], <分隔符>)} 5、fn:length() 函数返回字符串长度或集合中元素的数量。 ${fn:length(""} 6、fn:replace() 函数将字符串中所有指定的子串用另外的字符串替换。 ${fn:replace(<原始字符串>, <被替换的字符串>, <要替换的字符串>)} 7、fn:split() 函数将一个字符串用指定的分隔符分裂为一个子串数组。 ${fn:split(<待分隔的字符串>, <分隔符>)} 8、fn:startsWith() 函数用于确定一个字符串是否以指定的前缀开始。 <c:if test="${fn:startsWith(<原始字符串>, <搜索的前缀>)}"> ... </c:if> 9、fn:substring() 函数返回字符串中指定开始和结束索引的子串。 ${fn:substring(<string>, <beginIndex>, <endIndex>)} 10、fn:trim()函数将字符串两端的空白符移除。 ${fn:trim(<string>)} 11、转换大小写 大写→小写:${fn.toLowerCase(<string>)} 小写→大写:${fn:toUpperCase(<string>)}
2、EL表达式
EL表达式主要配合JSTL一起使用:主要用于获取数据、执行计算、获取web开发中的常用对象。
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%--isELIgnored="false|true" true EL表达式就会被忽略当成字符串,false将会计算EL表达式。--%>
一个简单的表达式语法如下:
${表达式}
操作符 | 描述 |
---|---|
. | 访问一个属性或者一个映射条目 |
[] | 访问一个数组或者链表的元素 |
( ) | 组织一个子表达式以改变优先级 |
+ | 加 |
- | 减或负 |
* | 乘 |
/ or div | 除 |
% or mod | 取模 |
== or eq | 测试是否相等 |
!= or ne | 测试是否不等 |
< or lt | 测试是否小于 |
> or gt | 测试是否大于 |
<= or le | 测试是否小于等于 |
>= or ge | 测试是否大于等于 |
&& or and | 测试逻辑与 |
|| or or | 测试逻辑或 |
! or not | 测试取反 |
empty | 测试是否空值 |
JSP EL允许在表达式中使用JSTL函数。这些函数必须被定义在自定义标签库中。函数的使用语法如下:
${fn:length("Get my length")} 返回字符串长度
JSP EL支持下表列出的隐含对象:
隐含对象 | 描述 |
---|---|
pageScope | page 作用域 |
requestScope | request 作用域 |
sessionScope | session 作用域 |
applicationScope | application 作用域 |
param | Request 对象的参数,字符串 |
paramValues | Request对象的参数,字符串集合 |
header | HTTP 信息头,字符串 |
headerValues | HTTP 信息头,字符串集合 |
initParam | 上下文初始化参数 |
cookie | Cookie值 |
pageContext | 当前页面的pageContext |