本博客为原创:综合 尚硅谷(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 %> 为域对象赋属性值

 <%@ page language="java" contentType="text/html; charset=UTF-8"
     pageEncoding="UTF-8"%>
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 <!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>
      <%
          request.setAttribute("book", "《java》");
      %>

     <h4>c:out</h4>
     <c:out value="${requestScope.book} " default="booktitle" ></c:out>
 </body>
 </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>

 

 <%@ 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>
     <h4>c:set</h4>
     <c:set var="name" value="jason"  scope="page"></c:set>
     name:${pageScope.name }

     <!-- 测试 封装javabean -->
     <%
         Customer customer = new Customer();
         customer.setName("Tom");
         request.setAttribute("bean",customer);

     %>
       name:${requestScope.customer.name }
       <c:set target="${requestScope.customer }" property="name" value="${param.name }"></c:set>
       name:${requestScope.customer.name }

 </body>
 </html>

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

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

 <%@ 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>
      <h3>c:remove</h3>
      <c:set value="1993.10" var="date" scope="session"></c:set>
      date:${sessionScope.date }
     <br><br>
     <br><br>
     <c:remove var="date" scope="session"/>
      date:${sessionScope.date }****

 </body>
 </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>

  

  

 <%@ 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>
     <h4>c:if</h4>
     <c:set  value="20" var="age" scope="request"></c:set>
      <c:if test="${requestScope.age > 18 }"> 成年了</c:if>

 </body>
 </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

  

 <%@page import="java.util.HashMap"%>
 <%@page import="java.util.ArrayList"%>
 <%@ 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" %>
 <%@ page import="java.util.List" %>
 <%@ page import="java.util.Map" %>
 <!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>

     <h4>c:forEach  可以对数组,Collection ,Map 进行遍历.begin(对于集合begin 从0开始计算),end,step</h4>

     <%
         List<Customer> list = new ArrayList<Customer>();
          list.add(new Customer("jason","西安","1","卡号15464646"));
          list.add(new Customer("tom","安康","5","卡号154646"));
          list.add(new Customer("jerry","西安","9","卡号1656446"));
          list.add(new Customer("kobe","西安","8","卡号15456486"));
          request.setAttribute("list", list);
     %>

     <!-- 遍历collection,遍历数组同colletino  -->
     <c:forEach items="${requestScope.list }"  var="cust" >
         ${cust.name }---${cust.address }---${cust.card }---${cust.cardType }<br>
     </c:forEach>

     <c:forEach items="${requestScope.list }"  var="cust"  begin="1" step="2" end="5">
         ${cust.name }---${cust.address }---${cust.card }---${cust.cardType }<br>
     </c:forEach>

 <br><br>
 <br><br>
 <br><br>
     <%
         Map<String , Customer> custMap = new HashMap<String , Customer>();
          custMap.put("a",new Customer("jason","西安","1","卡号15464646"));
          custMap.put("b",new Customer("tom","安康","5","卡号154646"));
          custMap.put("b",new Customer("jerry","西安","9","卡号1656446"));
          custMap.put("d",new Customer("kobe","西安","8","卡号15456486"));
          request.setAttribute("custMap", custMap);
     %>
     <c:forEach items="${requestScope.custMap }" var="cust">
         ${cust.key } - ${cust.value.name } - ${cust.value.address } - ${cust.value.cardType } - ${cust.value.card }<br><br>

     </c:forEach>

 </body>
 </html>

 

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

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

 

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

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

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

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

 <!-- about url  handle-->
 <c:import url="http://www.baidu.com"></c:import>

 <!-- 转发 -->
 <jsp:forward page=""></jsp:forward>
 <!-- 使当前页面重定向到指定的页面。  / 代表的是当前的web 应用的根目录-->
 <c:redirect url="/test.jsp"> </c:redirect>

 <!-- c:url  产生一个 url 地址,可以Cookie 是否可以用来智能进行 URL 重写,对 GET 请求的参数进行编码
      可以把产生的url 存储在域对象的属性中,还可以使用 c:url 会对参数进行自动转码
 -->
 <c:url value="/test.jsp" var="testurl">
     <c:param name="name" value="jason"></c:param>
 </c:url>
 url:${testurl }

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

  1. [原创]java WEB学习笔记95:Hibernate 目录

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  2. [原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  3. [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  4. [原创]java WEB学习笔记11:HttpServlet(HttpServletRequest HttpServletRsponse) 以及关于 Servlet 小结

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

  5. [原创]java WEB学习笔记83:Hibernate学习之路---双向 1-n介绍,关键点解释,代码实现,set属性介绍(inverse,cascade ,order-by )

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  6. [原创]java WEB学习笔记105:Spring学习---AOP介绍,相关概念,使用AOP,利用 方法签名 编写 AspectJ 切入点表达式

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  7. [原创]java WEB学习笔记100:Spring学习---Spring Bean配置:SpEL详细介绍及代码演示

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  8. [原创]java WEB学习笔记93:Hibernate学习之路---Hibernate 缓存介绍,缓存级别,使用二级缓存的情况,二级缓存的架构集合缓存,二级缓存的并发策略,实现步骤,集合缓存,查询缓存,时间戳缓存

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  9. [原创]java WEB学习笔记89:Hibernate学习之路-- -Hibernate检索方式(5种),HQL介绍,实现功能,实现步骤,

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

随机推荐

  1. tornado 学习笔记15 _ServerRequestAdapter分析

         继承于HTTPMessageDeletegate,是HTTPMessageDeletegate的一种实现,用于处理请求消息. 15.1 构造函数 def __init__(self, ser ...

  2. WebPack系列:Webpack编译的代码如何在tomcat中使用时静态资源路径不对的问题如何解决

    问题:     使用webpack+vue做前端,使用tomcat提供api,然后npm run build之后需要将编译,生成如下文件: |   index.html \---appserver   ...

  3. DevSecOps简介(二)

    越来越多的组织机构开始采取 DevOps 实践,作为呼应,本文将概括强调很多人认为这一实践缺失的部分:安全.随着 NV (网络虚拟化) 和 NFV (网络功能虚拟化)的使用率逐步攀升,在开发和部署流程 ...

  4. 【.Net--资料】

    1.http://msdn.microsoft.com/zh-cn/dn338450 2..NET Technology Guidance http://www.microsoft.com/net/n ...

  5. 函数组:FACS(FI/CO接口的FI服务)

    这个函数组可以执行与财务相关的各种检查,具体功能请自行发掘. 包含下列函数: ACC_ROUNDING_DIFF_DETERMINEACC_ROUNDING_DIFF_LINEITEMAC_KURSF ...

  6. BootStrap Progressbar 实现大文件上传的进度条

    1.首先实现大文件上传,如果是几兆或者几十兆的文件就用基本的上传方式就可以了,但是如果是大文件上传的话最好是用分片上传的方式.我这里主要是使用在客户端进行分片读取到服务器段,然后保存,到了服务器段读取 ...

  7. [解决]UserLibrary中的jar包不会自动发布Tomcat的lib目录下(基于MyEclipse2014)

    1.在工程名称上单击[右键] —— 单击[Properties]选项,点击后会弹出属性窗口: 2.选择[Properties]后在左侧树中找到[MyEclipse] —— [Deployment As ...

  8. 学IT技术 轻松高薪就业

    如今的社会是大鱼吃小鱼的时代,假设你没有过强的技术,是非常难在社会上立足,更不要谈占有一席之地了.假设你想学一门好技术,那你想知道如今学什么技术好吗?我想这要看如今市场须要什么人才,缺什么人才.同一时 ...

  9. MYSQL汇总

    一.1.1 MYSQL 一.1.1.1 基础特性 1)性能卓越,服务稳定,很少出现异常宕机: 2)开放源代码且无版权制约,自主性强,使用成本低: 3)历史悠久,社区及用户非常活跃,遇到问题,可快速获得 ...

  10. 阿里云SLB出现502 Bad Gateway 错误排查解决方法

    502 Bad Gateway The proxy server received an invalid response from an upstream server. 原本系统是通过一个SLB转 ...