zoukankan      html  css  js  c++  java
  • [原创]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>

    3.使用:

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

          

      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 %> 为域对象赋属性值


     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>

         

         

     

     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>

      

      

     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

      

     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

     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     
  • 相关阅读:
    Android入门:DDMS视图
    Android入门:EditText
    Hibernate入门:关联规则之多对一和一对多
    MyEclipse开发Rest服务入门
    Hibernate入门:使用C3P0连接池
    InfoQ:深入浅出REST
    二维码的编码与解码辅助类
    Android系统Resource之Drawable
    Android开发中的点滴
    粒子效果的简单实现
  • 原文地址:https://www.cnblogs.com/jasonHome/p/5656336.html
Copyright © 2011-2022 走看看