JSTL
JSTL就是JSP标准标签库(JavaServer Pages Standard Tag Library, JSTL)是一个定制标签库的集合,用来解决像遍历Map或集合、条件测试、XML处理,甚至数据库访问和数据操作等常见的问题。
(JSTL的使用需要有配置好两个jar包,分别是jstl.jar和standard.jar)
JSTL库
JSTL是标准标签库,但它是通过多个标签库来暴露其行为的。
区域 |
子函数 |
URI |
前缀 |
核心 |
变量支持 |
http://java.sun.com/jsp/jstl/core |
c |
流控制 |
|||
URL管理 |
|||
其他 |
|||
XML |
核心 |
http://java.sun.com/jsp/jstl/xml |
x
|
流控制 |
|||
转换 |
|||
国际化 |
语言区域 |
http://java.sun.com/jsp/jstl/fmt |
fmt |
消息格式化 |
|||
数字和日期格式化 |
|||
数据库 |
SQL |
http://java.sun.com/jsp/jstl/sql |
sql |
函数 |
集合长度 |
http://java.sun.com/jsp/jstl/functions |
fn |
在JSP页面中使用JSTL库,必须通过以下格式在JSP页面的开头作出声明:
<%@ taglib uri="以上表格中对应的uri" prefix="以上表格中对应的前缀"%>
(在开始进行学习JSTL之前需要掌握EL表达式的用法,可以参考Servlet和JSP之有关Servlet和JSP的梳理(二),但基本格式是"%{....}")
常用核心标签介绍 -----> <%@taglib uri=”http://java.sun.com/jsp/jstl/core prefix=”c”%>
JSTL的核心标签库标签共13个,从功能上可以分为4类:
表达式控制标签 |
out、set、remove、catch |
流程控制标签 |
if、choose、when、otherwise |
循环标签 |
forEach、for、Tokens |
URL操作标签 |
import、url、redirect |
表达式控制标签详解之out
① 输出常量
可在value属性中直接赋值。
<c:out value="this is our first JSTL demo"></c:out><br>
② 输出变量
变量不存在时可配合default属性输出默认值,还可以通过escapeXml控制转义字符的输出方式。
<%String username = "zhangsan";request.setAttribute("username", username); %> <c:out value="${username }"></c:out> <c:out value="${name }" default="error"></c:out><br> <c:out value=">out标签lt" escapeXml="false"></c:out><br>
表达式控制标签详解之set
① 存值到scope中
可将值以变量形式存放在指定的范围中(2种方式)。
<c:set value="today" var="day" scope="session"></c:set> <c:out value="${day }"></c:out> <c:set var="age" scope="application">eleven</c:set> <c:out value="${age }"></c:out>
② 存值到JavaBean的属性中
需要配合target属性指定对象并且通过property属性指定要赋值给对象中的哪个属性。
<jsp:useBean id="person" class="com.imooc.test.Person"></jsp:useBean>
<c:set target="${person }" property="address" > Guangzhou</c:set> <c:out value="${person.address }"></c:out>
表达式控制标签详解之remove
remove掉某个变量,var属性是必选,scope属性是可选。
<c:remove var="job" scope="session"></c:remove>
表达式控制标签详解之catch
catch标签中可以包含那些容易出错的JSTL标签(逻辑)。
<c:catch var="error"> <c:set target="aa" property="vv">dw</c:set> </c:catch> <c:out value="${error }"></c:out>
流程控制标签详解之if
同程序中的if作用相同,用来实现分支条件控制。
<c:if test=”” var=”” scope=””></c:if>
test属性用于存放判断的条件,一般使用EL表达式来编写,var指定名称用来存放判断的结果类型为true或false,scope用来存放var属性存放的范围。
<c:if test="${param.score>=90 }" var="result" scope="application"> <c:out value="恭喜,您的成绩是优秀"></c:out> </c:if>
流程控制标签详解之choose、when、otherwise
通常这三个标签被放在一起配合使用,<c:choose>标签嵌套在<c:when>和<c:otherwise>标签的外面作为他们的父标签来使用,其中choose和when标签也可以一起组合使用。
通常有以下两种语法结构:
用法一:3个标签同时使用。
<c:choose> <c:when test="${param.score>=90 && param.score<=100 }"> <c:out value="优秀"></c:out>
</c:when> <c:otherwise> <c:out value="输入的数据不符合"></c:out>
</c:otherwise>
</c:choose>
用法二:只使用choose标签和when标签。
<c:choose> <c:when test="${param.score==100 }"> <c:out value="太棒了,你是第一名"></c:out> </c:when> </c:choose>
循环控制标签详解之forEach
根据循环条件遍历集合(Collection)中的元素,var设定变量名用于存储从集合中取出元素(必须无默认值),items指定要遍历的集合(必须无默认值),begin、end用于指定遍历的起始位置和终止位置(有默认值), step指定循环的步长(有默认),varStatus通过index、count、first、last几个状态值,描述begin和end子集中的元素的状态。
常用用法1------全部遍历。
<c:forEach var=”存储当前遍历元素的变量” items=”待遍历集合”> 操作var变量表示的元素<br> </c:forEach>
常用用法2------部分遍历。
<c:forEach var=”存储当前遍历元素的变量” items=”待遍历集合” begin=”开始遍历元素的index值” end=”结束遍历的元素的index值”> 操作var变量表示的元素<br> </c:forEach>
常用用法3------部分遍历中指定步长。
<c:forEach var=”存储当前遍历元素的变量” items=”待遍历集合” begin=”开始遍历元素的index值” end=”结束遍历的元素的index值” step=”部分遍历中每次遍历的间隔元素个数”> 操作var变量表示的元素<br>
</c:forEach>
常用用法4------部分遍历时输出元素的状态。
<c:forEach var=”存储当前遍历元素的变量” items=”待遍历集合” begin=”开始遍历元素的index值” end=”结束遍历的元素的index值”
step=”部分遍历中每次遍历的间隔元素个数” varStatus=”指定一个变量用来存储当前元素的状态值”> 操作var变量表示的元素<br> </c:forEach>
以上的用法的例子如下:
<c:forEach var="fruits" items="${fruits }" begin="1" end="3" step="2" varStatus="fru"> <c:out value="${fruits }的四个属性值"></c:out><br> <c:out value="index属性:${fru.index }"></c:out><br> <c:out value="count属性:${fru.count }"></c:out><br> <c:out value="first属性:${fru.first }"></c:out><br> <c:out value="last属性:${fru.last}"></c:out><br> </c:forEach>
循环控制标签详解之forTokens
用于浏览字符串,并根据指定的字符将字符串截取, items指定被迭代的字符串,delims指定使用的分隔符,var指定用来存放遍历到的成员,begin、end用于指定遍历的起始位置和终止位置(有默认值),step指定循环的步长(有默认), varStatus通过index、count、first、last几个状态值,描述begin和end。
<c:forTokens items="010-2342413-123" delims="-" var="num"> <c:out value="${num }"></c:out> </c:forTokens>
URL操作标签详解之import
作用:
- 可以把其他静态或动态文件包含到本JSP页面。
- 同<jsp:include>的区别为:只能包含同一个web应用中的文件。而<c:import>可以包含其他web应用中的文件,甚至是网络上的资源。
- 格式如下,其中,url:被导入资源的URL路径, context:相同服务器下其他的web工程,必须以”/”开头(因为context引入的内容是webapps下的其他Web project,所以需要修改tomcat的发布路径和修改%TOMCAT_HOME%conf/context.xml的Context标签中的属性crossContext=”true”), var:以String类型存入别包含文件的内容,Scope:var变量的JSP范围, charEncoding:被导入文件的编码格式,varReader:以Reader类型存储被包含文件内容。
<c:import url=”” context=“” var=”” scope=””charEncoding=”” varReader=””></c:import>
URL操作标签详解之redirect
该标签用来实现请求的重定向,同时可以在url中加入指定的参数,url指定重定向的地址,可以是一个string类型的绝对地址或相对地址。,context用于导入其他web应用中的页面。
<c:redirect url="firstDemo.jsp"> <c:param name="username">Lily</c:param> <c:param name="password">a</c:param> </c:redirect>
URL操作标签详解之url
该标签用于动态生成一个String类型的URL,可以同<c:param>标签共同使用,也可以使用html的<a>标签实现超链接,value 表示url路径值,var 将url路径存储在变量中,scope var变量的范围。
常用函数标签介绍 -------> <%@taglib uri=”http://java.sun.com/jsp/jstl/ffunctions prefix=”fn”%>
基本的格式是:
${fn:functionName}
函数名 |
说明 |
语法 |
contains函数 |
contains函数用于测试一个字符串中是否包含指定的子字符串。如果字符串中包含该子字符串,则返回值True,否则返回False。 |
contains(String, substring) |
containsIgnoreCase函数 |
containsIgnoreCase函数与contains函数相似,但测试是区分大小写的。 |
containsIgnoreCase(String,substring) |
endsWith函数 |
endsWith函数用于测试一个字符串是否以指定的后缀结尾,其返回值是一个Boolean。 |
endsWith(String, suffix) |
escapeXml函数 |
escapeXml函数用于给String编码。这种转化与out标签将其escapeXml属性设为True一样。 |
escapeXml(String) |
indexOf函数 |
indexOf函数返回指定子字符串在某个字符串中第一次出现时的索引。如果没有找到指定的子字符串,则返回-1、 |
indexOf(String, substring) |
join函数 |
join函数将一个String数组中的所有元素都合并成一个字符串,并用指定的分隔符分开。 |
join(array, separator) |
length函数 |
length函数用于返回集合中的项目数,或者字符串中的字符数。 |
length(input) |
replace函数 |
replace函数将字符串中出现的所有beforeString用afterString替换,并返回结果。 |
replace(String, beforeSubstring, afterSubstring) |
split函数 |
split函数用于将一个字符串分离成一个子字符串数组,他的作用与join函数相反。 |
split(String, separator) |
startsWith函数 |
startsWith函数用于测试一个字符串是否以指定的前缀开头。 |
startsWith(String, prefix) |
substring函数 |
substring函数用于返回一个从指定基于0的起始索引(含)到指定基于0的终止索引的子字符串。 |
substring(String, beginIndex, endIndex) |
substringAfter函数 |
substringAfter函数用于返回指定子字符串第一次出现后的字符串部分。 |
substringAfter(String, substring) |
substringBefore函数 |
substringBefore函数用于返回指定子字符串第一次出现前的字符串部分。 |
substringBefore(String, substring) |
toLowerCase函数 |
toLowerCase函数将一个字符串转换成它的小写版本。 |
toLowerCase(String) |
toUpperCase函数 |
toUpperCase函数将一个字符串转换陈给它的大写版本。 |
toUpperCase(String) |
trim函数 |
trim函数用于删除一个字符串开头和结尾的空白。 |
trim(String) |