1.JSTL简介
(1) JSTL是JSP的标准标签库
(2)JSTL为我们提供了一些常用的标签,供我们日常开发使用(if 、 if...else 、遍历 、 日期格式化)
(3)标签库
①core :核心标签库
- 最常用的一个标签库,也就是我们熟悉c标签。
②fn :函数标签库
- 函数标签库它需要结合EL表达式使用,主要定义了一些字符串操作的方法。
③fmt :格式化标签库
- 主要用来做日期、数字的格式化以及国际化
- 20151019 2015/10/19 10/19/2015
- 10000 10,000
④sql : 数据库标签库
- 主要用来在JSP中操作数据库的,已淘汰
⑤xml : xml标签库
- 主要用来在JSP操作解析XML文档,已淘汰
(4) JSTL的使用
使用JSTL需要先导入两个jar包
taglibs-standard-impl-1.2.1.jar
taglibs-standard-spec-1.2.1.jar
2.核心标签库
- 导入核心标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- 核心标签库一般使用c作为前缀,所以我们也称核心标签库为c标签。
- c标签是我们JSTL中最常用的一个标签库,它里边封装了很多开发中常用的功能。
① c:out
作用:向页面中输入一个内容,一般要结合EL表达式使用!
例子:<c:out value="" default="" escapeXml=""></c:out>
属性:
value : 要输出内容
default : 当内容为空时显示的默认值
escapeXml : 是否自动转义特殊字符,默认值为true 自动转义,一般不修改该属性
② c:set
作用:向域中设置一个属性
例子:<c:set var="name" value="孙悟空" scope="request"></c:set>
属性:
var :向域中存储的属性名
value :向域中存储的属性值
scope :向那个域中添加属性,四个可选值(page request session application),默认是page
③ c:remove
作用:移除域中的一个属性
例子:<c:remove var="name" scope="session"/>
属性:
var :要移除的属性的名字
scope :要移除的属性所在的域,四个可选值(page request session application)
如果不设置该属性,则默认移除四个域中指定属性。
④ c:if
作用 :相当于java中if语句
例子:
<c:if test="${empty param.name }">
<h3>您没有输入name属性!</h3>
</c:if>
属性:
test :接收一个boolean类型的值
如果test的值为true则标签体执行
否则不执行标签体
⑤c:choose c:when c:otherwise
作用:相当于if...else
例子:
<c:choose>
<c:when test="${param.score == 100 }">
<h3>恭喜您考了100分!</h3>
</c:when>
<c:otherwise>
<h3>恭喜你,你不及格!</h3>
</c:otherwise>
</c:choose>
属性:
when标签中的test属性:
接收一个boolean类型的值
如果test的值为true则标签体执行
否则不执行标签体
注意:在choose标签中可以指定多个when标签,但是只有一个when会执行。
当所有的when标签都不执行时,则otherwise标签执行。
c:when和c:otherwise不能脱离c:choose使用。
⑥c:forEach
作用:可以在页面中对集合进行遍历
例子:
<c:forEach items="${list}" var="hero">
${hero} <br />
</c:forEach>
<c:forEach items="${map }" var="user">
${user.key} --- ${user.value} <br />
</c:forEach>
属性:
items:要遍历的集合
var:对集合中的对象引用的名字
注意:在遍历Map时,返回的是一组一组的键值对结构
我们可以通过对象.key获取键,通过对象.value获取值
作用:可以用来遍历一组数
例子:
<c:forEach begin="1" end="20" var="index" step="1">
<a href=#>${index}</a>
</c:forEach>
属性:
begin :开始的位置,注意begin不能小于0
end :结束的位置
var :引用的名字
step :步长,每次自增的大小
⑦ c:url
作用:可以创建一个完整的绝对路径
例子:
<c:url value="/index.jsp">
<c:param name="name" value="孙悟空"></c:param>
<c:param name="age" value="18"></c:param>
</c:url>
属性:
value:要设置的地址,注意该地址要以/开头,否则不会加上项目名
在url标签中可以添加c:param标签,可以自动为地址拼接上请求参数。
⑧ c:redirect
作用:请求的重定向
例子:
<c:redirect url="/index.jsp">
<c:param name="name" value="唐僧"></c:param>
</c:redirect>
属性:
url:
重定向到目标地址,注意该地址不要自己添加项目名。
在redirect标签中可以添加c:param标签,可以自动为地址拼接上请求参数。
注意:redirect标签会自动为我们设置项目名,不需要我们手动设置!
代码示例:
1 <%@page import="java.util.Map"%> 2 <%@page import="java.util.HashMap"%> 3 <%@page import="java.util.Set"%> 4 <%@page import="java.util.HashSet"%> 5 <%@page import="java.util.List"%> 6 <%@page import="java.util.ArrayList"%> 7 <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 8 <%@ page language="java" contentType="text/html; charset=UTF-8" 9 pageEncoding="UTF-8"%> 10 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 11 <html> 12 <head> 13 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 14 <title>Insert title here</title> 15 </head> 16 <body> 17 18 <% 19 //有序可重复 20 List<Integer> list=new ArrayList<Integer>(); 21 list.add(1); 22 list.add(1); 23 list.add(2); 24 list.add(3); 25 request.setAttribute("list", list); 26 27 //无序不重复 28 Set<String> set=new HashSet<String>(); 29 set.add("张三"); 30 set.add("张三"); 31 set.add("张三1"); 32 set.add("张三2"); 33 set.add("张三3"); 34 set.add("张三4"); 35 request.setAttribute("set", set); 36 37 38 Map<String,String> map=new HashMap<String,String>(); 39 map.put("name1","tom"); 40 map.put("name1","tom"); 41 map.put("name2","mike"); 42 map.put("name3","jeny"); 43 request.setAttribute("map", map); 44 %> 45 <c:forEach items="${requestScope.list}" var="element"> 46 ${element} 47 </c:forEach> 48 49 <br/> 50 51 <c:forEach items="${requestScope.set}" var="element"> 52 ${element} 53 </c:forEach> 54 55 <br/> 56 57 <c:forEach items="${requestScope.map}" var="element" > 58 ${element.key}=${element.value} 59 </c:forEach> 60 61 <br/> 62 63 <c:forEach begin="0" end="20" var="num" step="2"> 64 ${pageScope.num}<br/> 65 </c:forEach> 66 </body> 67 </html>
运行结果:
3.设置绝对路径的三种方式:
1.<c:set var="ctx" value="${pageContext.request.contextPath }"></c:set>
使用这种方式,可以通过${ctx}在页面中代替项目名
2.使用<c:url value="/index.jsp"></c:url>
使用url标签,它会自动为绝对路径加上项目名
3.<base href="http://${pageContext.request.serverName }:${pageContext.request.serverPort }${pageContext.request.contextPath }/" />
使用base标签可以为页面中所有的相对路径,加上项目名
4.函数标签库
作用:函数标签库需要配合EL表达式使用,它里面的方法都是一些字符串的操作
引入函数标签库:<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
例子:
${fn:contains("hello","He") } <br /> 判断前一个字符串是否包含后一个字符串
${fn:containsIgnoreCase("hello","He") } <br /> 判断前一个字符串是否包含后一个字符串,不区分大小写
${fn:endsWith("hello","alo") }<br /> 判断前一个字符串是否以后一个字符串结尾
<!-- 自动将特殊字符转义 -->
${fn:escapeXml("<html></html>") }<br /> 自动将特殊字符进行转义
<!-- fn:join用于将一个String数组转换一个字符串,第二个参数代表的连接符 -->
${fn:join(strs,",") }<br /> 将一个String数组,以指定字符串拼接为一个新的字符串
${fn:split("a,b,c,d,e",",")[2] }<br /> 将一个字符串,以指定字符拆分为一个字符数组
${fn:trim(" abcd ") }<br /> 去掉字符串的前后空格
代码示例:
1 <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> 2 <%@ page language="java" contentType="text/html; charset=UTF-8" 3 pageEncoding="UTF-8"%> 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 <% 13 String[] str={"A","B","C"}; 14 request.setAttribute("str", str); 15 %> 16 17 ${fn:contains("heddd","ed")}<br/> 18 <!-- 假如参数string中包含参数substring,返回true --> 19 20 ${fn:containsIgnoreCase("heddd","eD")}<br/> 21 <!-- 假如参数string中包含参数substring(忽略大小写),返回true --> 22 23 ${fn:endsWith("zhangsss","gsss") }<br/> 24 <!-- 假如参数 string 以参数suffix结尾,返回true --> 25 26 ${fn:escapeXml("<script>alert('asds')</script>") }<br/> 27 <!-- 将有非凡意义的XML (和HTML)转换为对应的XML character entity code,并返回 --> 28 29 ${fn:indexOf("hello","e") }<br/> 30 <!-- 返回参数substring在参数string中第一次出现的位置 --> 31 32 ${fn:join(str,"-") }<br/> 33 <!-- 将一个给定的数组array用给定的间隔符separator串在一起,组成一个新的字符串并返回。 --> 34 35 ${fn:split("a-b-c","-")[0] } 36 <!-- 返回一个数组,以参数separator 为分割符分割参数string,分割后的每一部分就是数组的一个元素 --> 37 ${fn:split("a-b-c","-")[1] } 38 ${fn:split("a-b-c","-")[2] } 39 40 </body> 41 </html>
运行结果: