JSTL核心标签库共有13个,功能上分为4类:
1.表达式控制标签:out、set、remove、catch。
2.流程控制标签:if、choose、when、otherwise。
3.循环标签:forEach、forTokens。
4.URL操作标签:import、url、redirect
使用标签时,一定要在JSP文件头加入一下代码:
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
下面分别对这些标签进行说明:
1.<c:out>用来显示数据对象(字符串、表达式)的内容或结果。
如果不使用该标签而使用java脚本的方式则为:<%out.println("hello")%> <%=表达式类型%>
使用JSTL标签:<c:out value="字符串">
测试代码:
<body> <!-- 注:escapeXml表示原封不动输出代码 --> <c:out value="< 要显示的数据对象(未使用转义字符)>" escapeXml="true" /><br> <c:out value="< 要显示的数据对象(使用转义字符)>" escapeXml="false" /> </body>
注:当escapeXml为true的时候,代码会原封不动的输出。
效果:
2.<c:set>用于定义相关变量,如:
<c:set var="ctx" value="${pageContext.request.contextPath}" />
上述代码是设置上下文路径,有了这个之后我们可以在访问一些资源(如:Action、图片等)的时候指明它们的绝对路径,比如:
<form action="${ctx}/userAction_add.action"></form>
3.<c:remove>主要用来从指定的JSP范围内删除指定的变量,语法:
<c:remove var="变量名" [scope="page|request|session|application"]></c:remove>
测试代码:
<body> <% request.setAttribute("age", "22"); %> <!-- 變量名不用$符號,如果沒有指定域的話,就會刪除所有域的變量 --> <c:remove var="age" scope="request" /> ${age} </body>
上述代码${age}是取不到值的,因为已经被删除了。
4.<c:catch>捕获异常,并存储异常信息,
<c:catch var="name1">
产生异常的代码
</c:catch>
如果抛出异常,则异常信息保存在变量name1中。
测试代码:
<body> <c:catch var="myException"> <% int i = 8 / 0; %> </c:catch> <c:out value="${myException }" /> </body>
效果:
5.<c:if>用于判断,语法:
<c:if test="条件1" var="name" [scope="page|request|session|application"]></c:if>
测试代码:
<body> <% request.setAttribute("name", "hello"); request.setAttribute("age", "22"); %> <c:if test="${name=='hello'}"> 你好啊! </c:if> <c:if test="${name != 'hello' }"> 不好啊! </c:if> <c:if test="${age == 22 }"> 我22歲! </c:if> <c:if test="${age > 22 }"> 我已經老了! </c:if> </body>
注:比较字符串时,一定要用单引号,且<c:if>标签没有else,只能用if。比较数字时会自动转换。
6.<c:choose><c:when><c:otherwise>这三个标签嵌套使用,第一个标签在最外层,最后一个标签在嵌套中只能使用一次。
测试代码:
<body> <c:set var="score">85</c:set> <c:choose> <c:when test="${score>=90}"> 你的成績為優秀! </c:when> <c:when test="${score>=70 && score<90}"> 你的成績為良好! </c:when> <c:when test="${score>60 && score<70}"> 你的成績為及格! </c:when> <c:otherwise> 對不起,您沒有通過考試! </c:otherwise> </c:choose> </body>
注:<c:otherwise>在嵌套中只能使用一次,就像if...else if...else中的else只使用一次!
7.<c:forEach>,循环标签,语法:
<c:forEach var="name" items="collection" varStatus="statusName" begin="begin" end="end" step="step"></c:forEach>
该标签根据循环条件遍历集合Collection中的元素,var 用于存储从集合中取出的元素,items指定要遍历的集合(items的值用用$符号),varStatus用于存放集合中元素的信息,一共有4种状态。
测试代码:
<body> <% /*定義一個集合存放用戶*/ List<User> users = new ArrayList<User>(); /*創建用戶*/ User user1 = new User(); user1.setUid(1); user1.setUname("lavimer"); User user2 = new User(); user2.setUid(2); user2.setUname("mr_liao"); /*把用戶添加到集合中*/ users.add(user1); users.add(user2); /*把集合設置到request中*/ request.setAttribute("userList", users); %> <!-- 注:items屬性也要用$符號,千萬不要忘記 --> <c:forEach items="${userList}" var="user" varStatus="s"> <c:out value="${user.uname}"/></br> 所在的位置,及索引:<c:out value="${s.index}"/></br> 總共已迭代的次數:<c:out value="${s.count}"/></br> 是否為第一個位置:<c:out value="${s.first}"/></br> 是否為最後一個位置:<c:out value="${s.last}"/></br> </c:forEach> </body>
注:varStatus中index为索引(从0开始),count为当前迭代的次数,first表示是否为第一个位置,last表示是否为最后一个位置。
效果:
测试代码:
<c:forEach var="i" begin="1" end="10" step="2"> ${i} </c:forEach>
效果:
注:varStatus中的count属性,我们可以用来判断奇偶行,从而做一些特效,如:
<table border="1"> <c:forEach var="i" begin="1" end="10" step="1" varStatus="s"> <c:if test="${s.count%2 == 0 }"> <tr style="background-color:red"> <td>${s.index}</td> <td>${i}</td> </tr> </c:if> <c:if test="${s.count%2 != 0}"> <tr style="background-color:blue"> <td>${s.index}</td> <td>${i}</td> </tr> </c:if> </c:forEach> </table>
效果:
8.<c:forTokens>用于浏览字串,并根据指定的字符串截取字符串,语法:
<c:forTokens items="StringOfTokens" delims="delimiters" [var="name" begin="begin" end="end" step="len" varStatus="statusName"]></c:forTokens>
测试代码:
<body> <% request.setAttribute("abc", "北,京,歡,迎,您"); %> <c:forTokens items="${abc}" delims="," var="c1"> ${c1} </c:forTokens> </body>
效果:
测试代码:
<body> <c:forTokens items="1*2*3*4*5" delims="*" begin="1" end="3" var="temp" varStatus="s"> ${temp}的四種屬性:</br> 所在的位置,及索引:<c:out value="${s.index}"/></br> 總共已迭代的次數:<c:out value="${s.count}"/></br> 是否為第一個位置:<c:out value="${s.first}"/></br> 是否為最後一個位置:<c:out value="${s.last}"/></br><br> </c:forTokens> </body>
效果: