JSTL
JSP标准标签库(JSP Standard Tag Library,简称JSTL)是一个为实现Web应用程序的常用功能而开发的标签库集合。
功能包括基本输入输出、流程控制、XML文件解析、数据库查询、国际化和文本格式化等。
JSTL主要由下面几个库组成:
核心标签库;
XML标签库;
格式化/国际化标签库;
数据库标签库;
函数标签库
标签文件(tag file)也是JSP 2.0新增的功能,它的目的是使JSP页面开发人员仅使用JSP语法就能开发标签库而无须编写Java程序。
所谓标签文件就是直接使用JSP语法编写的标签。
标签文件的扩展名一般为.tag或.tagx,如果标签文件包含其他完整的或片段的标签文件,JSP 2.0建议其扩展名为.tagf。
在JSP页面中使用标签文件,需要在taglib动作中使用tagdir属性指定标签文件所在的目录
例如:
<%@ taglib prefix=“mytag” tagdir="/WEB-INF/tags"%>
或
<%@ taglib prefix=“c” uri=“http://java.sun.com/jstl/core”%>
核心标签库
包括变量操作,流程控制以及在Jsp页面中访问基于URL资源的相关标签。
例:
<c:out>
用来计算一个表达式并将结果输出。
等价于
<%=表达式>
或
${表达式}
value:被计算的表达式
default:当计算为空时,输出指定字符串
<c:catch>
处理jsp页面产生的异常,并存储异常信息
<c:catch var="name1">
容易产生异常的代码
</c:catch>
<c:set>
向指定范围内的变量赋值
也可以向一个指定的JavaBean或map的属性赋值
var:指定变量名称
scop:指定变量的作用范围,默认为page
value:待赋给变量的值
target:必须是一个javaBean或Map类型的变量
property:JavaBean的属性名或Map的key
<c:remove>
移除指定范围内的变量
<c:if>
用于实现java中的if单分支功能
例:
<c:set var="a" value="hello"/>
<c:if test="${not empty a }">
<c:out value="${a }"/>
</c:if>
<c:choose> <c:when> <c:otherwise>
这三个标签用于实现Java中的switch分支功能
三个标签通常嵌套使用,第一个标签在最外层,最后一个标签在嵌套中只能使用一次
例:
<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>
<c:forEach>
遍历固定次数的循环
begin:遍历开始的索引值
end:遍历结束的索引值
step:索引增长的步长,默认为1
<c:set var="sum" value="0" />
<c:forEach var="i" begin="1" end="10" step="2">
<c:set var="sum" value="${sum + i}" />
</c:forEach>
<c:out value="sum = ${sum }"/>
遍历集合,数组,map,list
item:将被遍历的对象
count:int类型,当前已遍历元素的个数;
index:int类型,当前元素的下标;
first:boolean类型,是否为第一个元素;
last:boolean类型,是否为最后一个元素;
current:Object类型,表示当前项目。
<%
String[] names = {"zhangSan", "liSi", "wangWu", "zhaoLiu"};
pageContext.setAttribute("ns", names);
%>
<c:forEach var="item " items="${ns } ">
<c:out value="name: ${item } "/><br/>
</c:forEach>
<%
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="name: ${item }"/><br/>
</c:forEach>
<%
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="${item.key }: ${item.value } "/><br/>
</c:forEach>
<c:forTakens>
将字符串按照指定的分隔符分隔后遍历
delims:分隔符
<c:forTokens items="Zara,nuha,roshy" delims="," var="name">
<c:out value="${name}"/><p>
</c:forTokens>
<c:url>
与<c:param>结合使用构造一个URL地址
value:指定要处理的URL地址
<c:import>
类似于jsp:include标签,不但可以导入本地web应用的资源,还可以导入其他web资源
<c:redirect>
将客户端请求转向其他资源,等价于jsp内置对象response的sendRedirect方法
国际化标签库
引入国际化标签库的taglib指令为:
<%@ taglib prefix=“fmt” uri=“http://java.sun.com/jsp/jstl/fmt” %>
< fmt:setLocale>
用于确定区域,设置本地语言环境
value:表示指定区域,比如zh_CN,en_US;
< fmt:setLocale value=" " />
< fmt:requestEncoding>
用于设定客户端亲求编码
value:用于指定编码,比如GBK;
<fmt:requestEncoding value=" "/>
< fmt:setBundle>
设定资源文件,用于创建本地上下文环境
资源文件放在WEB-INF/classes下
Basename:表示资源文件名称,不需要properties后缀,var表示设定资源文件的属性名称
<fmt:setBundle basename=" " var=" "/>
< fmt:message>
获得资源文件某个特定键对应的值
key:用于指定键;
var:保存value的值;
bundle:表示资源文件;
<fmt:setBundle basename=“message" var="pm"/>
<fmt:message bundle="${pm}"/>
< fmt:formatNumber>
按地区语言或指定格式对指定数值进行格式化
value:表示需要被格式化的值;
var:保存格式化的值;
maxIntegerDigits:用于指定整数部分的位数;
maxFractionDigits:用于指定小数部分的位数;
groupingUsed:用于指定是否每3位一个","分割;true 或false
<fmt:formarNumber
value=" "
var=" "
maxIntegerDigits=" "
maxFractionDigits=" "
groupingUsed=" "
/>
< fmt:parseNumber>
解析数字
<fmt:parseNumber value=" " var=" " />
< fmt:formatDate>
将日期对象按指定格式或本地地区语言进行格式化
type:表示格式化日期或时间或全部格式化,date、both、time;
pattern:表示格式化的格式;
var:保存结果;
<fmt:formatDate value = " " type=" " pattern=" " var= " " />
< fmt:parseDate>
解析日期
<fmt:parseDate
value=" “
pattern=" "
var="
"/>
例:
<fmt:setLocale value="zh_CN"/>
<fmt:requestEncoding value="GBK"/>
<fmt:formatDate value="${date}" type="both" pattern="yyyy-MM-dd hh:mm:ss,SSS" var="resultdate"/>
<h3>${resultdate}</h3>
<fmt:setBundle basename="xiazdong" var="msg"/>
<fmt:message key="name" var="nameref" bundle="${msg}"/>
<h3>${nameref}</h3>
<fmt:formatNumber value="1234567.1234567" maxIntegerDigits="5" maxFractionDigits="5" groupingUsed="true" var="num1"/>
<h3>${num1}</h3>
<fmt:parseNumber value="${num1}" var="num2"/>
<h3>${num2}</h3>
<fmt:parseDate value="2011-10-10" pattern="yyyy-MM-dd" var="date2"/>
<h3>${date2}</h3>