JSTL详解,一篇文章足以

        今天在地铁刷公众号的时候看到这么一篇文章,JSTL详解,虽然现在已经很少项目用到了,页面的动态处理都是用饿Vue.js,不过当作复习一下也是挺好的,而且文章确实写的很简洁。

        说实话,JSTL的标签库我自己用过的就只有核心标签库,但是实际开发中常用到的估计不止这么一下,下面我们看一下这篇文章。

      转载自:公众号:Java大联盟,原创:南风。https://mp.weixin.qq.com/s/7YnCwq9fQ6CleqkZ8LRKew

什么是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.使用标签完成功能。

核心标签库

引入核心标签库。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

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>

 

版权声明:本文为Howinfun原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Howinfun/article/details/82751892