<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
//这个是jstl核心标签库,jstl不止核心标签库,还有<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>日期格式化标签库等。
prefix="这里随便起一个名字就行了,核心标签库,大家默认的叫做c,你随意。不同uri对应的标签库里有不同的功能"
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
以上uri后面的路径实际上指向了一个xxx.tld文件。
tld文件实际上是一个xml配置文件。
在tld文件中描述了“标签”和“java类”之间的关系。
源码:
<tag>
<description>对该标签的描述</description>
<name>catch</name> 标签的名字
<tag-class>org.apache.taglibs.standard.tag.common.core.CatchTag</tag-class> 标签对应的java类。
<body-content>JSP</body-content> 标签体当中可以出现的内容,如果是JSP,就表示标签体中可以出现符合JSP所有语法的代码。例如EL表达式。
<attribute>属性
<description>
对这个属性的描述
</description>
<name>var</name> 属性名
<required>false</required> false表示该属性不是必须的。true表示该属性是必须的。
<rtexprvalue>false</rtexprvalue> 这个描述说明了该属性是否支持EL表达式。false表示不支持。true表示支持EL表达式。
</attribute>
</tag>
<c:catch var="">
JSP....
</c:catch>
<c:if test="${empty param.username}">
<h1>用户名不能为空</h1>
</c:if>
(1)test属性是必须写的,test属性支持EL表达式,test属性必须是boolean类型。
(2)if标签还有var属性,表示将var的值作为键,test属性的结果值作为值,以键值对保存到域中。
(3)if标签还有scope属性,用来指定var的存储域(page,request,session,application)。
(4)表示如果param.username为空,则执行标签中的内容。
<c:if test="${not empty param.username}">
<h1>欢迎${param.username}</h1>
</c:if>
(1)表示如果param.username不为空,则执行标签中的内容。
<c:forEach var="i" begin="1" end="10" step="1">
${i}
</c:forEach>
(1)var用来指定循环中的变量
(2)begin开始值
(3)end结束值
(4)step步长
(5)因为可以使用EL表达式,所以底层肯定将i存储到某个域中了。
<c:forEach items="${list}" var="s">
${s.id}
</c:forEach>
(1)item存储集合或数组
(2)s是迭代器对象
(3)forEach标签还有一个varStatus属性,他是一个对象,varStatus对象有count属性,用来记录循环次数,从1开始,以1递增。
<c:choose>
<c:when test="${param.age < 18}">
青少年
</c:when>
<c:when test="${param.age < 35}">
青年
</c:when>
<c:when test="${param.age < 55}">
中年
</c:when>
<c:otherwise>
老年
</c:otherwise>
</c:choose>
(1)test属性必须是boolean类型。
(2)相当于if–else语句。
//引入核心标签库
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
//可以用来格式化后端传来的Date类型的数据,格式化样式为为pattern格式,用于页面显示特定格式的日期时使用
<fmt:formatDate value="${requestScope.date1}" pattern="yyyy-MM-dd"></fmt:formatDate>
具体见:日期处理