首页 > 代码库 > JSTL标签详解以及应用实例
JSTL标签详解以及应用实例
JSTL
Apache提供的标签库,jar包:jstl-1.2.jar,如果用MyEclipse,它会在我们导入jar包,无需自己导入,如果没有使用MyEclipse那么需要自行导入。
------------------
导入JSTL核心标签库
<%taglib prefix="c" uri="http://java.sun.com/jstl/core"%>
<c:set>
* <c:set var="a" value="http://www.mamicode.com/hello"/> 创建名为a,值为hello的域属性,范围:page
* <c:set var="a" value="http://www.mamicode.com/hello" scope="session"/> 范围为session
<c:out>
* <c:out value="http://www.mamicode.com/aaa"/> 输出字符串aaa
* <c:out value="http://www.mamicode.com/${aaa"/> 输出域属性aaa,其中与${aaa}相同
* <c:out value="http://www.mamicode.com/${aaa}" default="xxx"/>如果${aaa}不存在,那么输出xxx字符串
* <c:out value="http://www.mamicode.com/${aaa}" escapeXml="true"/>如果${aaa}中包含特殊字符,那么转义它。这可以防止javascript攻击
<c:remove>
* <c:remove var="a"/> 删除名为a的域属性
* <c:remove var="a" scope="page"/> 删除page域中名为a的域属性
<c:url>
* <c:url value="http://www.mamicode.com/AServlet"/> 输出URL:/项目名/AServlet
* <c:url value="http://www.mamicode.com/AServlet" var="url" scope="page"/> 把生成的url保存到page域中,而不会输出
* <c:url value="http://www.mamicode.com/AServlet">:输出URL:/项目名/AServlet?username=%xx%xx%xx%xx%xx%xx,其中张三会被URL编码
<c:param name="username" value="http://www.mamicode.com/张三"/>
</c:url/>
<c:if>
* <c:if test="${条件}"> 当条件为true时执行标签体内容
hello
</c:if>
<c:choose>
* <c:choose>
<c:when test="${条件1}">a</c:when>
<c:when test="${条件2}">b</c:when>
<c:when test="${条件3}">c</c:when>
<c:otherwise>d</c:otherwise>
</c:choose>
等同与:
if() {
} esle if() {
} esle if() {
} else if() {
} else {
}
<c:forEach>
可以用来遍历数组、List、Map、
1. 计数循环
<c:forEach begin="1" end="10" var="i">
${i}
</c:forEach>
等同于
for(int i = 1; i <= 10; i++) {
out.println(i);
}
<c:forEach begin="1" end="10" var="i" step="2">
${i}
</c:forEach>
等同于
for(int i = 1; i <= 10; i+=2) {
out.println(i);
}
2. 遍历数组
<%
String[] names = {"zhangSan", "liSi", "wangWu", "zhaoLiu"};
pageContext.setAttribute("ns", names);
%>
<c:forEach var="item " items="${ns } ">
<c:out value="http://www.mamicode.com/name: ${item }"/><br/>
</c:forEach>
3. 遍历List
<%
List<String> names = new ArrayList<String>();
names.add("zhangSan");
names.add("liSi");
names.add("wangWu");
names.add("zhaoLiu");
pageContext.setAttribute("ns", names);
%>
<c:forEach var="item" items="${ns }">
<c:out value="http://www.mamicode.com/name: ${item }"/><br/>
</c:forEach>
4. 遍历Map
<%
Map<String,String> stu = new LinkedHashMap<String,String>();
stu.put("number", "N_1001");
stu.put("name", "zhangSan");
stu.put("age", "23");
stu.put("sex", "male");
pageContext.setAttribute("stu", stu);
%>
<c:forEach var="item " items="${stu }">
<c:out value="http://www.mamicode.com/${item.key }: ${item.value }"/><br/>
</c:forEach>
5. 循环状态对象
循环状态对象是用来说明循环的状态的,属性如下:
count:int类型,当前以遍历元素的个数;
index:int类型,当前元素的下标;
first:boolean类型,是否为第一个元素;
last:boolean类型,是否为最后一个元素;
current:Object类型,表示当前项目。
<c:forEach var="item" items="${ns }" varStatus="vs" >
<c:if test="${vs.first } ">第一行:</c:if>
<c:if test="${vs.last } ">最后一行:</c:if>
<c:out value="http://www.mamicode.com/第${vs.count } 行:"/>
<c:out value="http://www.mamicode.com/[${vs.index } ]:"/>
<c:out value="http://www.mamicode.com/name: ${vs.current }"/><br/>
</c:forEach>
导入JSTL格式化标签库
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%
Date date = new Date();
pageContext.setAttribute("d", date);
%>
<fmt:formatDate value="http://www.mamicode.com/${d }" pattern="yyyy-MM-dd HH:mm:ss "/>
<%
double d1 = 3.5;
double d2 = 4.4;
pageContext.setAttribute("d1", d1);
pageContext.setAttribute("d2", d2);
%>
<fmt:formatNumber value="http://www.mamicode.com/${d1 }" pattern="0.00 "/><br/>
<fmt:formatNumber value="http://www.mamicode.com/${d2 }" pattern="#.## "/>
* pattern:0.00,表示小数不足两位时,使用0补足两位
* pattern:#.##,表示小数不足两位时,有几位显示几位,不会补足
示例代码:
1 <%@ page language="java" import="java.util.*,cn.yzu.*" pageEncoding="UTF-8"%> 2 <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> 3 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 4 <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 5 <% 6 String path = request.getContextPath(); 7 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 8 %> 9 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 10 <html> 11 <head> 12 <base href="<%=basePath%>"> 13 <title>My JSP ‘index.jsp‘ starting page</title> 14 <meta http-equiv="pragma" content="no-cache"> 15 <meta http-equiv="cache-control" content="no-cache"> 16 <meta http-equiv="expires" content="0"> 17 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 18 <meta http-equiv="description" content="This is my page"> 19 </head> 20 <body> 21 <!-- JSTL标签以及EL表达式的使用与区别 --> 22 <!-- 输出标签 --> 23 <% 24 request.setAttribute("a", "<font color=‘red‘>aaaaa</font>"); 25 request.setAttribute("b", null); 26 %> 27 ${a} 28 <c:out value="a"/> 29 <c:out value="${a}"/><br> 30 <c:out value="b" default="bbbbb"></c:out><br> <!-- 如果b为空,输出default内容 --> 31 <c:out value="${a}" escapeXml="false"/><hr> <!-- 转义,默认的true --> 32 33 34 <!-- 在域中设置值,默认是pageScope --> 35 <c:set var="c" value="ccccc"/> 36 <c:set var="d" value="ddddd" scope="request"/> 37 <c:out value="${pageScope.c}"/> 38 <c:out value="${d}"/><hr> 39 40 41 <!-- 删除域中的值,默认是删除所有域中的值,如下例是删除所有域中的键为e的元素 --> 42 <c:remove var="e"/> 43 <c:remove var="c" scope="page"/> 44 <c:out value="${pageScope.c}"/><hr> 45 46 47 <!-- URL标签 --> 48 <c:url value="/"/> <!-- 输出项目名,加/ --> 49 ${pageContext.request.contextPath }<br><!-- 输出项目名,不加/ --> 50 <!-- 下面两个可以达到一样的效果 --> 51 <c:url value="/AServlet"/> 52 ${pageContext.request.contextPath }/AServlet<br> 53 <c:url value="/AServlet"> 54 <c:param name="username">张三</c:param><!-- 可以为URL增加参数 --> 55 </c:url> 56 <c:url value="/AServlet" var="f" scope="page"/><br> <!-- 将地址赋给page域的f --> 57 <c:out value="${f}"/> 58 <!-- 下例相当于<a href="http://www.mamicode.com/webBegin/index.jsp">重新请求本页面</a> --> 59 <a href="<c:url value=http://www.mamicode.com/‘/index.jsp‘/>">重新请求本页面</a><hr> 60 61 62 <!-- if,choose选择标签 --> 63 <c:set var="g" value="87"/> 64 <c:if test="${g>=0&&g<=100 }"> 65 你得了${g }分 66 </c:if> 67 <c:choose> 68 <c:when test="${g>=85}">成绩优秀</c:when> 69 <c:when test="${g>=60}">成绩及格</c:when> 70 <c:otherwise>不及格</c:otherwise> 71 </c:choose><hr> 72 73 74 <!-- 循环遍历标签 --> 75 <c:forEach begin="1" end="10" step="2" var="h"> 76 ${h } 77 </c:forEach><br> 78 <% 79 String str[]={"one","two","three"}; 80 request.setAttribute("str", str); 81 %> 82 <c:forEach items="${str}" var="nstr"> <!-- 注意,items="${str}"千万不可写成items="${str} ",后面不可有空格 --> 83 ${nstr } 84 </c:forEach><br> 85 <c:forEach items="${str}" var="nstr" varStatus="vs"> 86 ${vs.count }:${nstr } 87 </c:forEach><hr> 88 89 90 <!-- 格式化标签 --> 91 <% 92 request.setAttribute("date", new Date()); 93 request.setAttribute("m", 3.1415); 94 %> 95 <fmt:formatDate value="${date }" pattern="yyyy-MM-dd HH:mm:ss"/><br> 96 <fmt:formatNumber value="${m }" pattern="0.000"/><br> 97 <fmt:formatNumber value="${m }" pattern="0.00000"/><br><!-- 四舍五入保留五位小数,小数不足时,使用0补足两位 --> 98 <fmt:formatNumber value="${m }" pattern="#.#####"/><br><!-- 四舍五入保留五位小数,小数不足时,不补足 --> 99 </body> 100 </html>
运行结果:
JSTL标签详解以及应用实例