jstl标签库

一、jstl标签库

jstl是apache对EL表达式的扩展(也就是说JSTL依赖EL),JSTL是标签语言。
jstl不是JSP内置的标签,需要导包。

1.jstl四大标签库

  • core
    核心标签库,重点
  • fmt
    格式化标签库,只需要学习两个标签即可;
  • sql
    数据库标签库,不需要学习了,它过时了;
  • xml
    xml标签库,不需要学习了,它过时了。

2.导入标签库
除了JSP动作标签外,使用其他第三方的标签库都需要
a.导包
b.在使用标签的JSP页面中使用taglib指令导入标签库

导入JSTL的core标签库

<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
  • prefix="c"
    指定标签库的前缀,这个前缀可以随便给值,但大家都会在使用core标签库时指定前缀为c
  • uri="http://java.sun.com/jstl/core"
    指定标签库的uri,它不一定是真实存在的网址,但它可以让JSP找到标签库的描述文件

二、core标签库常用标签

1.out和set

  • <c:out>
    输出
    • alue:可以是字符串常量,也可以是EL表达式
    • default:当要输出的内容为null时,会输出default指定的值
    • escapeXml:默认值为true,表示转义!
举例
  • <c:set>
    设置(创建域的属性)
    • var:变量名
    • value:变量值,可以是EL表达式
    • scope:域,默认为page,可选值:page、request、session、application
举例

2.remove
删除域变量

  • var:变量名
  • scope:如果不给出scope,表示删除所有域中的该名称的变量;如果指定了域,那么只删除该域的变量。
举例

3.url
路径

  • value:指定一个路径!它会在路径前面自动添加项目名。
  • <c:param>: 子标签,用来给url后面添加参数
  • var:指定变量名,一旦添加了这个属性,那么url标签就不会再输出到页面,而是把生成url保存到域中。
  • scope:它与var一起使用,用来保存url。
举例

4.if
if标签的test属性必须是一个boolean类型的值,如果test的值为true,那么执行if标签的内容,否则不执行

<c:set var="a" value="hello"/><!-- 在page域中创建名为a的变量 -->
<c:if test="${not empty a}"><!--判断a变量不为null,没有指定域,表示全域 -->
  <c:out value="${a }"/>
</c:if>

5.choose
choose标签对应Java中的if/else if/else结构。when标签的test为true时,会执行这个when的内容。当所有when标签的test都为false时,才会执行otherwise标签的内容。

<c:set var="score" value="${param.score }"/>
<c:choose>
  <c:when test="${score > 100 || score < 0}">错误的分数:${score }</c:when>
<!-- if -->
  <c:when test="${score >= 90 }">A级</c:when><!-- else if -->
  <c:when test="${score >= 80 }">B级</c:when>
  <c:when test="${score >= 70 }">C级</c:when>
  <c:when test="${score >= 60 }">D级</c:when>
  <c:otherwise>E级</c:otherwise><!-- else -->
</c:choose>

6.forEach
forEach循环标签

  • 使用循环变量,指定开始和结束值
    类似for(int i = 1; i <= 10; i++) {};

    • var:循环变量
    • begin:设置循环变量从几开始。
    • end:设置循环变量到几结束。
    • step:设置步长!等同与java中的i++,或i+=2。step默认为1

例如:

例1:
<c:set var="sum" value="0" /> <!-- 创建page域属性sum为0 -->
<c:forEach var="i" begin="1" end="10"> <!-- 设置循环变量i,初始值为1,遍历到10 -->
  <c:set var=*"sum" value="${sum + i}" /> <!-- 设置sum的值为sum + i --> 
</c:forEach>
<c:out  value="sum = ${sum }/>

例2:
<c:set var="sum" value="0" />
<c:forEach var="i" begin="1" end="10" step ="2"> <!-- 步长为2,默认步长为1。相当于i+=2的意思!而默认为i++ -->
  <c:set var="sum" value="${sum + i}" />
</c:forEach>
<c:out value="sum = ${sum }"/>
  • 循环遍历集合
    类似for(Object o : 集合);

    • items:指定要循环谁,它可以是一个数组或一个集合
    • var:把数组或集合中的每个元素赋值给var指定的变量。
<%
String[] names = {"zhangSan", "liSi", "wangWu", "zhaoLiu"};
pageContext.setAttribute("ns", names);
%>
<c:forEach var="item" items="${ns }"><!-- 把ns是中每一项赋给item. ns是被遍历的数组 -->
  <c:out value="name: ${item }"/><br/><!-- 打印每一项 -->
</c:forEach>

遍历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="name: ${item }"/><br/>
</c:forEach>

遍历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 }"> <!-- 因为遍历的是Map,所以每一项是Entry类型 -->
  <c:out value="${item.key } : ${item.value }"/><br/> <!-- 获取Entry的key和value
 -->
</c:forEach>
  • varStatus(循环状态)
    这个属性用来指定接收“循环状态”的变量名
    • count
      int类型,当前以遍历元素的个数;
    • index
      int类型,当前元素的下标;
    • first
      boolean类型,是否为第一个元素;
    • last
      boolean类型,是否为最后一个元素;
    • current
      Object类型,表示当前项目。
<c:forEach var="item" items="${ns }" varStatus="vs"> <!-- 把循环状态赋给vs -->
  <c:if test="${vs.first }">第一行:</c:if><!-- 如果是第一行,那么${vs.first}为true -->
  <c:if test="${vs.last }">最后一行:</c:if><!-- 如果是最后一行,那么${vs.last}为true
 -->
  <c:out value="第${vs.count }行: "/><!-- 返回行数,从1开始 -->
  <c:out value="[${vs.index }]: "/><!-- 返回行数,从0开始 -->
  <c:out value="name: ${vs.current }"/><br/><!-- 当前项,与${item}相同 -->
</c:forEach>

三、fmt标签库常用标签

fmt标签库是用来格式化输出的,通常需要格式化的有时间和数字

  • 格式化时间
    • value:指定一个Date类型的变量
    • pattern:用来指定输出的模板!例如:yyyy-MM-dd HH:mm:ss
<%@ taglib prefix=*"fmt"* uri=*"http://java.sun.com/jsp/jstl/fmt"* %>
......
<%
 Date date = new Date();
 pageContext.setAttribute("d", date);
%>
<fmt:formatDate value="${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="${d1 }" pattern="0.00"/><br/>
<!-- 必须且仅能保留两位小数,如果大于两位,那么只保留两位,并四舍五入,如果小于两位,那么使用0补足两位。-->
<fmt:formatNumber value="${d2 }" pattern="#.##"/>
<!-- 最多显示两位,如果小于两位,那么有几位保留几位,不会用0补足。大于两位,只保留两位,并四舍五入! -->
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,366评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,521评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,689评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,925评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,942评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,727评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,447评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,349评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,820评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,990评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,127评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,812评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,471评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,017评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,142评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,388评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,066评论 2 355

推荐阅读更多精彩内容

  • title: JavaWeb之JSTL标签库tags: JavaWeb JSTLcategories: JavaW...
    codingXiaxw阅读 699评论 0 3
  • jsp页面是为了显示数据,如果嵌入java代码,就会使得可读性差,java代码也难以重用和维护。为了不在jsp页面...
    n油炸小朋友阅读 280评论 0 0
  • JSTL标签库的使用是为弥补html标签的不足,规范自定义标签的使用而诞生的。使用JSLT标签的目的就是不希望在j...
    重山杨阅读 643评论 0 3
  • 温馨提示:本文阅读需要8分钟,建议收藏后阅读! EL表达式很厉害对不对 今天我们来一个更厉害的JSTL “为什么说...
    Java联盟阅读 1,261评论 0 1
  • JSTL apache对EL表达式的扩展 jstl.jar包core 核心库fmt 格式化标签库 Core (c标...
    大批阅读 226评论 0 0