Struts(4)jstl标签技术基本介绍

本文介绍了JSP标准标签库(JSTL)的基本概念及其如何简化Web应用开发过程。涵盖JSTL的引入方法、常见标签如<c:out>、<c:set>的使用技巧,以及条件和迭代标签的应用实例。

1 jstl介绍

jstl(jsp standard tag libaray) jsp标准标签库,用于替换大量的<% %>Java片段等
②为什么需要jstl?
- 在应用程序服务器之间提供统一的接口,从而提供了web应用在不同服务器的移植
- 简化jsp与web应用程序的开发
- 减少jsp中java片段的代码,可以达到jsp页面中没有任何java代码,代码更加简洁
- 提高jsp开发速度,缩短开发周期

2 jstl 常用标签

①引入jstl标签库

<!-- 引入jstl标签库 -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

uri内容参考:
这里写图片描述
standard.jar下META-INF文件夹下c.tld文件中<uri>http://java.sun.com/jsp/jstl/core</uri>
<c:out>用于把计算结果输出到JSPWriter对象。
<c:out>中的value属性的值,既可以是具体的字符串,也可以是表达式;
如果${username}不存在,就会输入指定的default的值;
escapeXml="false"如果${username}表达式包含html代码,将不会过滤,即按照html格式显示。

<!-- 直接输出字符串 -->
<c:out value="hello world jstl"></c:out><br>
<!-- 输出reqeust/session/application/pageContext域对象的数据 
    对于相同属性名,c:out的优先级为:pageContext > request > session > application
    default指定没有找到值的情况下的默认返回值
    对于 pageContext.setAttribute("username", "你好 <a href='pageContext'>sohu.com</a>");
    escapeXml  false: html标签样式展示;    true:以字符串形式展示
-->
<c:out value="${username}" default="没有值" escapeXml="false"></c:out><br>
<!-- 输出对象  -->
<c:out value="${user1.name}"></c:out>
<!-- 也可以直接输出  EL表达式 -->
${user1.age}  ${user1.age+200}

<c:set>用于在某个范围中设置某个值

<c:set var="abc" value="中国,北京" scope="request"></c:set><br>
<%= request.getAttribute("abc") %>

<c:remove>用于删除某个变量或是属性

<c:remove var="abc" scope="request" />

<c:catch>用于捕获嵌套在它内部的标签抛出的异常

<c:catch var="myexception">
    <% int i = 8/0; %>
</c:catch>
<c:out value="${ myexception }"></c:out>
<c:out value="${ myexception.message }"></c:out>   

3 jstl 条件标签

<c:if>用于进行条件判断,如果它的test属性为true,那么就去处理它的body

<c:set var="abc" value="hello" scope="request"></c:set><br>
<c:if test="${abc=='hello'}">
    OK!
</c:if>
------------------------
<c:set var="abc" value='12' scope="request"></c:set><br>
<c:if test="${abc>2 and abc<22}">
    OK!
</c:if>

<c:choose>用于进行条件选择,它和<c:when><c:otherwise>一起使用
<c:when>代表了<c:choose>的一个条件分支,使用它的限制条件:
- 必须以<c:choose>作为它的父标签
- 必须在<c:otherwise>之前出现
<c:otherwise>代表了<c:choose>最后一个分支,使用它的限制条件:
- 必须以<c:choose>作为它的父标签
- 必须在<c:choose>的最后分支出现

<c:choose>
    <c:when test="${abc<3}">
        <font color="red">年龄小于3岁</font>
    </c:when>
    <c:when test="${abc<8}">
        <font color="blue">年龄小于8岁</font>
    </c:when>
    <c:otherwise>
        <font color="cyan">年龄无效</font>
    </c:otherwise>
</c:choose>

4 jstl 迭代标签

<c:foreach>在一个Collection中迭代计算他的body内容,或是重复迭代固定的次数

<%
    for(User user: users) {
        out.println(user.getName() + " " + user.getAge());          
    }
 %>
<br>
<c:forEach items="${ users }" var="user">
    <c:out value="${ user.name }"></c:out>
    <c:out value="${ user.age }"></c:out><br>
</c:forEach>
------迭代固定次数
<c:forEach var="i" begin="1" end="10" step="3">
    <c:out value="${ i }"></c:out><br>
</c:forEach>

<c:forTokens>分割字符串

<c:forTokens items="12;34;你好;ddd" delims=";" var="temp">
    ${temp }   
</c:forTokens>

5 jstl 细节补充

<c:forEach>对map的迭代

<c:forEach items="${ users }" var="user">
    <c:out value="${ user.key }"></c:out>
    <c:out value="${ user.value.name }"></c:out>
    <c:out value="${ user.value.age }"></c:out><br>
</c:forEach>

<c:forEach>对set的迭代(与ArrayList一样)

<c:forEach items="${ users }" var="user">
    <c:out value="${ user.name }"></c:out>
    <c:out value="${ user.age }"></c:out><br>
</c:forEach>

<c:if>判断Collection等是否为空

<c:if test="${!empty users }"></c:if>

④EL表达式中的三目运算符

<c:if test="${2>1?true:false }">
    OK!
</c:if>

6 jstl url相关标签

<c:import>``<c:param>
将aaa.jsp内容引入当前jsp,并携带参数:

<c:import url="/WEB-INF/aaa.jsp">
    <c:param name="name" value="hello"></c:param>
</c:import>
--------取出参数-----
<%=request.getParameter("name") %>
${param.name }

<c:redirect>对map的迭代
直接重定向到http://www.baidu.com<c:redirect url="http://www.baidu.com"></c:redirect>

stl的配置方法:<br>1、将jstl.jar和standard.jar拷贝到web-inf/lib下即可(如只使用EL表达式,无需引用这两个包)<br><br>2、在jsp页面头部引入taglib方法如下:<br> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core " %><br> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt " %> <br> <%@ taglib prefix="my" uri="http://www.bjsxt.com/functions " %><br> <br> 注意:JSTL必须在能够支持J2ee1.4/servlet2.4/jsp2.0版本以上的容器才能运行,这个环境配置<br> 是目前最常用的版本<br> <br>3、JSTL重点<br> * EL表达式的用法 <br> * c:out标签<br> * c:if/c:choose/c:when/c:otherwise标签<br> * c:forEach标签<br> * fmt:formatDate标签<br> * fmt:formatNumber标签<br> * 函数库的使用<br> * 自定义函数库<br> * 定义类和方法(必须定义为public static)<br> * 编写tld文件,并且将tld文件放到WEB-INF下<br> * 在jsp中使用taglib指令引入自定义标签库<br> * 直接使用即可<br><br> <br><br> <br><br><h1>测试JSTL核心标签库</h1><br> <hr><br> <li>测试c:out</li><br><br> a(default)=<c:out value="${a}"/><br><br> a(el)=${a }<br><br> b(defalt)=<c:out value="${b}" default="b value"/><br><br> bj(default)=<c:out value="${bj}"/><br><br> bj(escapeXml=true)=<c:out value="${bj}" escapeXml="true"/><br><br> bj(escapeXml=false)=<c:out value="${bj}" escapeXml="false"/><br><br> <p><br> <li>条件控制标签c:if</li><br><br> <c:if test="${v1 lt v2}" var="v"><br> boolean value=${v } &nbsp&nbsp v1 小于 v2<br> </c:if><br> <c:if test="${v1 gt v2}" var="v"><br> boolean value=${v } &nbsp&nbsp v1 大于 v2<br> </c:if><br> <li>条件控制标签c:choose,c:when,c:otherwise</li><br><br> <c:choose><br> <c:when test="${v1 gt v2}"><br> v1 大于 v2<br> </c:when><br> <c:otherwise><br> v1 小于 v2<br> </c:otherwise><br> </c:choose><br> <br><br> <c:choose><br> <c:when test="${empty valuelist}"><br> valuelist为空<br> </c:when><br> <c:otherwise><br> valuelist不为空<br> </c:otherwise><br> </c:choose><br> <p><br> <li>循环控制标签:c:foreach</li><br><br> <table border="1"><br> <tr><br> <td>姓名</td><br> <td>年龄</td><br> <td>所属组</td><br> </tr><br> <c:forEach var="user" items="${userlist}"><br> <tr><br> <td><c:out value="${user.username}"/></td><br> <td><c:out value="${user.age}"/></td><br> <td><c:out value="${user.relatedGroup.name}"/></td><br> </tr><br> </c:forEach><br> </table><br> <p><br> <li>循环控制标签:c:foreach varstatus的用法</li><br><br> <table border="1"><br> <tr><br> <td>姓名</td><br> <td>年龄</td><br> <td>所属组</td><br> </tr><br> <c:forEach var="user" items="${userlist}" varStatus="vs"><br> <c:choose><br> <c:when test="${ vs.count % 2 == 0}"><br> <tr bgcolor="red"><br> </c:when><br> <c:otherwise><br> <tr><br> </c:otherwise><br> </c:choose><br> <td><c:out value="${user.username}"/></td><br> <td><c:out value="${user.age}"/></td><br> <td><c:out value="${user.relatedGroup.name}"/></td><br> </tr><br> </c:forEach><br> </table><br> <p><br> <li>循环控制标签:c:foreach</li><br><br> <table border="1"><br> <tr><br> <td>姓名</td><br> <td>年龄</td><br> <td>所属组</td><br> </tr><br> <c:forEach var="user" items="${userlist}" begin="2" end="8" step="2"><br> <tr><br> <td><c:out value="${user.username}"/></td><br> <td><c:out value="${user.age}"/></td><br> <td><c:out value="${user.relatedGroup.name}"/></td><br> </tr><br> </c:forEach><br> </table><br> <p><br> <li>循环控制标签:c:fortoken</li><br><br> <c:forTokens items="${tokenstr}" delims="," var="v"><br> <c:out value="${v}"/><br> </c:forTokens> <br> <p><br> <li>循环控制标签:c:foreach-map</li><br><br> <c:forEach items="${map}" var="v"><br> ${v}<br><br> ${v.key}=${v.value }<br><br> </c:forEach>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ADreamClusive

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值