***
[jstl下载](https://pan.baidu.com/s/1ka9vyxk_o0NVpYUMrBwkmA)
***
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) 表 。
![](https://box.kancloud.cn/0b256f9edab5416b5c4bdc128737539b_930x195.png)
## 安装
直接把JSTL有关的两个jar包,拷贝进lib目录下
然后在jsp页面上添加指令,就可以使用了
~~~
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
~~~
## 功能
![](https://box.kancloud.cn/d2e0d30e6923dda8247acf2f3e2c0913_931x538.png)
#### 表达式操作
<c:out>
![](https://box.kancloud.cn/485c77e885ef245a476fee8ba7039df5_571x166.png)
value属性相对重要,其他两个作为了解
~~~
<h4>c:out</h4>
<%
request.setAttribute("book", "<<Java>>");
%>
// 把<>当成; 标签,无法正常进行解析
book:${ requestScope.book }
<br>
book:<c:out value="${ requestScope.book }" default="NoBook"></c:out>
~~~
<c:set>
<c:set>主要用来将变量储存至 JSP 范围中或是 JavaBean 的属性中。
![](https://box.kancloud.cn/0fec146330e5b47252cf058e2e89890e_865x249.png)
~~~
<c:set var="name" value="neusoft" scope="page"></c:set>
// 两者等效
<%
pageContext.setAttribute("name", "neusoft");
%>
name:${ pageScope.name }
~~~
~~~
<%
Customer customer = new Customer();
customer.setId(1001);
request.setAttribute("cus", customer);
%>
ID:${ requestScope.cus.id }
<c:set target="${ requestScope.cus }" property="id" value="1002"></c:set>
ID:${ requestScope.cus.id }
~~~
<c:remove>
<c:remove>主要用来移除变量。
~~~
<c:set value="1999-09-09" var="date" scope="session"></c:set>
date: ${ sessionScope.date }
<c:remove var="date" scope="session"/>
date: ${ sessionScope.date }
~~~
***
#### 流程控制
<c:if>
<c:if>的用途就和我们一般在程序中用的 if 一样
![](https://box.kancloud.cn/52c7b935eb30e3fdf7dfb5a54012bfe2_698x179.png)
~~~
<c:set value="33" var="age" scope="session"></c:set>
<!-- 没有else,但能储存结果 -->
<c:if test="${ sessionScope.age > 18 }">成年人</c:if>
<c:if test="${ sessionScope.age > 18 }" var="isAdult" scope="session"></c:if>
isAdult:<c:out value="${ sessionScope.isAdult }"></c:out>
~~~
<c:choose>
<c:choose>本身只当做 <c:when> 和 <c:otherwise> 的父标签。
<c:when> 和 <c:otherwise>也不能脱离<c:choose>。
<c:otherwise>必须在<c:when>之后使用。
~~~
<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>
~~~
***
#### 迭代操作
**<c:forEach>**
<c:forEach> 为循环控制,它可以将集合(Collection)中的成员循序浏览一遍。运作方式为当条件符合时,就会持续重复执行<c:forEach>的本体内容。
![](https://box.kancloud.cn/3b21ede43f9586fe39e6fa0215e58908_929x477.png)
~~~
<c:forEach begin="1" end="10" step="3" var="i">
${ i } --
</c:forEach>
~~~
遍历Collection(数组也一样)
~~~
<%
List<Customer> list = new ArrayList<Customer>();
list.add(new Customer(1001,"leo1","sheyang1","19012345678"));
list.add(new Customer(1002,"leo2","sheyang2","19012345678"));
list.add(new Customer(1003,"leo3","sheyang3","19012345678"));
list.add(new Customer(1004,"leo4","sheyang4","19012345678"));
list.add(new Customer(1005,"leo5","sheyang5","19012345678"));
request.setAttribute("list", list);
%>
<c:forEach items="${ requestScope.list }" var="customer">
${ customer.id } --${ customer.name } --${ customer.address } --${ customer.phone }<br><br>
</c:forEach>
~~~
~~~
// begin从0开始,step为步长,end为到哪结束,这样只能遍历出3条记录
<c:forEach items="${ requestScope.list }" var="customer" begin="0" step="2" end="4">
${ customer.id } --${ customer.name } --${ customer.address } --${ customer.phone }<br><br>
</c:forEach>
~~~
遍历Map集合
~~~
<%
Map<String,Customer> map = new HashMap<String,Customer>();
map.put("A",new Customer(1001,"leo1","sheyang1","19012345678"));
map.put("B",new Customer(1002,"leo2","sheyang2","19012345678"));
map.put("C",new Customer(1003,"leo3","sheyang3","19012345678"));
map.put("D",new Customer(1004,"leo4","sheyang4","19012345678"));
map.put("E",new Customer(1005,"leo5","sheyang5","19012345678"));
request.setAttribute("map", map);
%>
<c:forEach items="${ requestScope.map }" var="customer">
${ customer.key } --- ${ customer.value.id },${ customer.value.name },${ customer.value.address },${ customer.value.phone }<br><br>
</c:forEach>
~~~
遍历数组
~~~
<%
String str[] = {"aaa","bbb","ccc"};
// 一定要在某一个域对象当中,否则拿不到
request.setAttribute("names", str);
%>
<c:forEach items="${ requestScope.names }" var="name">${ name }--</c:forEach>
~~~
<c:forTokens>
类似于String类的split方法
~~~
<%
String str = "a,b,c,d,e";
request.setAttribute("str", str);
%>
<c:forTokens items="${ str }" delims="," var="str">${ str }<br></c:forTokens>
~~~
***
#### URL操作
<c:import>
<c:import> 可以把其他静态或动态文件包含至本身 JSP 网页。
~~~
<c:import url="http://www.baidu.com"></c:import>
~~~
<c:redirect>
<c:redirect>使当前JSP页面重定向到指定的页面(因为是交于服务器解析,所以这里的/代表的是WEB应用根目录)
~~~
<c:redirect url="/link.jsp"></c:redirect>
~~~
<c:url>
<c:url>可以产生一个url地址,可以根据Cookie是否可用,智能进行URL重写,对Get请求参数进行编码
~~~
<h1>JSTL Page</h1>
<c:url value="/link.jsp" var="testurl" scope="page">
<c:param name="name" value="东软睿道"></c:param>
</c:url>
url:${ testurl }
~~~
- 第一章 配置和安装Tomcat
- 第二章 Servlet(一)
- 第三章 Servlet(二)
- 练习 一 . Servlet配置级获取初始化参数
- 第四章 JSP(一)
- 第五章 JSP(二)
- 第六章 MVC设计模式
- 第七章 Cookie
- 第八章 Session
- 练习 二 . 简易版购物车
- 第九章 EL表达式
- 第十章 JSTL
- 第十一章 过滤器
- 第十二章 监听器
- 第十三章 文件的上传与下载
- 复习总结
- 如何手动启动Tomcat
- 如何修改Tomcat端口号
- 如何在web.xml中配置Servlet
- Servlet生命周期
- load-on-startup参数
- Servlet映射路径
- POST和GET的区别
- JSP中9个隐式对象及功能
- 请求转发及请求重定向的区别
- JSP指令有哪些
- 简述对MVC设计模式的理解
- 简述Cookie机制
- 简述Session机制
- HttpSession的生命周期
- Cookie和Session有什么区别
- 简述创建过滤器步骤
- 过滤器经典案例--统一编码字符集
- getParameter与getAttribute的区别
- JSP页面中可以包含哪些元素
- web应用中,是如何跟踪用户的
- InteliJ创建web项目