补充
EL中判断布尔值
参考How to check a boolean condition in EL?
<c:if test="${theBooleanVariable == false}">It's false!</c:if>
或者
<c:if test="${!theBooleanVariable}">It's false!</c:if>
或者
<c:if test="${not theBooleanVariable}">It's false!</c:if>
JSTL
JSTL 库安装
Apache Tomcat安装JSTL 库步骤如下:
- 从Apache的标准标签库中下载的二进包(jakarta-taglibs-standard-current.zip)。下载地址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/
- 下载jakarta-taglibs-standard-1.1.2.zip 包并解压,将jakarta-taglibs-standard-1.1.2/lib/下的两个jar文件:
standard.jar
和jstl.jar
文件拷贝到/WEB-INF/lib/
下。
在JSP页面中导入标签库
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
EL
EL变量
如果没有范围限定,寻找顺序为page、request、session、application。
如果没有找到,会输出一个为空的字符串。
EL自动类型转换
EL隐式对象
EL运算符
<% String username="zhangsan"; request.setAttribute("username", username); %>
<c:out value="${empty username} }"></c:out>
输出结果为false
。
JSTL核心标签
out标签
使用out标签输出常量
<c:out value="this is our first jstl demo"></c:out>
使用out标签输出变量
<%session.setAttribute("name", "John"); %>
<c:out value="${name}"></c:out><br>
当变量不存在时,通过default
输出默认值
<c:out value="${ password }" default="error"></c:out>
escapeXml
转义
<c:out value=">out标签<" escapeXml="false"></c:out><br>
此时的显示结果为>out标签<
set标签
set标签有两种用法
第一种,存值到scope种,有两种形式
<c:set value="today" var="day" scope="session"></c:set>
<c:out value="${day}"></c:out><br>
<c:set var="age" scope="application">eleven</c:set>
<c:out value="${age}"></c:out><br>
第二种,存值到JavaBean中
<jsp:useBean id="person" class="com.imooc.test.Person"></jsp:useBean>
<c:set target="${person}" property="nickname" value="wangwu"></c:set>
<c:out value="${person.nickname}"></c:out><br>
remove标签
remove去掉某个变量,在remove中var
属性是必选的,scope
属性是可选的。
<c:set var="firstname" value="zhang"></c:set>
<c:out value="${firstname}"></c:out>
<c:remove var="firstname"/>
catch标签
catch标签中可以包含那些容易出错的JSTL标签(逻辑)
<c:catch var="error">
<c:set target="aa" property="bb">cccc</c:set>
</c:catch>
<c:out value="${error}"></c:out>
在页面上输出的结果为:javax.servlet.jsp.JspTagException: Invalid property in <set>: "bb"
if标签
用来实现分支条件控制,常用属性
- test 用来存放判断的条件,一般使用EL表达式来编写
- var指定名称用来存放判断的结果类型为true或false
- scope用来存放var属性存放的范围
使用例子
<form action="firstDemo.jsp" method="post">
<input type="text" name="score" value="${param.score}">
<input type="submit">
</form>
<c:if test="${param.score >= 90}" var="result">
<c:out value="优秀"></c:out>
</c:if>
<c:out value="${result}"></c:out>
choose-when-otherwise标签
用法一:三个标签一起使用
<form action="firstDemo.jsp" method="post">
<input type="text" name="score" value="${param.score}">
<input type="submit">
</form>
<c:choose>
<c:when test="${param.score >=90 && param.score <=100 }">
<c:out value="优秀"></c:out>
</c:when>
<c:when test="${param.score >=80 && param.score < 90 }">
<c:out value="良好"></c:out>
</c:when>
<c:when test="${param.score >=70 && param.score < 80 }">
<c:out value="中等"></c:out>
</c:when>
<c:when test="${param.score >=60 && param.score < 70 }">
<c:out value="及格"></c:out>
</c:when>
<c:when test="${param.score < 60 }">
<c:out value="不及格"></c:out>
</c:when>
<c:otherwise>
<c:out value="输入有误"></c:out>
</c:otherwise>
</c:choose>
用法二:只使用choose和when标签
foreach标签
foreach标签根据循环条件遍历(Collection)中的元素
- var 设定变量名用于存储从集合中取出元素(必须无默认值)
- items指定要遍历的集合(必须无默认值)
- begin、end用于指定遍历的起始位置和终止位置(有默认)
- step 指定循环的步长(有默认)
- varStatus 通过index、count、first、last几个状态值,描述begin和end子集中元素的状态
用法一:全部遍历
<%
List<String> fruits = new ArrayList<String>();
fruits.add("apple");
fruits.add("orange");
fruits.add("pear");
fruits.add("banana");
request.setAttribute("fruits", fruits);
%>
<c:forEach var="fruit" items="${fruits}">
<c:out value="${fruit}"></c:out><br>
</c:forEach>
用法二:部分遍历
<c:forEach var="fruit" items="${fruits}" begin="1" end="2">
<c:out value="${fruit}"></c:out><br>
</c:forEach>
输出结果为:orange pear
用法三:部分遍历中指定步长
<c:forEach var="fruit" items="${fruits}" begin="0" end="2" step="2">
<c:out value="${fruit}"></c:out><br>
</c:forEach>
<c:out value="==============="></c:out><br>
输出结果为:apple pear
用法四:部分遍历并指定步长并输出元素状态
<c:forEach var="fruit" items="${fruits}" begin="0" end="3" varStatus="fru">
<c:out value="${fruit}的四个属性值"></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:out value="----------------------------------"></c:out><br>
</c:forEach>
<c:out value="==============="></c:out><br>
输出结果为:
apple的四个属性值
index属性值:0
count属性值:1
first属性值:true
last属性值:false
----------------------------------
orange的四个属性值
index属性值:1
count属性值:2
first属性值:false
last属性值:false
----------------------------------
pear的四个属性值
index属性值:2
count属性值:3
first属性值:false
last属性值:false
----------------------------------
banana的四个属性值
index属性值:3
count属性值:4
first属性值:false
last属性值:true
----------------------------------
forTokens标签
forTokens
标签用于浏览字符串,并根据指定的字符将字符串截取
- items 指定被迭代的字符串
- delims 指定使用的分隔符
- var 指定用来存放遍历的成员
例子:
<c:forTokens items="010-88967543-123" delims="-" var="num">
<c:out value="${num}"></c:out><br>
</c:forTokens>
输出结果为:
010
88967543
123
import标签
import
标签可以把其他静态或动态文件包含到本JSP页面
同<jsp:include>
的区别是:只能包含同一个web应用中的文件。而<c:import>
可以包含其他web应用中的文件,甚至是网路上的资源。
导入网络上的绝对路径
<c:catch var="import_error">
<c:import url="http://www.imooc.com">
</c:import>
</c:catch>
redirect标签
redirect
标签用来实现请求的重定向,同时可以在url中加入指定的参数
- url 指定重定向页面的地址,可以是一个string类型的绝对地址或相对地址
- context 用于导入其他web应用中的页面
例子
<c:redirect url="http://www.baidu.com">
</c:redirect>
url标签
该标签用于动态生成一个String类型的URL,可以同<c:param>
标签共同使用,也可以使用html的<a>
标签实现超链接。
- value 表示url路径值
- var 将url路径存储在变量中
- scope var变量的范围
例子
<c:if test="${ 1<3 }">
<c:set var="partUrl">aa</c:set>
</c:if>
<c:url value="http://localhost:8080/${ partUrl }" var="newUrl" scope="session"></c:url>
<a href="${newUrl }">新的URL</a>
函数
在使用之前,在页面中添加
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
是否包含子串
<c:out value="${fn:contains('hello word', 'hello')}"></c:out>
containsIgnoreCase
忽略大小写
<c:out value="${fn:containsIgnoreCase('hello word', 'Hello')}"></c:out>
输出xml标签, 如下输出结果为<book>1111</book>
<c:out value="${fn:escapeXml('<book>1111</book>')}"></c:out>
indexOf
出现的索引
<c:out value="${fn:indexOf('hello word', 'llo')}"></c:out>