JSP中有了EL可以很方便的引用对象和属性,但是也有一些不足的地方,比如不能遍历对象列表这些,再加上JSTL(Java Standard Tag Library)的话那就完美了。JSTL主要包括core核心库、fmt标签库、fn方法库、SQL标签库、XML标签库。这些库理论知识不多,主要是使用。

一、core核心库

从JavaEE5之后JavaEE5内置了对JSTL的支持,如果是之前的版本需要自己下载引入。http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/jakarta-taglibs-standard-1.1.2.zip下载解析,将这两个jstl.jarstandard.jar引入到WEB-INF/lib下。在jsp中加入<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>然后就可以在jsp中正常使用了。

1.<c:out/>用来输出,除了value还有两个属性,default和escapeXML,如果value属性不存在,会输出default的的值.

  1. <c:out value="out-123"></c:out>

2.<c:if/>用于判断,由于没有if...esle..这样的判断,需要使用<c:choose/><c:when/><c:otherwise/>

  1. <c:choose>
  2. <c:when test="${1==1 }">
  3. <c:out value="c:when"></c:out>
  4. </c:when>
  5. <c:otherwise>
  6. <c:out value="c:otherwise"></c:out>
  7. </c:otherwise>
  8. </c:choose>

3.<c:forEach/>用于循环,类似for 、while

  1. <c:forEach var="num" step="2" begin="2" end ="100">
  2. <c:out value="${num }"></c:out>
  3. </c:forEach>

.<c:forEach/>对象列表与map

  1. <%
  2. List<User> users=new ArrayList<User>();
  3. users.add(new User("小明",22,true));
  4. users.add(new User("小李",23,false));
  5. request.setAttribute("users", users);
  6.  
  7. Map map=new HashMap();
  8. map.put("A", 1);
  9. map.put("B", 2);
  10. request.setAttribute("map", map);
  11.  
  12. %>
  13. <c:forEach items="${users }" var="user">
  14. <c:out value="Name=${user.name } age=${user.age }"></c:out>
  15. </c:forEach>
  16. <c:forEach items="${map }" var="item" varStatus="varStatu">
  17. <c:out value="IsFirst=${varStatu.first } IsLast=${varStatu.last } Index=${varStatu.index } Key=${item.key } age=${item.value }"></c:out><br>
  18. </c:forEach>

4.<c:forTokens/>与.<c:forEach/>类似,只是数据源只能是字符串

  1. <c:forTokens items="A;B;C;D;E;F;G;H;I;J;K" delims=";" var="item" begin="1" end="6" step="2">
  2. <c:out value="${item }"></c:out>
  3. </c:forTokens>

5.<c:set/>

前面的标签只是实现了读,而<c:set/>能实现写的功能。set可以声明一个不存在的对象,也可以修改一个已经存在的对象,或者修改对象的某个属性,只要这个属性可写。set有5个属性:var、value、target、scope、property。支持标签体,可以把值写在value中,也可写在<></>中间。

var:要设置的对象的名,不存在则生成,存在则修改,只能操作int、double、String等基本的数据类型,不能操作JavaBean、Map或复杂的数据类型。

value:要设置的值,可以为EL表达式

scope:和POJO的处的一样

target:类似var,不过只能操作JavaBean、Map这些,与var互补。不过它只能修改已存在的JavaBean、Map,否则会报错。

下面的是修改属性值

  1. request.setAttribute("use", new User("小明",22,true));
  2. <c:set target="${use}" property="name" value="小小"></c:set>
  3. <c:out value="修改后姓名为:${use.name }"></c:out>

下面是实现了计数器的功能

  1. <c:set var="totalCount" scope="application">${totalCount+1 }</c:set>
  2. <c:set var="count" scope="session">${count+1 }</c:set>
  3. 本站访问的总次数:${totalCount } 个人访问的次数:${count }

6.<c:remove/>标签 与set标签相反,它是移除只有两个属性var、scope,var只接受字符串不接受EL

  1. <c:remove var="map" scope="page"/>
  2. <c:out value="${map==null?'map已被移除':'map未移除'}"></c:out>

7.<c:catch/>标签来捕获异常

  1. <c:catch var="e">
  2. <c:set target="${users}" property="age" value="123"></c:set>
  3. </c:catch >
  4. <c:if test="${e!=null }">
  5. <c:out value="${e.message }"></c:out>
  6. </c:if>

8.<c:import/>类似include的行为和指令,也可以导入网页,不过import可以导入外网的。

  1. <c:import url="/part.jsp"></c:import>
  2. <c:import url="http://www.cnblogs.com"></c:import>

9.<c:redirect/> 实现重定向功能,context默认当前的context path,url为相对于context的相对地址。两个都必须是"/"开头。

  1. <c:redirect url="http://www.cnblogs.com"></c:redirect>
  2. <c:redirect url="/part.jsp"></c:redirect>

10.<c:param/>页面跳转传参使用

  1. <c:redirect url="http://zzk.cnblogs.com/s">
  2. <c:param name="t" value="b"></c:param>
  3. <c:param name="w" value="jstl"></c:param>
  4. </c:redirect>

二、fmt标签库

fmt:format的缩写,从英文名也能猜出它是用来干嘛的,主要是用来格式化的,时间日期数字字符串语言的格式化。在使用它之前需要在jsp中引入,和core库一样,

  1. <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

1.<f:requestEncoding/>用于设定request编码只有一个value属性。

  1. <fmt:requestEncoding value="UTF-8"/>

2.<fmt:setLocale/> Locale本地化的意思。就和语言一样,世界上有几十种语言,为了互相交流,于是就出现了翻译。本地就是做翻译的功能.

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8" import="java.util.*"%>
  3. <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
  4. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  6. <html>
  7. <head>
  8. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  9. <title>Insert title here</title>
  10. </head>
  11. <body>
  12. <fmt:requestEncoding value="UTF-8"/>
  13. <%
  14. request.setAttribute("LocaleList", Locale.getAvailableLocales());
  15. %>
  16. <table>
  17. <tr>
  18. <th>地区名</th>
  19. <th>语言</th>
  20. <th>时间</th>
  21. <th>数字</th>
  22. <th>货币</th>
  23. </tr>
  24. <jsp:useBean id="date" class="java.util.Date"></jsp:useBean>
  25. <c:forEach items="${LocaleList}" var="item">
  26. <fmt:setLocale value="${item }"/>
  27. <tr>
  28. <td>${item.displayName }</td>
  29. <td>${item.displayLanguage }</td>
  30. <td><fmt:formatDate value="${date }" type="both"/></td>
  31. <td><fmt:formatNumber value="1000.5"></fmt:formatNumber></td>
  32. <td><fmt:formatNumber value="1000.5" type="currency"></fmt:formatNumber></td>
  33. </tr>
  34. </c:forEach>
  35. </table>
  36. </body>
  37. </html>

上面的代码通过Locale类获取所有的地区,然后遍历地区,显示出地区名、语言、时间、数字、货币。

其实<fmt:setLocale>还有两个属性,scope和variant.由于scope设置作用域的,默认page,每次设置之后显示的都会是对应的数字货币时间。variant是客户端或操作系统的代号。输出数据尽量使用jstl标签,jstl会自动根据不同的locale来显示不同的内容,EL则不会。在平时开发中服务器会自动设置locale,开发时只需通过request获取即可。

3.<fmt:timeZone></fmt:timeZone> <fmt:setTimeZone/>

Locale只是影响的是时间格式,时区对时间也有影响,<fmt:timeZone></fmt:timeZone>只对标签体内的代码有效。而<fmt:setTimeZone/>和<fmt:setLocale/>一样是设置一定作用域内有效

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8" import="java.util.*"%>
  3. <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
  4. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  6. <html>
  7. <head>
  8. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  9. <title>Insert title here</title>
  10. </head>
  11. <body>
  12. <%
  13. Map<String,TimeZone> hashMap=new HashMap<String,TimeZone>();
  14. for(String ID :TimeZone.getAvailableIDs())
  15. {
  16. hashMap.put(ID, TimeZone.getTimeZone(ID));
  17. }
  18. request.setAttribute("hashMap", hashMap);
  19. %>
  20. <jsp:useBean id="date" class="java.util.Date"></jsp:useBean>
  21. <fmt:timeZone value="Asia/Shanghai">
  22. 现在时刻:<%=TimeZone.getDefault().getDisplayName() %> <fmt:formatDate value="${date }" type="both"/>
  23. </fmt:timeZone>
  24. <table>
  25. <tr>
  26. <th>时区ID</th>
  27. <th>时区</th>
  28. <th>现在时间</th>
  29. <th>时差</th>
  30. </tr>
  31. <c:forEach items="${hashMap}" var="item">
  32. <fmt:setTimeZone value="${item.value }" scope="page"/>
  33. <tr>
  34. <td>${item.key }</td>
  35. <td>${item.value.displayName }</td>
  36. <td><fmt:formatDate value="${date }" type="both"/></td>
  37.  
  38. <td>${item.value.rawOffset/60/60/1000}</td>
  39. </tr>
  40. </c:forEach>
  41. </table>
  42. </body>
  43. </html>

上面的代码先使用<fmt:timeZone></fmt:timeZone>显示本地的时间,然后通过TimeZone类获取的全球时区遍历通过<fmt:setTimeZone/>显示不同时区的时间.

4. <fmt:formatNumber/>主要用来格式化数字

属性 描述 是否必要 默认值
value 要显示的数字
type NUMBER,CURRENCY,或 PERCENT类型 Number
pattern 指定一个自定义的格式化模式用与输出
currencyCode 货币码(当type="currency"时) 取决于默认区域
currencySymbol 货币符号 (当 type="currency"时) 取决于默认区域
groupingUsed 是否对数字分组 (TRUE 或 FALSE) true
maxIntegerDigits 整型数最大的位数
minIntegerDigits 整型数最小的位数
maxFractionDigits 小数点后最大的位数
minFractionDigits 小数点后最小的位数
var 存储格式化数字的变量 Print to page
scope var属性的作用域 page

如果type属性为percent或number,那么您就可以使用其它几个格式化数字属性。maxIntegerDigits属性和minIntegerDigits属性允许您指定整数的长度。若实际数字超过了maxIntegerDigits所指定的最大值,则数字将会被截断。

有一些属性允许您指定小数点后的位数。minFractionalDigits属性和maxFractionalDigits属性允许您指定小数点后的位数。若实际的数字超出了所指定的范围,则这个数字会被截断。

数字分组可以用来在每三个数字中插入一个逗号。groupingIsUsed属性用来指定是否使用数字分组。当与minIntegerDigits属性一同使用时,就必须要很小心地来获取预期的结果了。

您或许会使用pattern属性。这个属性可以让您在对数字编码时包含指定的字符。接下来的表格中列出了这些字符。

符号 描述
0 代表一位数字
E 使用指数格式
# 代表一位数字,若没有则显示0
. 小数点
, 数字分组分隔符
; 分隔格式
- 使用默认负数前缀
% 百分数
? 千分数
¤ 货币符号,使用实际的货币符号代替
X 指定可以作为前缀或后缀的字符
' 在前缀或后缀中引用特殊字符

5.<fmt:parseNumber>主要用来将字符串转为数字

属性 描述 是否必要 默认值
value 要解析的数字 Body
type NUMBER,,CURRENCY,或 PERCENT number
parseLocale 解析数字时所用的区域 默认区域
integerOnly 是否只解析整型数(true)或浮点数(false) false
pattern 自定义解析模式
timeZone 要显示的日期的时区 默认时区
var 存储待解析数字的变量 Print to page
scope var属性的作用域 page

6.<fmt:formatDate/>主要用来格式化时间

属性 描述 是否必要 默认值
value 要显示的日期
type DATE, TIME, 或 BOTH date
dateStyle FULL, LONG, MEDIUM, SHORT, 或 DEFAULT default
timeStyle FULL, LONG, MEDIUM, SHORT, 或 DEFAULT default
pattern 自定义格式模式
timeZone 显示日期的时区 默认时区
var 存储格式化日期的变量名 显示在页面
scope 存储格式化日志变量的范围 页面

7.<fmt:parseDate/>主要用来将字符串转为时间格式

属性 描述 是否必要 默认值
value 要显示的日期
type DATE, TIME, 或 BOTH date
dateStyle FULL, LONG, MEDIUM, SHORT, 或 DEFAULT default
timeStyle FULL, LONG, MEDIUM, SHORT, 或 DEFAULT default
pattern 自定义格式模式
timeZone 显示日期的时区 默认时区
var 存储格式化日期的变量名 显示在页面
scope 存储格式化日志变量的范围 页面

三、fn方法库

fn:function,提供了一些常用的方法,这些和C#中的基本一样所以没啥说的,比较简单。使用前引入方法库

1.fn:contains判断字符串是否包含,区分大小写

2.fn:containsIgnoreCase判断,不区分大小写

3.fn:endsWith判断字符串以什么结尾

4.fn:startsWith判断字符串以什么开头

5.fn:indexOf 查找字符串在什么位置

6.fn:split 字符串以什么分隔开

7.fn:join将字符串数组以字符合并

7.fn:escapeXml

8.fn:length判断字符串长度

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8" import="java.util.*"%>
  3. <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
  4. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  6. <html>
  7. <head>
  8. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  9. <title>Insert title here</title>
  10. </head>
  11. <body>
  12. fn:contains:<br>
  13. ${fn:contains("abc","a") }<br>
  14. ${fn:contains("abc","A") }<br>
  15. fn:containsIgnoreCase:<br>
  16. ${fn:containsIgnoreCase("abc","A") }<br>
  17. fn:endsWith:<br>
  18. ${fn:endsWith("a;png;",';')}
  19. ${fn:endsWith("a;png;",'png;')}<br>
  20. fn:startsWith:<br>
  21. ${fn:startsWith("_png","_")}
  22. ${fn:startsWith("_png_abc",'_')}<br>
  23. fn:indexOf
  24. ${fn:indexOf("a;b;c;",';') }<br>
  25. fn:split:<br>
  26. <c:set var="splits" value="${fn:split('a;b',';')}"></c:set>
  27. <c:forEach items="${splits}" var="item">
  28. <c:out value="${item }"></c:out><br>
  29. </c:forEach><br>
  30. fn:length:
  31. ${fn:length("abdcd123")}<br>
  32. <c:set var="string1" value="${fn:split('a;b;c', ';')}" />
  33. <c:set var="string2" value="${fn:join(string1, ';')}" />
  34. <p>字符串为 : ${string2}</p>
  35. fn:escapeXml:<br>
  36. <c:import url="http://www.cnblogs.com" var="source"></c:import>
  37. ${fn:escapeXml(source) }
  38. </body>
  39. </html>

四、SQL、XML标签库

这两个标签库会分别在JDBC、XML中学习,还有一些国际化的标签会放在国际化多语言中学习。

JavaWeb之JSTL标签的更多相关文章

  1. 【JavaWeb】JSTL标签库

    JSTL标签库 JSTL标准标签库: JSTL用于简化JSP开发,提高代码的可读性与可维护性: JSTL由SUN(Oracle)定义规范,由Apache Tomcat团队实现: 引用JSTL核心库 核 ...

  2. JavaWeb 之 JSTL 标签

    JSTL 标签库 一.概述 1.概念 JSTL : JavaServer Pages Tag Library  JSP标准标签库. 是由 Apache 组织提供的开源的免费的 jsp 标签. 2.作用 ...

  3. 【JavaWeb】JSTL 标签库

    JSTL 标签库 简介 JSTL(JSP Standard Tag Library),即 JSP 标准标签库.标签库是为了替换代码脚本,使得整个 jsp 页面变得更加简洁. JSTL 有五个功能不同的 ...

  4. JavaWeb学习----JSTL标签库

    一.JSTL简介: JSTL全名为JavaServer Pages Standard Tag Library,中文名称为JSP标准标签函数库,目前最新的版本为1.2.JSTL是由JCP(Java Co ...

  5. JavaWeb笔记——JSTL标签

    JSTL 1. jstl的概述   * apache的东西,依赖EL   * 使用jstl需要导入jstl.jar.standard.jar   * 四大库:     > core:核心库,重点 ...

  6. IT兄弟连 JavaWeb教程 JSTL标签的使用

    假定甲方打算使用乙方开发的标签库,乙方把与标签库相关的所有文件打包成为了一个JAR文件(假定名为standard.jar),在这个JAR文件中包含以下内容: ●  标签处理类及相关的.class文件 ...

  7. JavaWeb基础—EL表达式与JSTL标签库

    EL表达式: EL 全名为Expression Language.EL主要作用 获取数据(访问对象,访问数据,遍历集合等) 执行运算 获取JavaWeb常用对象 调用Java方法(EL函数库) 给出一 ...

  8. JavaWeb学习篇之----自定义标签&&JSTL标签库详解

    今天来看一下自定义标签的内容,自定义标签是JavaWeb的一部分非常重要的核心功能,我们之前就说过,JSP规范说的很清楚,就是Jsp页面中禁止编写一行Java代码,就是最好不要有Java脚本片段,下面 ...

  9. JavaWeb学习之JSP常用标签、EL表达式的运算符、JSTL标签库(6)

    1.JSP常用标签 * 只要支持JSP文件,常用标签有可以直接使用 * 格式: jsp:xxxx * jsp:forward ,完成jsp页面的转发 * page属性:转发的地址 <% requ ...

随机推荐

  1. ArcGIS API for JavaScript 4.2学习笔记[4] 第二章其余感兴趣的例子

    先马克,估计要用到的有: 视图存档 2D地图添加指南针 视图移动 鹰眼 2D3D视图同步.同视图不同数据同步 以后实战的时候再仔细研究研究.

  2. node之路由介绍

    路由介绍 ----路由是指向客户端提供它所发出的请求内容的机制:----对基于 Web 的客户端 / 服务器端程序而言,客户端在 URL 中指明它想要的内容,具体来说就是路径和查询字符串 下面我看看一 ...

  3. 在Window下安装Oracle

    一.Oracle下载地址 http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html 二.解压 ...

  4. iterator的实现原理

    1.iterator遍历linkedlist集合 Iterator li = list.iterator(); while(li.hasNext()){ System.out.println(li.n ...

  5. LinkedList底层实现,及其数据结构实现。

    LinkedList底层的实现基于双向表 prev data next next指向下一个node的地址.prev指向上一个node. 这里的代码是LinkedList类的源码. private st ...

  6. c#入门系列——基础篇

    c#与VB的区别 刚接触c#发现c#与vb还是有所不同的--它可以在控制台显示.它比vb多出来了一些东西.代码规范上跟VB也稍有不同.....暂时就发现这么多,正在努力发现中. c#的代码结构     ...

  7. tableView的总结

    // // ViewController.m // TableViewController // // Created by 王妍 on 16/3/23. // Copyright © 2016年 c ...

  8. 转: 尽己力,无愧于心 FastReport.Net 常用功能总汇

    FastReport.Net 常用功能总汇   一.常用控件 文本框:输入文字或表达式 表格:设置表格的行列数,输入数字或表达式 子报表:放置子报表后,系统会自动增加一个页面,你可以在此页面上设计需要 ...

  9. mycat

    mycat系列: mycat系列-概述 Cobar的十个秘密之一 Cobar的十个秘密之二 Cobar的十个秘密之三 Cobar的十个秘密之四 Cobar的十个秘密之五 Cobar的十个秘密之六 Co ...

  10. 4G最快网速相当于30M宽带

    [导读]据北京移动方面介绍,目前其4G网络的覆盖范围包括:东西北三环.南至两广路以内的地区:清华北大.国贸CBD及园博会等地区. 在4G年内发牌已成定局的背景下,各运营商都在加快布局,北京移动近期就推 ...