[原创]java WEB学习笔记43:jstl 介绍,core库详解:表达式操作,流程控制,迭代操作,url操作

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用

内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系。

本人互联网技术爱好者,互联网技术发烧友

微博:伊直都在0221

QQ:951226918

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1.JSTL 全名为 JavaServer  Pages  Standard  Tag  Library,目前最新的版本为 1.1

2. JSTL 1.1 简介

JavaServer Pages Standard Tag Library (1.1),它的中文名称为 JSP 标准标签函数库。JSTL
是一个标准的已制定好的标签库,可以应用于各种领域,如:基本输入输出、流程控制、循环、XML
文件剖析、数据库查询及国际化和文字格式标准化的应用等。从表 7-1 可以知道,JSTL 所提供的标
签函数库主要分为五大类:
(1)核心标签库(Core tag library)
(2)I18N 格式标签库(I18N-capable formatting tag library)

(3)SQL 标签库(SQL tag library)
(4)XML 标签库(XML tag library)
(5)函数标签库(Functions tag library)

JSTL       前置名称         URI 范例
核心标签库      c            http://java.sun.com/jsp/jstl/core <c:out>
I18N 格式标签库  fmt             http://java.sun.com/jsp/jstl/xml <fmt:formatDate>
SQL 标签库     sql           http://java.sun.com/jsp/jstl/sql <sql:query>
XML 标签库          xml          http://java.sun.com/jsp/jstl/fmt <x:forBach>
函数标签库     fn        http://java.sun.com/jsp/jstl/functions <fn:split>

[原创]java WEB学习笔记43:jstl 介绍,core库详解:表达式操作,流程控制,迭代操作,url操作

3.使用:

  1)导入相应的  jar 包 ,复制到web下的lib目录下

      [原创]java WEB学习笔记43:jstl 介绍,core库详解:表达式操作,流程控制,迭代操作,url操作

  2) 在jsp页面中使用

     在 JSP 中要使用 JSTL 中的核心标签库时,必须使用<%@ taglib %>指令,并且设定 prefix 和  uri 的值,通常设定如下:

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

4.core库的详细讲解

  1)表达式操作:

    ①out:<c:out>主要用来显示数据的内容,就像是<%= scripting-language %> 为域对象赋属性值

[原创]java WEB学习笔记43:jstl 介绍,core库详解:表达式操作,流程控制,迭代操作,url操作

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 5 <html>
 6 <head>
 7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 8 <title>Insert title here</title>
 9 </head>
10 <body>
11      <%
12          request.setAttribute("book", "《java》");
13      %>
14 
15     <h4>c:out</h4>
16     <c:out value="${requestScope.book} " default="booktitle" ></c:out>
17 </body>
18 </html>

    

    ②set:<c:set>主要用来将变量储存至 JSP 范围中或是 JavaBean 的属性中。可以为域赋属性值,其中value属性支持EL, 表达式;还可以为域对象中的JavaBean 的属性赋值,target,value 都支持El表达式

  I.  语法 1:将value 的值储存至范围为 scope 的varName 变量之中<c:set value="value" var="varName" [scope="{ page|request|session|application }"]/>

  II.  语法 2:将本体内容的数据储存至范围为 scope 的varName 变量之中

        <c:set var="varName" [scope="{ page|request|session|application }"]>
          … 本体内容
         </c:set>

  III.语法 3:将value 的值储存至target 对象的属性中< c:set value="value" target="target" property="propertyName" />

  VI.语法 4:将本体内容的数据储存至target 对象的属性中

        <c:set target="target" property="propertyName">
          … 本体内容
        </c:set>

     

   [原创]java WEB学习笔记43:jstl 介绍,core库详解:表达式操作,流程控制,迭代操作,url操作  

 

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 4 <%@ page import="com.jason.shoopingcart.bean.Customer" %>
 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     <h4>c:set</h4>
13     <c:set var="name" value="jason"  scope="page"></c:set>
14     name:${pageScope.name }
15     
16     <!-- 测试 封装javabean -->
17     <%
18         Customer customer = new Customer();
19         customer.setName("Tom");
20         request.setAttribute("bean",customer);
21         
22     %>
23       name:${requestScope.customer.name }
24       <c:set target="${requestScope.customer }" property="name" value="${param.name }"></c:set>
25       name:${requestScope.customer.name }
26 
27 </body>
28 </html>

    ③remove:<c:remove>主要用来移除变量 <c:remove var="varName" [scope="{ page|request|session|application }"] /> 

      移除指定域对象的指定属性

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 4 <%@ page import="com.jason.shoopingcart.bean.Customer" %>
 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      <h3>c:remove</h3>
13      <c:set value="1993.10" var="date" scope="session"></c:set>
14      date:${sessionScope.date }
15     <br><br>
16     <br><br>
17     <c:remove var="date" scope="session"/>
18      date:${sessionScope.date }****
19 
20 </body>
21 </html>

  2)流程控制

  ①<c:if> :<c:if>的用途就和我们一般在程序中用的 if 一样。没有else,但可以把判断的结果储存起来,以配之后使用

    语法 1:没有本体内容(body)    <c:if test="testCondition" var="varName"  [scope="{page|request|session|application}"]/>

    语法 2:有本体内容 <c:if test="testCondition" [var="varName"] [scope="{page|request|session|application}"]> 

                具体内容

              </c:if>

  [原创]java WEB学习笔记43:jstl 介绍,core库详解:表达式操作,流程控制,迭代操作,url操作

  

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 4 <%@ page import="com.jason.shoopingcart.bean.Customer" %>
 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     <h4>c:if</h4>
13     <c:set  value="20" var="age" scope="request"></c:set>
14      <c:if test="${requestScope.age > 18 }"> 成年了</c:if>
15 
16 </body>
17 </html>

  ②c:choose,c:when,c:otherwise : 可以实现if ... else if... else 的效果,比较麻烦 。

  其中:c:choose 以c:when, c:otherwise 的父标签出现,c:when c:otherwise 不能脱离 c:choose单独使用,c:otherwise 必须在c:when 之后使用

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page import="com.jason.shoopingcart.bean.Customer" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

    <c:choose>
            <c:when test="${param.age > 60 }"> 老年 </c:when>
            <c:when test="${param.age > 40 }"> 中年 </c:when>
            <c:when test="${param.age > 18 }"> 青年 </c:when>
            <c:otherwise> 未成年 </c:otherwise>
        
    </c:choose>
</body>
</html>

 

③迭代操作

  I. <c:forEach> <c:forEach> 为循环控制,它可以将集合(Collection)中的成员循序浏览一遍。运作方式为当条件符合时,就会持续重复执行<c:forEach>的本体内容。

   II.语法 1:迭代一集合对象之所有成员 <c:forEach [var="varName"] items="collection" [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]> 

                            本体内容
                      < /c:forEach>

  III.语法 2:迭代指定的次数  <c:forEach [var="varName"] [varStatus="varStatusName"] begin="begin" end="end" [step="step"]> 

                      本体内容
                  </c:forEach>

  <c:forEach> 除了支持数组之外,还有标准 J2SE 的集合类型,例如:ArrayList 、List 、LinkedList、Vector、Stack 和 Set 等等;另外还包括 java.util.Map 类的对象,例如:HashMap、

    Hashtable、Properties、Provider 和 Attributes

  [原创]java WEB学习笔记43:jstl 介绍,core库详解:表达式操作,流程控制,迭代操作,url操作

 1 <%@page import="java.util.HashMap"%>
 2 <%@page import="java.util.ArrayList"%>
 3 <%@ page language="java" contentType="text/html; charset=UTF-8"
 4     pageEncoding="UTF-8"%>
 5 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 6 <%@ page import="com.jason.shoopingcart.bean.Customer" %>
 7 <%@ page import="java.util.List" %>
 8 <%@ page import="java.util.Map" %>
 9 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
10 <html>
11 <head>
12 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
13 <title>Insert title here</title>
14 </head>
15 <body>
16     
17     <h4>c:forEach  可以对数组,Collection ,Map 进行遍历.begin(对于集合begin 从0开始计算),end,step</h4>
18     
19     <%
20         List<Customer> list = new ArrayList<Customer>();
21          list.add(new Customer("jason","西安","1","卡号15464646"));
22          list.add(new Customer("tom","安康","5","卡号154646"));
23          list.add(new Customer("jerry","西安","9","卡号1656446"));
24          list.add(new Customer("kobe","西安","8","卡号15456486"));
25          request.setAttribute("list", list);
26     %>
27     
28     <!-- 遍历collection,遍历数组同colletino  -->
29     <c:forEach items="${requestScope.list }"  var="cust" > 
30         ${cust.name }---${cust.address }---${cust.card }---${cust.cardType }<br>
31     </c:forEach>
32     
33     <c:forEach items="${requestScope.list }"  var="cust"  begin="1" step="2" end="5"> 
34         ${cust.name }---${cust.address }---${cust.card }---${cust.cardType }<br>
35     </c:forEach>
36     
37     
38 <br><br>
39 <br><br>
40 <br><br>
41     <%
42         Map<String , Customer> custMap = new HashMap<String , Customer>();
43          custMap.put("a",new Customer("jason","西安","1","卡号15464646"));
44          custMap.put("b",new Customer("tom","安康","5","卡号154646"));
45          custMap.put("b",new Customer("jerry","西安","9","卡号1656446"));
46          custMap.put("d",new Customer("kobe","西安","8","卡号15456486"));
47          request.setAttribute("custMap", custMap);
48     %>
49     <c:forEach items="${requestScope.custMap }" var="cust">
50         ${cust.key } - ${cust.value.name } - ${cust.value.address } - ${cust.value.cardType } - ${cust.value.card }<br><br>
51     
52     </c:forEach>
53     
54     
55     
56     
57     
58 </body>
59 </html>

 

  <c:forTokens> 用来浏览一字符串中所有的成员, 其成员是由定义符号(delimiters)所分隔的:

1 <!-- 处理字符串,用来浏览一字符串中所有的成员, 其成员是由定义符号(delimiters)所分隔的。类似于String 的 split()方法 -->
2 <c:set value="a,b,c,d;e,f,g;h" var="test" scope="request"></c:set>
3     <c:forTokens items="${requestScope.test }" delims="," var="s">
4             ${s }<br>    
5     </c:forTokens>
6     

 

4.URL 操作:JSTL 包含三个与 URL 操作有关的标签,它们分别为:<c:import>、<c:redirect>和<c:url>。它们主要的功能是:用来将其他文件的内容包含起来、网页的导向,还有 url 的产生

  ①<c:import>  可 以 把 其他 静 态 或 动 态 文 件 包含 至 本 身 JSP 网 页 。包含任何页面

  ②<c:redirect> 使当前页面重定向到指定的页面。  / 代表的是当前的web 应用的根目

  ③<c:url>主要用来产生一个 URL

[原创]java WEB学习笔记43:jstl 介绍,core库详解:表达式操作,流程控制,迭代操作,url操作

 1 <!-- about url  handle-->
 2 <c:import url="http://www.baidu.com"></c:import>
 3 
 4 <!-- 转发 -->
 5 <jsp:forward page=""></jsp:forward>
 6 <!-- 使当前页面重定向到指定的页面。  / 代表的是当前的web 应用的根目录-->
 7 <c:redirect url="/test.jsp"> </c:redirect>
 8 
 9 <!-- c:url  产生一个 url 地址,可以Cookie 是否可以用来智能进行 URL 重写,对 GET 请求的参数进行编码 
10      可以把产生的url 存储在域对象的属性中,还可以使用 c:url 会对参数进行自动转码 
11 -->
12 <c:url value="/test.jsp" var="testurl">
13     <c:param name="name" value="jason"></c:param>
14 </c:url>
15 url:${testurl }
16     
17