JSP標簽和JSTL

来源:https://www.cnblogs.com/vshen999/archive/2018/04/29/8917115.html
-Advertisement-
Play Games

Java的5個標簽庫:核心(c)、格式化(fmt)、函數(fn)、SQL(sql)、XML(x) SQL、XML庫不推薦使用 核心標簽庫(c) <c:out> <c:if> <c:choose>、<c:when>、<c:otherwise> <c:forEach>、<c:forTokens> <c: ...


Java的5個標簽庫:核心(c)、格式化(fmt)、函數(fn)、SQL(sql)、XML(x)

  SQL、XML庫不推薦使用

核心標簽庫(c)

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

   <c:out>

//<c:out>標簽用於在JSP中輸出內容
//有value、default、escapeXml三個屬性
//escapeXml用於對保留xml字元(<、>、'、"、、&)轉義,設為false禁止轉義
<c:out value="${someValue}" default="${defaultValue}"/>
//default可以寫在標簽內,用於設置預設值
<c:out value="${someValue}">${defaultValue}</c:out>

  <c:if>

//<c:if>用於控制是否渲染標簽內的內容
//有test、var、scope三個屬性
//test值為假,標簽中的所有內容都會被忽略
<c:if test="false">
    這的內容都會被忽略
</c:if>

  <c:choose>、<c:when>、<c:otherwise>

//<c:choose>不包含屬性,只作為<c:when>、<c:otherwise>的父標簽
//<c:choose>中至少包含一個<c:when>,至多包含一個<c:otherwise>,並且只能是最後一個標簽
<c:choose>
//<c:when>只包含一個test屬性
    <c:when test="someCondition">if</c:when>
    <c:when test="someCondition">else if</c:when>
    <c:otherwise>else</c:otherwise>
</c:choose>

  <c:forEach>、<c:forTokens>

//<c:forEach>類似於java中的for迴圈
//有items、begin、end、step、var、varStatus六個屬性
//java中的for迴圈
for(int i=0;i<100;i++)
    out.printfln(i);
//用<c:forEach>表示
//step預設值是1,可以不寫
<c:forEach var="i" begain="0" end="100" step="1">i</c:forEach>
//items表示要遍歷的集合、數組、Map、Iterator、Enumeration
//varStatus表示集合里的變數
<c:forEach items="lists" varStatus="student">
    ${student.name}
    ${student.number}
</c:forEach>
//<c:forTokens>的items是字元串
//<c:forTokens>標簽與<c:forEach>標簽有相似的屬性,只多一個delims屬性,delims是分隔符
<c:forTokens items="google,runoob,taobao" delims="," var="name"><c:out value="${name}"/></c:forTokens>

   <c:url>

//<c:url>標簽可以正確的對url編碼,常配合<c:param>使用
//有value、context、var、scope四個屬性
//context用於指定根路徑
//路徑是/index.jsp
<c:url  value="/index.jsp" context="/"/>
//路徑是/store/item.jsp
<c:url  value="/item.jsp" context="/store"/>
//var指定了用於創建和保存URL結果的EL變數,預設作用域是page,通過scope屬性更改作用域
<a href="<c:url  value="/index.jsp" var="homeUrl" scope="request"/>">測試url</a>

   <c:redirect>

//<c:redirect>標簽通過自動重寫URL來將瀏覽器重定向至一個新的URL,丟失<c:redirect>之後所有內容,可以和<c:param>一起使用
//有url、context兩個屬性
<c:redirect url="http://www.baidu.com"/>

   <c:import>

//可以獲取特定url資源的內容,這些內容可以保存在響應、字元串變數、Reader變數中,可以和<c:param>配合使用,用於指定url中的查詢參數
//有url、content、charEncoding、var、scope、varReader六個屬性
//url可以使相對路徑、絕對路徑
//charEncoding,當資源未返回Content-Type時使用
//scope指定var的作用域
//varReader中的Reader變數只能在<c:import>標簽內,不可以和var、<c:param>一起使用
//以下代碼列印百度源碼
<c:import var="data" url="http://www.baidu.com"/>
<c:out value="${data}"/>

  <c:param>

//<c:param>標簽用於設定跟url有關參數
//有name、value兩個屬性
<c:url var="myURL" value="main.jsp">
    <c:param name="name" value="abc"/>
    <c:param name="url" value="www.baidu.com"/>
</c:url>
<a href="/<c:out value="${myURL}"/>">
//輸出:/main.jsp?name=abc&url=www.baidu.com

  <c:set>、<c:remove>

//<c:set>標簽用於設置變數值和對象屬性
//有value、target、property、var、scope五個屬性
//修改對象的值
<c:set target="${someObject}" property="someProperty" value="hello"/>
//給某個變數賦值
<c:set var="salary" scope="session" value="${2000*2}"/>

//<c:remove>標簽用於移除一個變數,如果未指定作用域,所有名稱匹配的都會被移除
//有var、scope兩個屬性
<c:remove var="salary"/>

格式化標簽庫(fmt)

  國際化和本地化組件

    國際化和本地化由3個部分組成

    1.文本之間不同語言的轉換

    2.日期、時間、貨幣、百分比的格式化

    3.外國貨幣和本地貨幣的轉換(通常可忽略)

    在JSTL中提供了i18n標簽用於處理文本之間不同語言的轉換,提供了格式化標簽處理日期、時間、貨幣、百分比的格式化

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

  i18n標簽

    <fmt:bundle>、<fmt:setBundle>

      i18n標簽通過<fmt:setLocale>、<fmt:setBundle>指定資源包

      搜索資源的先後順序

      1.<fmt:message>中的bundle屬性指定的資源包

      2.內嵌在<fmt:bundle>中的資源包

      3.預設的本地化資源包

//定義english資源包
public class Example_En extends ListResourceBundle {
  public Object[][] getContents() {
    return contents;
  }
  static final Object[][] contents = {
  {"count.one", "One"},
  {"count.two", "Two"},
  {"count.three", "Three"},
  };
}
//定義Spanish資源包
public class Example_es_ES extends ListResourceBundle {
  public Object[][] getContents() {
    return contents;
  }
  static final Object[][] contents = {
  {"count.one", "Uno"},
  {"count.two", "Dos"},
  {"count.three", "Tres"},
  };
}
//<fmt:setBundle>用於載入指定的資源包
//屬性:basename、var、scope
<fmt:bundle basename="com.test.Example_En">
   <fmt:message key="count.one"/><br/>
   <fmt:message key="count.two"/><br/>
   <fmt:message key="count.three"/><br/>
</fmt:bundle>

//修改地區
<fmt:setLocale value="es_ES"/>
<fmt:bundle basename="com.test.Example_es_ES">
   <fmt:message key="count.one"/><br/>
   <fmt:message key="count.two"/><br/>
   <fmt:message key="count.three"/><br/>
</fmt:bundle>

    <fmt:message>

//<fmt:message>標簽用於將bundle里的key替換成對應的value
//屬性:key、bundle、var、scope
<fmt:setLocale value="en"/>
<fmt:setBundle basename="com.test.Example" var="lang"/>
<fmt:message key="count.one" bundle="${lang}"/><br/>
<fmt:message key="count.two" bundle="${lang}"/><br/>
<fmt:message key="count.three" bundle="${lang}"/><br/>  

    <fmt:setLocale>

//<fmt:setLocale>標簽用來將給定的區域存儲在locale配置變數中,正常情況不需要使用,國際化應用程式會在請求被轉發到JSP 中時自動進行區域設置
//屬性:value、variant、scope
<fmt:setLocale value="es_ES"/>     

    <fmt:requestEncoding>

    <fmt:requestEncoding>標簽用來指定返回給Web應用程式的表單編碼類型

    由於Servlet在<fmt:requestEncoding>之前處理請求, Servlet能修改字元編碼;現代瀏覽器會設定字元編碼內容類型請求和響應,故現在已經不需要這個標簽

  格式化標簽

    <fmt:timeZone>、<fmt:setTimeZone>

    格式化標簽優先順序

    1.格式化標簽中的timeZone屬性

    2.<fmt:timeZone>標簽內

    3.初始化參數中的

    4.JVM的時區

//<fmt:setTimeZone>標簽用來複制一個時區對象至指定的作用域
//屬性:value、var、scope
<fmt:setTimeZone value="America/Chicago" var="zone"/>
//<fmt:timeZone>標簽用來指定時區,供其它標簽使用
//屬性:value
<fmt:timeZone value="${zone}"></fmt:timeZone>

    <fmt:formatDate>、<fmt:parseDate>

//<fmt:formatDate>標簽用於使用不同的方式格式化日期
//屬性:value、type、dateStyle、timeStyle、pattern、timeZone、var、scope
//<fmt:formatDate>的value值必須是java.util.Data實例或者EL表達式,不支持java.util.Calendar、及java 8 Date
//type只能是DATE, TIME, 或 BOTH,分別表示只輸出日期、只輸出時間、輸出日期和時間
//dateStyle、timeStyle只能是FULL, LONG, MEDIUM, SHORT, 或 DEFAULT
//pattern用於自定義格式模式,不推薦
<c:set var="now" value="<%=new java.util.Date()%>" />
<p>日期格式化 (1): <fmt:formatDate type="time" 
            value="${now}" /></p>
<p>日期格式化 (2): <fmt:formatDate type="date" 
            value="${now}" /></p>
<p>日期格式化 (3): <fmt:formatDate type="both" 
            value="${now}" /></p>
<p>日期格式化 (4): <fmt:formatDate type="both" 
            dateStyle="short" timeStyle="short" 
            value="${now}" /></p>
<p>日期格式化 (5): <fmt:formatDate type="both" 
            dateStyle="medium" timeStyle="medium" 
            value="${now}" /></p>
<p>日期格式化 (6): <fmt:formatDate type="both" 
            dateStyle="long" timeStyle="long" 
            value="${now}" /></p>
<p>日期格式化 (7): <fmt:formatDate pattern="yyyy-MM-dd" 
            value="${now}" /></p>
/*輸出
日期格式化:
日期格式化 (1): 11:19:43
日期格式化 (2): 2018-4-29
日期格式化 (3): 2018-4-29 11:19:43
日期格式化 (4): 18-4-29 上午11:19
日期格式化 (5): 2018-4-29 11:19:43
日期格式化 (6): 2018年4月29日 上午11時19分43秒
日期格式化 (7): 2019-4-29
*/
//<fmt:parseDate>用於解析日期
//屬性與<fmt:formatDate>相同
<c:set var="now" value="20-10-2015" />
<fmt:parseDate value="${now}" var="parsedEmpDate" 
                              pattern="dd-MM-yyyy" />
<p>解析後的日期為: <c:out value="${parsedEmpDate}" /></p>

    <fmt:formatNumber>、<fmt:parseNumber>

//<fmt:formatNumber>標簽用於格式化數字,百分比,貨幣
//屬性:value、type、pattern、currencyCode、currencySymbol、groupingUsed、maxIntegerDigits、
minIntegerDigits、maxFractionDigits、minFractionDigits、var、scope
//value表示要顯示的數字 //type只能是NUMBER,CURRENCY,或 PERCENT類型 //currencyCode、currencySymbol貨幣碼、貨幣符號 <c:set var="balance" value="120000.2309" /> <p>格式化數字 (1): <fmt:formatNumber value="${balance}" type="currency"/></p> <p>格式化數字 (2): <fmt:formatNumber type="number" maxIntegerDigits="3" value="${balance}" /></p> <p>格式化數字 (3): <fmt:formatNumber type="number" maxFractionDigits="3" value="${balance}" /></p> <p>格式化數字 (4): <fmt:formatNumber type="number" groupingUsed="false" value="${balance}" /></p> <p>格式化數字 (5): <fmt:formatNumber type="percent" maxIntegerDigits="3" value="${balance}" /></p> <p>格式化數字 (6): <fmt:formatNumber type="percent" minFractionDigits="10" value="${balance}" /></p> <p>格式化數字 (7): <fmt:formatNumber type="percent" maxIntegerDigits="3" value="${balance}" /></p> <p>格式化數字 (8): <fmt:formatNumber type="number" pattern="###.###E0" value="${balance}" /></p> /* 數字格式化: 格式化數字 (1): ¥120,000.23 格式化數字 (2): 000.231 格式化數字 (3): 120,000.231 格式化數字 (4): 120000.231 格式化數字 (5): 023% 格式化數字 (6): 12,000,023.0900000000% 格式化數字 (7): 023% 格式化數字 (8): 120E3 */ //<fmt:parseNumber>標簽用來解析數字,百分數,貨幣 <c:set var="balance" value="1250003.350" /> <fmt:parseNumber var="i" type="number" value="${balance}" /> <p>數字解析 (1) : <c:out value="${i}" /></p> <fmt:parseNumber var="i" integerOnly="true" type="number" value="${balance}" /> <p>數字解析 (2) : <c:out value="${i}" /></p>

  函數庫(fn)

函數描述
fn:contains() 測試輸入的字元串是否包含指定的子串
fn:containsIgnoreCase() 測試輸入的字元串是否包含指定的子串,大小寫不敏感
fn:endsWith() 測試輸入的字元串是否以指定的尾碼結尾
fn:escapeXml() 跳過可以作為XML標記的字元
fn:indexOf() 返回指定字元串在輸入字元串中出現的位置
fn:join() 將數組中的元素合成一個字元串然後輸出
fn:length() 返回字元串長度
fn:replace() 將輸入字元串中指定的位置替換為指定的字元串然後返回
fn:split() 將字元串用指定的分隔符分隔然後組成一個子字元串數組並返回
fn:startsWith() 測試輸入字元串是否以指定的首碼開始
fn:substring() 返回字元串的子集
fn:substringAfter() 返回字元串在指定子串之後的子集
fn:substringBefore() 返回字元串在指定子串之前的子集
fn:toLowerCase() 將字元串中的字元轉為小寫
fn:toUpperCase() 將字元串中的字元轉為大寫
fn:trim() 移除首位的空白符

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ArrayList 實現原理:由數組實現的。元素有序,允許重覆。 //其中增長長度的方法,可以看到是創建一個新數組,傳入舊數組和新的數組長度。 private void grow(int minCapacity) { // overflow-conscious code int oldCapacit ...
  • At the beginning of every day, the first person who signs in the computer room will unlock the door, and the last one who signs out will lock the door ...
  • Given a non negative integer N, your task is to compute the sum of all the digits of N, and output every digit of the sum in English. Input Specificat ...
  • 傳遞多個參數的四種方式: 順序傳參:public User selectUser(String name,int deptId); <select id="selectUser" resultType="user">select * from user where user_name=#{0} an ...
  • 原文鏈接:https://www.codemore.top/cates/Backend/post/2018-04-21/spring-mvc-handler-methods 由註解@RequestMapping註解修飾的處理請求的函數的簽名非常的靈活,可以使用controller函數支持的一系列參數 ...
  • A family hierarchy is usually presented by a pedigree tree. Your job is to count those family members who have no child. Input Each input file contain ...
  • 二、springboot+mybatis的使用 1.springboot的註解:@SpringBootApplication :啟動項目:整合常用註解(@Configuration,@EnableAutoConfiguration,@ComponentScan)/掃包作用(只能在當前同級包下) @E ...
  • 作為一個Python Web 開發工程師,pyg0每天都喜滋滋的寫著基於各種web框架的業務代碼。 突然有一天,技術老大過來跟pyg0說,嘿,我們要新上線一個服務,你來幫我部署一下吧。不用太複雜。用gunicorn跑flask, 啟8個進程, 用gevent模式跑就可以。這個很好配,給你一個小時吧。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...