jstl标签的使用
一、使用步骤
1、导入jar包
jstl.jar standard.jar
2、在jsp页面中添加标签
<%@taglib uri=''' prefix="" %>
二、核心标签
a、<c:if>
<c:if test="${!empty param.age}">
----以下if执行逻辑,先判断年龄是否大于18,然后将结果通过session.setAttribute("isAdult")赋给变量。----
<c:if test="${param.age > 18 }" var="isAdult" scope="session">
you are an adult
</c:if>
<c:if test = "${!isAdult}">
you are a young man
</c:if>
</c:if>
b、<c:choose> <c:when> <c:otherwise>
<c:choose>
<c:when test="${param.age > 18 }">
</c:when>
<c:otherwise>
</c:otherwise>
</c:choose>
c、<c:foreach>
---以下代码执行逻辑:从集合users中从第一个元素取,通过pageContext.setAttribute("user")赋给user变量中--
--pageContext.setAttribute("status"),status可指向对象--
<c:foreach var="user" items="${users}" varStatus="status" >
<tr class="row${status.index %2 + 1}"><td>${user.name}</td><td>${status.index}</td></tr>
</c:foreach>
d、<c:out>
<c:out value="abc" >
<c:out value="${abc}" default="not found" >
<c:out value="<table>" escapeXml="true" >,默认为true, 页面显示<table>,否则显示为空,因为是浏览器当做错误的表格了
e、<c:remove> 删除值
通常组合使用:
删除变量值:<c:remove var="rs" scope="request/......etc" >
输出值:${rs}
f、<c:set> 设置值
通常组合使用:
设置值:<c:set var="rs" scope="request/......etc" value="${1+1}" >
输出值:${rs}
g、<c:catch> 处理异常,此标签只有var一个属性,没有scope等其他属性
<c:catch var="msg">
<%
Integer.parseInt("123a")
%>
</c:catch>
输出值:${msg}
h、<c:url> 页面表单提交,页面解析后a标签自动生成一个带有sessionId的串。
作用1:用于URL重写
作用2:自动生成绝对路径,自动在路径添加应用名,所以此时可以省略掉应用名,例如:<%=request.getContextPath%>/first.jsp
<a href="<c:url value='/first.jsp' /> " var="" > click me </a>
<a href="<%= Response.encodeURL("www.baidu.com")%>">
i、<c:import> 用于包含其他页面
相当于<jsp:include>
j、<c:redirect>
作用1:生成带有sessionId地址,用于URL重写机制
作用2:重定向。等价于:<%=Response.encodeRedirectURL("first1.jsp")%>"
<c:redirect value='/first.jsp' />">,此标签自动在路径上添加应用名。
三、自定义标签
1、步骤
1)、写java类,实现SimpleTag接口或继承SimpleTagSupport
2)、复写doTag()
3)、在.tld文件中添加描述
4)、在页面中添加taglib指令
在tld文件中,要注意:
<body-content> empty</body-content> 不允许出现标签体
<body-content> scriptless</body-content> 允许出现标签体,不允许出现java代码
<body-content> jsp</body-content> 允许出现标签体,允许java代码,但简单标签不支持,即通过实现SimpleTag接口或继承SimpleTagSupport开发的标签。
<rtexprvalue>true</rtexprvalue> 意味着标签的属性值可以是EL表达式.
对应标签体有代码,要在实现方法中添加如下的代码JSPFragment jf = this.getJspBody(),如图: