Javaweb-基於JSP的JSTL學習筆記

Javaweb-基於JSP的JSTL學習筆記

JSTL概述

JSP 標準標記庫(JSP Standard Tag Library,JSTL)是一個實現 Web 應用程序中常見的通用功能的定製標記庫集,這些功能包括迭代和條件判斷數據管理格式化XML 操作以及數據庫訪問。既然是第三方的東西,那麼就需要導包

導入標籤庫需要使用taglib指令!

以下是三個必學的標籤庫

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

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

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

CORE

out和set(重點)

out

<c:out value=”aaa”/> 輸出aaa字符串常量
<c:out value=”${aaa}”/> 與${aaa}相同
<c:out value=”${aaa}” default=”xxx”/> 當${aaa}不存在時,輸出xxx字符串
<%request.setAttribute("a","< script>alert('hello');< /script>");%><c:out value="${a }" default="xxx" escapeXml="false" /> 當escapeXml爲false,不會轉換“<”、“>”。這可能會受到JavaScript攻擊

set:set標籤的var、value、scope是一組

<c:set var=”a” value=”hello”/> 在pageContext中添加name爲a,value爲hello的數據。
<c:set var=”a” value=”hello” scope=”session”/> 在session中添加name爲a,value爲hello的數據。

if和choose(重點)

if標籤的test屬性必須是一個boolean類型的值,如果test的值爲true,那麼執行if標籤的內容,否則不執行

<c:set var="a" value="hello"/>
<c:if test="${not empty a }">
	<c:out value="${a }"/>
</c:if>

choose標籤對應Java中的if/else if/else結構

when標籤的test爲true時,會執行這個when的內容

當所有when標籤的test都爲false時,纔會執行otherwise標籤的內容

<c:set var="score" value="${param.score }"/>
<c:choose>
	<c:when test="${score > 100 || score < 0}">錯誤的分數:${score }    </c:when>
	<c:when test="${score >= 90 }">A級</c:when>
	<c:when test="${score >= 80 }">B級</c:when>
	<c:when test="${score >= 70 }">C級</c:when>
	<c:when test="${score >= 60 }">D級</c:when>
	<c:otherwise>E級</c:otherwise>
</c:choose>

forEach(重點)

forEach當然就是循環標籤了,下面例子中設置域變量i,初始值爲1,結束值爲10。即i的值從1遍歷到10,包含10

<c:set var="sum" value="0" />
<c:forEach var="i" begin="1" end="10">
	<c:set var="sum" value="${sum + i}" />
</c:forEach>
<c:out value="sum = ${sum }"/>

還可以使用forEach來遍歷數據或集合

遍歷數組

<%
String[] names = {"zhangSan", "liSi", "wangWu", "zhaoLiu"};
pageContext.setAttribute("ns", names);
%>
<c:forEach var="item" items="${ns }">
	<c:out value="name: ${item }"/><br/>
</c:forEach>

遍歷List

<%
	List<String> names = new ArrayList<String>();
	names.add("zhangSan");
	names.add("liSi");
	names.add("wangWu");
	names.add("zhaoLiu");
	pageContext.setAttribute("ns", names);
%>
<c:forEach var="item" items="${ns }">
	<c:out value="name: ${item }"/><br/>
</c:forEach>

遍歷map

<%
	Map<String,String> stu = new LinkedHashMap<String,String>();
	stu.put("number", "N_1001");
	stu.put("name", "zhangSan");
	stu.put("age", "23");
	stu.put("sex", "male");
	pageContext.setAttribute("stu", stu);
%>
<c:forEach var="item" items="${stu }">
	<c:out value="${item.key }: ${item.value }"/><br/>
</c:forEach>

forEach標籤還有一個屬性:varStatus,這個屬性用來指定接收“循環狀態”的變量名,例如:<forEach varStatus=”vs” …/>,這時就可以使用vs這個變量來獲取循環的狀態了

  • current當前這次迭代的(集合中的)項
  • index當前這次迭代從 0 開始的迭代索引
  • count當前這次迭代從 1 開始的迭代計數
  • first用來表明當前這輪迭代是否爲第一次迭代的標誌
  • last用來表明當前這輪迭代是否爲最後一次迭代的標誌
<c:forEach var="item" items="${ns }" varStatus="vs">
	<c:if test="${vs.first }">第一行:</c:if>
	<c:if test="${vs.last }">最後一行:</c:if>
	<c:out value="第${vs.count }行: "/>
	<c:out value="[${vs.index }]: "/>
	<c:out value="name: ${vs.current }"/><br/>
</c:forEach>

格式化標籤庫fmt

<%--
  Created by IntelliJ IDEA.
  User: JunSIr
  Date: 2020/1/15
  Time: 18:56
  To change this template use File | Settings | File Templates.
--%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
數字:<fmt:formatNumber value="1234567890" type="number"/><br/>
定製數字格式時,0表示一位數字,# 表示一位數字前導零和末尾零不展示<br/>
三位分割數字: <br>
數值:<fmt:formatNumber value="1234567890" type="number" pattern="#,#00.0#" /><br/>

貨幣:<fmt:formatNumber value="35000" type="currency" /><br/>
百分比:<fmt:formatNumber value="0.317" type="percent" /><br/>
</body>
</html>

EL函數庫fn

EL函數庫是由第三方對EL的擴展,我們現在學習的EL函數庫就是由JSTL添加的

EL函數庫就是定義一些有返回值的靜態方法。然後通過EL語言來調用它們!當然,不只是JSTL可以定義EL函數庫,我們也可以自定義EL函數庫

EL函數庫中包含了很多對字符串的操作方法,以及對集合對象的操作。例如:${fn:length(“abc”)}會輸出3,即字符串的長度。

我將常用的EL函數庫關於字符串的方法列於此處

String toUpperCase(String input):

String toLowerCase(String input):

int indexOf(String input, String substring):

boolean contains(String input, String substring):

boolean containsIgnoreCase(String input, String substring):

boolean startsWith(String input, String substring):

boolean endsWith(String input, String substring):

String substring(String input, int beginIndex, int endIndex):

String substringAfter(String input, String substring):

substringBefore(String input, String substring):

String escapeXml(String input):

String trim(String input):

String replace(String input, String substringBefore, String substringAfter):

String[] split(String input, String delimiters):

int length(Object obj):

String join(String array[], String separator):

不會一一講解,但還是把應用代碼與結果給出來

<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %><%--
  Created by IntelliJ IDEA.
  User: JunSIr
  Date: 2020/1/15
  Time: 18:56
  To change this template use File | Settings | File Templates.
--%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<%
String[] strs = {"a", "b","c"};
List list = new ArrayList();
list.add("a");
pageContext.setAttribute("arr", strs);
pageContext.setAttribute("list", list);
%>
${fn:length(arr) }<br/><!--3-->
${fn:length(list) }<br/><!--1-->
${fn:toLowerCase("Hello") }<br/> <!-- 變小寫hello -->
${fn:toUpperCase("Hello") }<br/> <!--變大寫 HELLO -->
${fn:contains("abc", "a")}<br/><!-- 是否包含true -->
${fn:containsIgnoreCase("abc", "Ab")}<br/><!-- 是否包含(忽略大小寫)true -->
${fn:contains(arr, "a")}<br/><!-- true -->
${fn:containsIgnoreCase(list, "A")}<br/><!-- true -->
${fn:endsWith("Hello.java", ".java")}<br/><!-- true -->
${fn:startsWith("Hello.java", "Hell")}<br/><!-- true -->
${fn:indexOf("Hello-World", "-")}<br/><!-- 5 -->
${fn:join(arr, ";")}<br/><!-- a;b;c -->
${fn:replace("Hello-World", "-", "+")}<br/><!-- Hello+World -->
${fn:join(fn:split("a;b;c;", ";"), "-")}<br/><!-- a-b-c -->

${fn:substring("0123456789", 6, 9)}<br/><!-- 678 -->
${fn:substring("0123456789", 5, -1)}<br/><!-- 56789 -->
${fn:substringAfter("Hello-World", "-")}<br/><!-- World -->
${fn:substringBefore("Hello-World", "-")}<br/><!-- Hello -->
${fn:trim("     a b c     ")}<br/><!-- a b c -->
${fn:escapeXml("<html></html>")}<br/> <!-- <html></html> -->
</body>
</html>

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章