本博客为原创:综合 尚硅谷(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. iOS项目工程添加.a文件遇到的Dsymutil Error

    将.a文件加入工程,很多教程讲的都是: 右键选择Add->Existing Files…,选择.a文件和相应的.h头文件.或者将这两个文件拖入XCode工程目录结构中,在弹出的界面中勾选Copy ...

  2. 怎么以最新汇率牌价计算XX美元相当于多少人民币

    http://www.meiguozhuji.com/exchange-rate 美国主机都是以美元来报价的,至于XX美元相当于多少人民币,很多朋友都不太清楚.为了让大家更直接的了解购买美国主机需要花 ...

  3. 无法连接到服务器,用户xxx登陆失败"

    无法连接到服务器,用户xxx登陆失败" 该错误产生的原因是由于SQL Server使用了"仅 Windows"的身份验证方式, 因此用户无法使用SQL Server的登录 ...

  4. 让UITableView进入编辑模式

    1.UITableView对象有一个editing属性,设为YES时,该对象会进入编辑模式(editing mode).表格视图进入编辑模式后,用户可以管理表格中得行,如改变行的排列顺序.增加行或删除 ...

  5. hdu2767之强联通缩点

    Proving Equivalences Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  6. Redis源码阅读-sds字符串源码阅读

    redis使用sds代替char *字符串, 其定义如下: typedef char *sds; struct sdshdr { unsigned int len; unsigned int free ...

  7. mysql导出数据库提示警告在GTID模式下面

    [root@db02 tmp]# mysqldump -S /tmp/mysql.sock -A -R --triggers --master-data=2 --single-transaction ...

  8. 11 Memcached 缓存雪崩现象

    一:Memcached 缓存雪崩现象(1)造成原因:一般是由某个节点失效,导致其他的节点的缓存命中率下降,缓存中缺失的数据查询,短时间内造成的数据库服务器奔溃.重启DB,短期内又被压垮,但缓存的数据增 ...

  9. unity一些知识

    有一个问题就是在Inspector面板修改 WheelNumber的数值后,运行项目,当项目停止的时候,WheelNumber 的数据又回到以前的数据,(数据未保存成功,数据丢失) 解决办法需要在 修 ...

  10. Lumen开发:结合Redis实现消息队列(2)

    上一篇讲了Lumen配置Redis,现在来讲一下,如何实现消息队列 2.编写任务类 2.1  任务类结构 默认情况下,应用的所有队列任务都存放在app/Jobs目录.任务类非常简单,正常情况下只包含一 ...