JSTL标签库

JSTL标签

   java标准标签库,英文全称:java standard tag libarary    

1    分类

    共有以下几种:
         核心标签库 (c标签库) //常用,熟练运用
国际化标签(fmt标签库)
EL函数库(fn函数库)
xml标签库(x标签库)//操作xml,但是一般在dao层做,不用了解
sql标签库(sql标签库)//操作sql数据库,但是一般在dao层做,不用了解

2    使用步骤

    2.1    导入jstl支持的jar包 (标签背后隐藏的java代码,因为jstl标签语言(还有jsp标签)都会被编译成java代码,java代码需要jar包的支持)
     需要2个包:核心包+辅助包。jstl-1.2.jar 点击打开链接    standard.jar 点击打开链接  
    注意:使用javaee5.0以上的项目,会自动导入jstl支持的jar包
    2.2    使用taglib指令导入标签库        
       使用taglib标签导入标签库: <%@ taglib uri="tld文件的uri名称" prefix="简写" %>
   
   
  1. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
        注意:上面prefix一般都写c,也可以是其它字母。

     2.3    完成上面2个步骤了,就可以在jsp中使用jstl 核心标签了。若是要使用fmt标签库,fn函数库等,则需根据第2.2中,使用taglib标签指令,添加对应的uri,就能使用了。

3    核心标签库的重点标签

保存数据:<c:set></c:set>   
获取数据:<c:out value=""></c:out>
单条件判断:<c:if test=""></c:if>
多条件判断:<c:choose></c:choose>
<c:when test=""></c:when>
<c:otherwise></c:otherwise>
循环数据:<c:forEach items=”” var=””></c:forEach>
<c:forTokens items="" delims=""></c:forTokens>
重定向:<c:redirect></c:redirect>

    3.1 <c:set>标签

<c:set>标签用于把某一个对象存在指定的域范围内,或者设置Web域中的java.util.Map类型的属性对象或JavaBean类型的属性对象的属性。      

属性名

是否支持EL

属性类型

属 性 描 述

value

true

Object

用于指定属性值

var

false

String

用于指定要设置的Web域属性的名称

scope

false

String

用于指定属性所在的Web属性socope的值可为:page/request/session/application

target

true

Object

用于指定要设置属性的对象,这个对象必须是JavaBean对象或java.util.Map对象

property

true

string

用于指定当前要为对象设置的属性名称

   3.2 <c:out>标签

   out标签:用于输出一段文本到浏览器中。也可以结合EL表达式,获取域中的值并输出。和EL表达式直接输出唯一区别是可以结合escapeXml属性和default属性作用。

属性名

是否支持EL

属性类型

属 性 描 述

value

true

Object

指定要输出的内容

escapeXml

true

Boolean

指定是否将><&'等特殊字符进行HTML编码转换后再进行输出。默认值为true

default

true

Object

指定如果value属性的值为null/””时所输出的默认值

    3.3 <c:if>标签

if标签:单条件的判断 

属性名

是否支持EL

属性类型

属 性 描 述

test

true

boolean

决定是否处理标签体中的内容的条件表达式

var

false

String

用于指定将test属性的执行结果保存到某个Web域中的某个属性的名称

scope

false

String

指定将test属性的执行结果保存到哪个Web域中

    3.4 <c:choose>标签

   <c:choose>标签用于指定多个条件选择的组合边界,它必须与<c:when>和<c:otherwise>标签一起使用。使用<c:choose>,<c:when>和<c:otherwise>三个标签,可以构造类似 “if-else if-else” 的复杂条件判断结构。

    3.5<c:forEach>标签

     < c:forEach > 标签用于对一个集合对象中的元素进行循环迭代操作,或者按指定的次数重复迭代执行标签体中的内容。  
          forEach中的属性:
            begin:从集合中的第begin个元素开始进行迭代,begin的索引值默认从0开始编号。
            end:到哪个索引值结束,默认到最后一个元素。
            step:指定迭代的步长,即迭代因子的迭代增量,默认是1
            items:将要迭代的集合对象
            var:当前迭代到的对象
            varStatus:当前正在遍历元素的状态对象。(其中count属性:当前遍历的位置,从1开始。)

属性名

是否支持EL

属性类型

属 性 描 述

var

false

String

指定将当前迭代到的元素保存到page这个Web域中的属性名称

items

true

任何支持的类型

将要迭代的集合对象

varStatus

false

String

指定将代表当前迭代状态信息的对象保存到page这个Web域中的属性名称

begin

true

int

如果指定items属性,就从集合中的第begin个元素开始进行迭代,begin的索引值从0开始编号;如果没有指定items属性,就从begin指定的值开始迭代,直到end值时结束迭代

end

true

int

参看begin属性的描述

step

true

int

指定迭代的步长,即迭代因子的迭代增量

    3.6 <c:forTokens>标签

    forTokens标签:循环切割特殊字符串。

属性名

是否支持EL

属性类型

属 性 描 述

Items

true

任何支持的类型

将要迭代的集合对象

delims

false

String

字符串的分割符,可以同时有几个分割符(依次写在引号内即可。)

varStatus

false

String

指定将代表当前迭代状态信息的对象保存到page这个Web域中的属性名称

begin

true

int

如果指定items属性,就从集合中的第begin个元素开始进行迭代,begin的索引值从0开始编号;如果没有指定items属性,就从begin指定的值开始迭代,直到end值时结束迭代

end

true

int

参看begin属性的描述

step

true

int

指定迭代的步长,即迭代因子的迭代增量

var

False

String

指定将当前迭代到的元素保存到page这个Web域中的属性名称

3.7 <c:redirect>标签

     < c:redirect > 标签用于将当前的访问请求转发或重定向到其他资源,它可以根据 url 属性所指定的地址,执行类似 < jsp:forward > 这个 JSP 标准标签的功能,将访问请求转发到其他资源;或执行 response.sendRedirect () 方法的功能,将访问请求重定向到其他资源。  

属性名

是否支持EL

属性类型

属 性 描 述

url

true

String

指定要转发或重定向到的目标资源的URL地址

 
验证Demo如下:
    
    
  1. <%@ page language="java" import="java.util.*, com.cn.entity.*" pageEncoding="UTF-8"%>
  2. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  4. <html>
  5. <head>
  6. <title>使用jstl核心标签库</title>
  7. <meta http-equiv="pragma" content="no-cache">
  8. <meta http-equiv="cache-control" content="no-cache">
  9. <meta http-equiv="expires" content="0">
  10. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  11. <meta http-equiv="description" content="This is my page">
  12. <!--
  13. <link rel="stylesheet" type="text/css" href="styles.css">
  14. -->
  15. </head>
  16. <body>
  17. <%--
  18. 使用jstl中的核心标签
  19. --%>
  20. <%-- set标签:保存数据(保存到域中),默认保存到page域中 --%>
  21. <h2>set标签:保存数据(保存到域中),默认保存到page域中,属性socope的值可为:page/request/session/application</h2>
  22. <c:set var="name" value="page1111"></c:set>
  23. 取出scope默认值(page域)中保存的数据:${name }<br/>
  24. <c:set var="name" value="page1111" scope="page"></c:set>
  25. 取出page域中保存的数据:${pageScope.name }<br/>
  26. <c:set var="name" value="request2222" scope="request"></c:set>
  27. 取出request域中保存的数据:${requestScope.name }<br/>
  28. <c:set var="name" value="session2222" scope="session"></c:set>
  29. 取出session域中保存的数据:${sessionScope.name }<br/>
  30. <c:set var="name" value="application2222" scope="application"></c:set>
  31. 取出application域中保存的数据:${applicationScope.name }<br/>
  32. <hr/>
  33. <%-- out标签:用于输出一段文本到浏览器中 --%>
  34. <h2>out标签:用于输出一段文本到浏览器中。也可以结合EL表达式,获取域中的值并输出。和EL表达式直接输出唯一区别是可以结合escapeXml属性和default属性作用</h2>
  35. 直接输出值:<c:out value="这里写什么,就直接输出什么"></c:out><br/>
  36. 默认从page域中获取数据:<c:out value="${name }"></c:out><br/>
  37. 用out标签从page域中获取数据:<c:out value="${pageScope.name }"></c:out><br/>
  38. 用out标签从request域中获取数据:<c:out value="${requestScope.name }"></c:out><br/>
  39. 用out标签从session域中获取数据:<c:out value="${sessionScope.name }"></c:out><br/>
  40. 用out标签从application域中获取数据:<c:out value="${applicationScope.name }"></c:out><br/>
  41. <%--
  42. out标签与el表达式有区别吗?详见下面的例子。
  43. out标签中的属性:
  44. default:当value的值为null后者""空时,可以输出默认值。但是el表达式只能输出空。
  45. escapeXml:是否对value值进行转义(指定是否将>、<、&、'、" 等特殊字符进行HTML编码转换后再进行输出。)
  46. false,转义,则将其中的html、xml解析出来。
  47. true,不转义(默认)
  48. --%>
  49. <%
  50. String msg = null;
  51. pageContext.setAttribute("msg", msg);
  52. %>
  53. out标签default属性的作用::<c:out value="${msg }" default="默认值:<h3>这里会原样输出吗?</h3>"></c:out><br/>
  54. out标签escapeXml属性的作用:<c:out value="${msg }" default="默认值:<h3>这里会原样输出吗?</h3>" escapeXml="false"></c:out><br/>
  55. out标签escapeXml属性的作用(使用EL表达式):<c:out value="${msg }" default="默认值:<h3>这里会原样输出吗?</h3>" escapeXml="${!(empty msg) }"></c:out><br/>
  56. EL表达式获取的值:${msg }
  57. <hr/>
  58. <%-- if标签:单条件的判断 --%>
  59. <h2>if标签:单条件的判断</h2>
  60. <c:if test="true">
  61. 条件成立,这里会显示出来。<br/>
  62. </c:if>
  63. <c:if test="${5>3 }">
  64. 条件成立,这里会显示出来。<br/>
  65. </c:if>
  66. <c:if test="${empty msg }">
  67. 条件成立,这里会显示出来。<br/>
  68. </c:if>
  69. <c:if test="false">
  70. 条件不成立,这里不会显示出来。<br/>
  71. </c:if>
  72. <c:if test="${5<3 }">
  73. 条件不成立,这里不会显示出来。<br/>
  74. </c:if>
  75. <%-- choose标签+when标签+otherwise标签:多条件的判断 --%>
  76. <h2>choose标签+when标签+otherwise标签</h2>
  77. <c:set var="score" value="83" scope="page"></c:set>
  78. 考试成绩为${score }分,成绩为:<c:choose>
  79. <c:when test="${score>=90 && score<=100}">优秀</c:when>
  80. <c:when test="${score>=80 && score<90}">良好</c:when>
  81. <c:when test="${score>=60 && score<80}">一般</c:when>
  82. <c:otherwise>不及格</c:otherwise>
  83. </c:choose>
  84. <hr/>
  85. <%-- forEach标签:循环 --%>
  86. <%
  87. //创建List集合数据
  88. List<Student> list = new ArrayList();
  89. list.add(new Student(1, "木丁西", '男', 24));
  90. list.add(new Student(2, "marry", '女', 18));
  91. list.add(new Student(3, "刘先森", '男', 59));
  92. //将集合保存到page域中
  93. pageContext.setAttribute("list", list);
  94. //创建Map集合数据
  95. Map<String, Student> map = new HashMap<String, Student>();
  96. map.put("004", new Student(4, "吴莫愁", '女', 32));
  97. map.put("005", new Student(5, "张馨予", '女', 35));
  98. map.put("006", new Student(6, "木先生", '男', 33));
  99. //将集合保存到page域中
  100. pageContext.setAttribute("map", map);
  101. %>
  102. <%--
  103. 注意我用c:set存储集合不行
  104. --%>
  105. <%-- <c:set var="list2" value="${list }"></c:set> --%>
  106. >>>>>>>>>>>>>>>>>>>${empty list }<c:out value="${list }" default="哈哈哈"></c:out>
  107. <h2>forEach标签:循环</h2>
  108. <%--
  109. forEach中的属性:
  110. begin:从集合中的第begin个元素开始进行迭代,begin的索引值默认从0开始编号。
  111. end:到哪个索引值结束,默认到最后一个元素。
  112. step:指定迭代的步长,即迭代因子的迭代增量,默认是1
  113. items:将要迭代的集合对象
  114. var:当前迭代到的对象
  115. varStatus:当前正在遍历元素的状态对象。(其中count属性:当前遍历的位置,从1开始。)
  116. --%>
  117. <%-- 遍历List --%>
  118. <c:forEach begin="0" end="2" step="1" items="${pageScope.list }" var="stu" varStatus="varSta">
  119. 第${varSta.count }个学生-->编号:${stu.id }#姓名:${stu.name }#性别:${stu.sex }#年龄:${stu.age }<br/>
  120. </c:forEach>
  121. <%-- 遍历Map --%>
  122. <c:forEach items="${map }" var="entry">
  123. ${entry.key }=${entry.value }【编号:${entry.value.id }#姓名:${entry.value.name }#性别:${entry.value.sex }#年龄:${entry.value.age }】<br/>
  124. </c:forEach>
  125. <hr/>
  126. <%-- forTokens标签:循环切割特殊字符串
  127. 其属性如下:
  128. items:将要迭代的集合对象
  129. delims:字符串的分割符,可以同时有几个分割符(依次写在引号内即可。)
  130. var:String类型,当前迭代的对象元素
  131. --%>
  132. <h2>forTokens标签:循环切割特殊字符串</h2>
  133. <%
  134. String str = "刘先生+java-php*net-python-木先生";
  135. pageContext.setAttribute("str", str);
  136. %>
  137. <c:forTokens delims="-*+" items="${str }" var="s" >
  138. ${s }<br/>
  139. </c:forTokens>
  140. <hr/>
  141. <%-- redirect:重定向
  142. --%>
  143. <h2>redirect:重定向</h2>
  144. <%-- <c:redirect url="http://www.baidu.com"></c:redirect> --%>
  145. <%-- <c:redirect url="/index.jsp"></c:redirect> --%>
  146. </body>
  147. </html>
效果:

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值