JSTP是一个标准的通用型标签库。
JSTL主要提供给javaweb开发人员各标准通用的标签函数库,标签库同时支持EL用于获取数据。用这个标签库可以取代传统直接在页面中嵌入java脚本的做法。
要使用JSTL需要先导入它的jar包,方法参照:方法
1.核心标签库
核心标签库主要分为以下四类:
通用标签,用于操作变量
条件标签,用于流程控制
迭代标签,用于循环遍历集合
URL标签库,用于针对URL相关的操作
导入方法:
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
通用标签:
1.<c:out>标签
主要用于输出数据
使用方法
<jsp:useBean id="person1" class="com.javabean.Person" scope="session"/> <jsp:setProperty property="name" name="person1" value="zhangsan"/> <%--out --%> <c:out value="${sessionScope.person1.name}" default="游客"/>
如果value中的值找不到,则显示default中的值
<c:out value="<b>粗体字</b>" escapeXml="true"/> <c:out value="<b>粗体字</b>" escapeXml="false"/>
escapeXml表示是否将> < & ' "等特殊字符进行HTML字符实体转换后再进行输出,默认值为true
上述例子中:第一个会输出<b>粗体字</b>,第二个会输出粗体字。
2.<c:set>标签
主要用于设置属性域属性
<%--set --%> <c:set var = "attr1" value="abc" scope="session"/> <c:out value="${sessionScope.attr1}" default="def"/>
3.<c:remove>标签
用于删除属性域中的属性
<%--remove --%> <c:remove var="attr1" scope="session"/> <c:out value="${sessionScope.attr1}" default="def"/>
4.<c:catch>标签
用于捕获嵌套再标签体重的内容抛出的异常
<%--catch --%> <c:catch var="myException"> <%=5/0%> </c:catch> <c:out value="${myException}"/> <c:out value="${myException.message}"/>
上述四个标签的效果:
游客 <b>粗体字</b> 粗体字 abc def java.lang.ArithmeticException: / by zero / by zero
条件标签:
<c:if>标签,用于进行条件判断
<jsp:useBean id="person1" class="com.javabean.Person" scope="session"/> <jsp:setProperty property="name" name="person1" value="zhangsan"/> <c:if test="true"> ${sessionScope.person1.name } </c:if>
<c:choose>标签,<c:when>标签,<c:otherwise>标签可以构造类似if..else等结构、
迭代标签:
1.<c:forEach>
var:用于指定当前迭代到的元素保存到page域中的属性名称
items:用于指定将要迭代的集合对象
varStatus:表示当前被迭代的对象的状态信息,包括四个属性,index(表示当前迭代成员的属性值)、count(表示当前已迭代的成员的数量)、first(表示当前迭代到的成员是否为第一个)、last(表示当前迭代到的成员是否为最后一个)
begin:表示遍历的起始索引,值为整数
end:表示遍历的结束索引,值为整数
step:表示迭代的步长,值为整数
迭代数组对象:
<% int arr[] = new int[5]; for(int i = 0; i < 5; i++){ arr[i] = i; } request.setAttribute("arr", arr); %> <c:forEach items = "${arr}" var="item"> ${item} </c:forEach>
迭代集合对象;
<% List<Person> list = new ArrayList<>(); list.add(new Person("张三",20,1)); list.add(new Person("李四",18,2)); list.add(new Person("王五",21,3)); session.setAttribute("list", list); %> <c:forEach items="${sessionScope.list}" var="person" varStatus="vst"> <br/>序号:${vst.index },信息:${person.name},${person.age} </c:forEach>
迭代Map对象:
<% Map<String, String> map = new HashMap<>(); map.put("一","abc"); map.put("二","def"); map.put("三","hij"); request.setAttribute("map", map); %> <c:forEach items="${requestScope.map }" var="e"> <p>${e.key}, ${e.value}</p> </c:forEach>
迭代指定次数:
<c:forEach begin="1" end="100" step="1" var="num"> <c:set var = "sum" value="${sum+num }"/> </c:forEach> ${sum}
<c:forTokens>标签:
可以按照指定的分隔符对字符串进行迭代
items用于指定将要迭代的字符串
delims用于指定一个或多个分隔符
varStatus表示当前被迭代到的对象的状态信息,包括四个属性,index(表示当前迭代的索引值),count(表示已迭代成员的数量),first(表示当前的成员是否是第一个),last(表示当前成员是否是最后一个)
begain指定从第begain个子字符串开始进行迭代,从0开始编号
end指定迭代到第end个字符串,从0开始编号
step指定迭代的步长,即每次迭代后的迭代因子增量
<c:set var = "str" value="a|b|c|d"/> <c:forTokens var = "e" items="${str }" delims="|"> <p>${e}</p> </c:forTokens>
URL相关标签:
提供了一些与URL操作相关的标签
value指定要构造的URL
var指定构造的属性名
scope指定够左的URL放到哪个域
context指定URL所属同一容器下的Web应用上下文
<c:param>指定参数
构造URL的两种方式
<c:url value="test.jsp?name=abc&value=123" var="u1"></c:url> <a href="${u1 }">查询1</a><br/> <c:url value="/test.jsp" var="u2" context="/JavaWeb" scope="page"> <c:param name="abc" value="123"/> </c:url> <a href="${u2 }">查询2</a><br/>
<c:redirect>
可以进行重定向
<c:url value="test.jsp" var="u3"/> <c:redirect url="${u3 }"/>
<c:import>
可以导入指定的url,而且是任意的url
<c:import url="test.jsp"/>
或
<c:import url="/test.jsp" context="/JavaWeb" var="u4" scope="page" charEncoding="utf-8"> <c:param name="abc" value="123/>" </c:import>
函数标签库:
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
函数名称 | 功能 |
contains(String string, String substring) | 判断string中是否包含substring |
containsIgnoreCase(String string, String substring) | 判断string中是否包含substring,不区分大小写 |
endsWith(String string, String suffix) | 判断string是否以suffix结尾 |
escapeXml(String string) | 将字符串中的xml/html等特殊字符转换为实体字符 |
indexOf(String string, String substring) | 查找string中substring第一次出现的位置 |
join(Strong[] array, String separator) | 将array中的字符以separator分隔符链接起来 |
length(Object item) | 返回元素的长度 |
replace(String string, String before,String after) | 用after替换string中before |
split(String string, String separator) | 以separator分隔符对string进行分割 |
startWith(String string, String prefix) | 判断字符串是否以prefix开头 |
substringAfter(String string, String substring) | 返回substring在string中后面的内容 |
substringBefore(String string, String substring) | 返回substring在string中前面的内容 |
toLowerCase(String string) | 将所有的字符转换为小写返回 |
toUpperCase(String string) | 将所有的字符转换为大写返回 |
trim(String string) | 取出string首尾的空格后返回 |
substring(String string, int begin, int end) | 返回string从begin到end的内容 |
自定义标签库:
自定义方法,需要继承SimleTagSupport并覆盖doTag方法
package com.myel; import javax.servlet.jsp.tagext.SimpleTagSupport; public class my_print extends SimpleTagSupport{ public void doTag() { System.out.println("hello"); } }
编写tld文档:
<?xml version="1.0" encoding="UTF-8" ?> <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0"> <!-- 标签库版本号--> <tlib-version>1.0</tlib-version> <!-- 简单名称 --> <short-name>my</short-name> <!-- 标签库的唯一名称 --> <uri>/eltest</uri> <!-- 定义一个标签 --> <tag> <!-- 标签名称 --> <name>print</name> <!-- 标签处理程序全名:保命+类名 --> <tag-class>com.myel.my_print</tag-class> <!-- 标签体体内容输出格式 --> <body-content>scriptless</body-content> </tag> </taglib>
JSP中调用标签:
<body> <my:print/> </body>
结果:
控制台输出hello