填坑之路:JSTL

一、什么是JSTL

JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能,它是apache对EL表达式的扩展(也就是说JSTL依赖EL)。

二、JSTL怎么用

如果你是使用MyEclipse开发,那么在把项目发布到Tomcat时它会在自动在lib目录下存放jstl的Jar包,如果你是使用Eclipse等其他开发工具的话,你就需要手动导入jstl.jar和 standard.jar(非必须)。

三、JSTL标签库

JSTL一共包含4大标签库,包括core(核心标签库)、fmt(格式化标签库)、sql(数据库标签库),xml(xml标签库),以下一一讲解。

1. 核心标签库core常用标签
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  • prefix:指定标签库的前缀,可以根据具体需要自己指定(如core库大家使用时都会使用默认c作为前缀)
  • uri:指定具体标签库的uri,用于让jsp连接到相应标签库的描述文件

(1) out、set和remove标签

<c:out value="foo">  //在页面中打印:foo(字符串)

<c:set var="foo" value="fooText" >  //没指定scope,默认在pageContext域中添加键foo其值为fooText
<c:set var="foo" value="fooText" scope="session">  //指定在session中添加键值对
<c:out value="${foo}">  //在页面中打印:fooText(变量foo的值)
<c:out value="${foo}" default="defaultText">  //当foo不存在时,输出默认值 defaultText时

<c:remove var="foo">  //删除所有域中键为foo的数据
<c:remove var="foo" scope="session">  //删除指定的session域中键为foo的数据

(2) url标签

<c:url value="/urlText">  //在页面打印: /当前项目名/urlText

<c:url value="/urlText">
<c:param name="username" value="foo"/>  //在页面打印:/当前项目名/urlText?username=foo
//url标签可用来重写url,当遇到中文时,自动转为url编码

(3)if标签(其中test属性的值必须是boolean类型的值)

<c:set var="foo" value="fooText"/>  
<c:if test="${not empty foo }">  //判断foo是否为空  
    <c:out value="${foo }"/>  //在页面打印:fooText(判断返回true,打印foo的值)
</c:if>  

(4)choose标签(对应于if/else语句)

<c:choose> 
  <c:when test="${empty param.name}">   //后台传参param,判断非空
    Nnknown user.  
  </c:when> 
  <c:when test="${param.name == 'lalala'}">   
    ${param.name} is manager.  
  </c:when> 
  <c:otherwise>   
    ${param.name} is employee.  
  </c:otherwise> 
</c:choose> 

对应于java程序片段:

<%  
String name = request.getParameter("name");  
if(name == null) {   //对应第一个<c:when>标签的主体  
  out.print("Nnknown user.");  
} else if (name.equals("Tom")){    //对应第二个<c:when>标签的主体  
  out.print(name+" is manager.");  
} else {    //对应<c:otherwise>标签的主体  
  out.print(name+" is employee.");  
}  
%> 

(5)forEach标签(循环标签)

// 1.循环变量
<c:forEach var="i" begin="1" end="10"> //可以指定step,表示递增跨度
  <c:out value="${i}"></c:out> // 在页面打印:1 2 3 ...
</c:forEach>  

// 2.遍历集合/数组
<%  
  String[] names = {"zhangSan", "liSi", "wangWu", "zhaoLiu"};  
  pageContext.setAttribute("names", names);  
%>  
<c:forEach var="item" items="${names }">  
  <c:out value="name: ${item }"/> //打印出数组names中的所有name
</c:forEach> 

// 3.遍历list
<%  
  List<String> names = new ArrayList<String>();  
  names.add("zhangSan");  
  names.add("liSi");  
  names.add("wangWu");  
  names.add("zhaoLiu");  
  pageContext.setAttribute("names", names);  
%>  
<c:forEach var="item" items="${names }">  
  <c:out value="name: ${item }"/>
</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="${item.key }: ${item.value }"/>
</c:forEach> 

forEach标签还可以用varStatus来指定循环状态的变量名,以获取循环状态。

  • count:int类型,当前以遍历元素的个数;
  • index:int类型,当前元素的下标;
  • first:boolean类型,是否为第一个元素;
  • last:boolean类型,是否为最后一个元素;
  • current:Object类型,表示当前项目。
<%  
  String[] names = {"zhangSan", "liSi", "wangWu", "zhaoLiu"};  
  pageContext.setAttribute("names", names);  
%>  
<c:forEach var="item" items="${names }" varStatus="vs">  
  <c:if test="${vs.first }">第一行:</c:if>  
  <c:if test="${vs.last }">最后一行:</c:if>  
  <c:out value="第${vs.count }行: "/>  
  <c:out value="[${vs.index }]: "/>  
  <c:out value="name: ${vs.current }"/><br/>  
</c:forEach> 
varStatus例子结果
2. fmt标签库常用标签
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>  

(1)格式化时间

<%  
  Date date = new Date();  
  pageContext.setAttribute("date", date);  
%>  
<fmt:formatDate value="${date}" pattern="yyyy-MM-dd HH:mm:ss"/>  //在页面打印:2017-04-06 19:20:20

(2)格式化数字

<%  
  double num1 = 1.1;  
  double num2 = 2.2222;   
  pageContext.setAttribute("num1", num1);  
  pageContext.setAttribute("num2", num2);  
%>  
<fmt:formatNumber value="${num1 }" pattern="0.00"/>  //在页面打印:1.10(补位和去位)
<fmt:formatNumber value="${num2 }" pattern="#.##"/>  //在页面打印:2.22(四舍五入)
sql与xml标签库已经过时了,不再累述

本文借鉴 http://blog.csdn.net/qq_25827845/article/details/53311722

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • JSP 基本结构JSP 页面组成:模板文本(HTML,XML,纯文本),JSP 元素;JSP 元素:脚本元素,指令...
    jslancer阅读 829评论 0 11
  • 1什么是JSTLJSTL是apache对EL表达式的扩展(也就是说JSTL依赖EL),JSTL是标签语言!JSTL...
    TY_阅读 370评论 0 1
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,562评论 18 399
  • JSP 标准标签库(JSTL) JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能...
    FTOLsXD阅读 323评论 1 2
  • ----今天股市遭受久违的重挫。500只股票跌停,近2000只股票跌幅在5%以上。中小创是重灾区,创业板大跌-5....
    老邵看盘阅读 177评论 0 0