什么是JSTL?
JSP Standard Tag Library,简称JSTL,JSP标准标签库,提供了一系列的标签供开发者在JSP页面中使用,编写各种动态功能。
常用JSTL标签库
JSTL提供了很多标签,以库为单位进行分类,实际开发中最常用的标签库有3种。
1.核心标签库
2.格式化标签库
3.函数标签库
如何使用?
1.Maven添加JSTL依赖jar文件。
<dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency>
2.JSP页面导入JSTL标签库,prefix设置前缀,相当于别名,在JSP页面中可以直接通过别名使用标签,uri设置对应的标签库。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
3.使用标签完成功能。
核心标签库
引入核心标签库。
set:向域对象中添加一个数据。
var为变量名,value为变量值,scope为保存的域对象,默认为pageContext。
<%@ 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> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <c:set var="message" value="张三" scope="request"/> ${requestScope.message } </body> </html>
修改对象的属性值。
property为属性名,value为属性值,target为对象名,注意这里需要使用EL表达式。
<%@ 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.southwind.entity.Reader" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% Reader reader = new Reader(); request.setAttribute("reader", reader); %> <c:set value="张三" property="name" target="${reader}"></c:set> <c:set value="1" property="id" target="${reader}"></c:set> ${reader } </body> </html>
out:输出域对象中的数据。
value为变量名,default的作用是若变量不存在,则输出default的值。
<%@ 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> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <c:set var="message" value="张三" scope="request"/> <c:out value="${message }" default="未定义"></c:out> </body> </html>
<%@ 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> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <c:out value="${message }" default="未定义"></c:out> </body> </html>
remove:删除域对象中的数据。
var为要删除的变量名。
<%@ 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> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <c:set var="info" value="Java"></c:set> <c:remove var="info"/> <c:out value="${info }" default="未定义"/> </body> </html>
catch:捕获异常。
若JSP的Java脚本抛出异常,会直接将异常信息打印到浏览器。
<%@ 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> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% int num = 10/0; %> </body> </html>
使用catch可以将异常信息保存到域对象中。
<%@ 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> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <c:catch var="error"> <% int num = 10/0; %> </c:catch> <c:out value="${error }"></c:out> </body> </html>
if :流程控制。
test为判断条件,如果条件成立,会输出标签内部的内容,否则不输出。
<%@ 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> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <c:set value="1" var="num1"></c:set> <c:set value="2" var="num2"></c:set> <c:if test="${num1>num2}">${num1 } > ${num2 }</c:if> <c:if test="${num1<num2}">${num1 } < ${num2 }</c:if> </body> </html>
choose:流程控制。
相当于if-else的用法,when相当于if,otherwise相当于else。
<%@ 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> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <c:set value="1" var="num1"></c:set> <c:set value="2" var="num2"></c:set> <c:choose> <c:when test="${num1>num2}">${num1 }</c:when> <c:otherwise>${num2 } </c:otherwise> </c:choose> </body> </html>
forEach:迭代集合。
<%@ 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.southwind.entity.Reader" %> <%@ page import="java.util.*" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% Reader reader1 = new Reader(); reader1.setId(1); reader1.setName("张三"); Reader reader2 = new Reader(); reader2.setId(2); reader2.setName("李四"); Reader reader3 = new Reader(); reader3.setId(3); reader3.setName("王五"); List<Reader> list = new ArrayList<Reader>(); list.add(reader1); list.add(reader2); list.add(reader3); request.setAttribute("list", list); Map<Integer,Reader> map = new HashMap<Integer,Reader>(); map.put(1, reader1); map.put(2, reader2); map.put(3, reader3); request.setAttribute("map", map); Set<Reader> set = new HashSet<Reader>(); set.add(reader1); set.add(reader2); set.add(reader3); request.setAttribute("set", set); %> <c:forEach items="${list }" var="reader"> ${reader }<br/> </c:forEach> <hr/> <c:forEach items="${map }" var="reader"> ${reader }<br/> </c:forEach> <hr/> <c:forEach items="${set}" var="reader"> ${reader }<br/> </c:forEach> </body> </html>
格式化标签库
可以将日期和数字按照一定的格式进行格式化输出。
引入格式化标签库:
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
日期格式化:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <%@ page import="java.util.*" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% pageContext.setAttribute("date", new Date()); %> <c:out value="${date }"></c:out><br/> <fmt:formatDate value="${date }"/><br/> <fmt:formatDate value="${date }" pattern="yyyy-MM-dd hh:mm:ss" /> </body> </html>
数字格式化:
value为数值,maxIntegerDigits为整数位,maxFractionDigits为小数位。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <fmt:formatNumber value="32165.23434" maxIntegerDigits="2" maxFractionDigits="3"></fmt:formatNumber> </body> </html>
函数标签库
引入函数标签库。
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
函数标签库的使用与其他标签稍有区别,类似与EL表达式。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% pageContext.setAttribute("info", "Java,C"); %> 判断是否包含"Ja":${fn:contains(info,"Java") }<br/> 判断是否以"Ja"开始:${fn:startsWith(info,"Ja") }<br/> 判断是否以"C"结尾:${fn:endsWith(info,"C") }<br/> 求"va"的下标:${fn:indexOf(info,"va") }<br/> "Java"替换为"JavaScript":${fn:replace(info,"Java","JavaScript") }<br/> 截取:${fn:substring(info,2,3) }<br/> 以","分割:${fn:split(info,",")[1] } </body> </html>
原文链接:https://blog.csdn.net/Howinfun/article/details/82751892