javaweb回顧第十篇JSTL

来源:http://www.cnblogs.com/LipeiNet/archive/2016/08/14/5768337.html
-Advertisement-
Play Games

前言:JSTL(JSP Standard Tag Library)JSP標準標簽庫。它的目的是為了簡化JSP的開發,如何沒有JSTL可能我們開發的時候就需要寫大量的自定義標簽,無疑會加大開發難度,有了JSTL以後我們就不需要寫那些普通的標簽(除非特殊的)這樣一來我們的開發效率也會提升,在這裡我主要講 ...


  前言:JSTL(JSP Standard Tag Library)JSP標準標簽庫。它的目的是為了簡化JSP的開發,如何沒有JSTL可能我們開發的時候就需要寫大量的自定義標簽,無疑會加大開發難度,有了JSTL以後我們就不需要寫那些普通的標簽(除非特殊的)這樣一來我們的開發效率也會提升,在這裡我主要講解一下http://java.sun.com/jsp/jstl/core標簽庫。

1:普通的標簽

JSTL普通標簽有<c:out>、<c:set>、<c:remove>、<c:catch>

1.1:<c:out>

首先為了使用JSTL標簽庫的內容我們先在maven項目中引入jar包,我使用的是

<dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
</dependency>

如果我們在聲明一下jsp的指令元素<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>,如果就可以進行我們的開發。out無疑是輸出的意思,所以<c:out>主要作用就是輸出我們的變數值,和腳本元素<%=%>有相同的功能。

<c:out>有三個屬性值,value,escapeXml,default。value就是我們要輸出的值,escapeXml是已轉換功能比喻<和&lt的轉換預設是true,default是預設值。下麵我們來寫一個<c:out>。

   <%
      int i=1+1;
      request.setAttribute("i", i);
    %>
<c:out value="${i}"></c:out>

如果運行我們就可以看到我們要的結果,有人說如果要是要標簽體怎麼辦,其實也很簡單,把value值置null即可,這個我們看下源碼

 public int doStartTag() throws JspException {

      needBody = false;            // reset state related to 'default'
      this.bodyContent = null;  // clean-up body (just in case container is pooling tag handlers)
      
      try {
    // print value if available; otherwise, try 'default'
    if (value != null) {
            out(pageContext, escapeXml, value);
        return SKIP_BODY;
    } else {
        // if we don't have a 'default' attribute, just go to the body
        if (def == null) {
        needBody = true;
        return EVAL_BODY_BUFFERED;
        }

在部分源碼中我們可以看見只要Default和value值為null就可以展示標簽體內部的值了比喻<c:out value='<%=null%>'>no</c:out>。

1.2:<c:set>

這個主要目的是設置範圍變數的值或者JavaBean的屬性。在這裡我就不再展示源碼,大家有興趣可以自己查閱。以講解為主

<c:set>有5個屬性,分別是value、var、scope、target、 property,value是被計算的表達式,var計算結果的名稱,scope是JSP的範圍預設為page,target要設置屬性的JavaBean對象,最後一個是設置對象的屬性。下麵用例子讓大家更加清晰

現在我要設置一個num=1+1的值並且保存在Session中,那麼用<c:set>就是<c:set var="num" value="${1+1}" scope="session"></c:set>然後我們就可以引用這個值了

<c:out value="${num}"></c:out>。那麼如果是JavaBean對象呢我們就要用上target屬性了。如下

  <%
        UserBean userBean = new UserBean();
        pageContext.setAttribute("userBean", userBean);
    %>
    <c:set target="${userBean}" property="age" value="18">
    </c:set>
    <c:set target="${userBean}" property="userName" >張三</c:set>
    <c:out value="${userBean.age}"></c:out>
    <c:out value="${userBean.userName}"></c:out>

1.3:<c:remove/>

這個主要移除範圍變數,有2個屬性,var和scope。var要移除變數的名稱,scope是jsp的範圍,預設值是page。

比喻我要移除上面的userBean就是<c:remove var="userBean"  scope="session"/>意思就是移除Session中一個叫做userBean的屬性。

1.4:<c:catch>

 這個表示捕獲異常,其中有一個var屬性,表示把這個異常賦值給var。代碼如下

<c:catch var="exception">
    <%
    String userName="zhangsan";
    %>
    </c:catch>
<c:out value="${exception}"></c:out>

2:條件標簽

條件標簽包括<c:if>、<c:choose>、<c:when>、<c:otherwise>

2.1:<c:if>

這個意思很明顯就是實現java中if語句功能的。其中有三個屬性:test、var、scope。test表示測試的條件比喻(1>0),var表示測試結果導出來的名稱,scope表示範圍。預設為page。例子如下

<c:if test="${1<2}" var="testName" scope="application"></c:if>
<c:out value="${testName}"></c:out>

所以我們開發的時候可以通過<c:if>來作為一個判斷語句,其他地方直接拿來用。

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

這個相當於Switch,case,Default。在我自定義標簽那篇提及過。其中<c:when>有一個屬性就是test是判斷的結果。舉個簡單例子如下

<c:choose>
        <c:when test='${user}=="zhangsan"'>
            <c:out value="張三"></c:out>
        </c:when>
        <c:when test='${user}=="lisi"'>
    李四
    </c:when>
        <c:otherwise>
    無匹配
    </c:otherwise>
</c:choose>

3:迭代標簽

迭代標簽有2個一個是<c:forEach>,另一個是<c:forTokens>

3.1:<c:forEach>

這個主要針對包含多個對象集合進行迭代顯示。它有6個屬性,var、items、varStatus、begin、end、step。var表示迭代的對象,items表示要被迭代的集合對象,varStatus表示當前迭代對象的狀態,begin被迭代對象集合從哪個開始(預設是從第一個開始迭代),end表示被迭代對象集合從哪個結束(預設全部迭代完),step迭代的步長預設是1。

同樣舉個例子

ArrayList al = new ArrayList();
        UserBean user1 = new UserBean("zhangsan", 25, "[email protected]");
        UserBean user2 = new UserBean("lisi", 15, "[email protected]");
        UserBean user3 = new UserBean("wangwu", 35, "[email protected]");
        al.add(user1);
        al.add(user2);
        al.add(user3);
<c:forEach var="userBean" items="<%=al%>" varStatus="status">
            <tr>
                <td><c:out value="${userBean.age}"></c:out></td>
                <td>${userBean.userName}</td>
                <td>${status.count}</td>
                <td>${status.index}</td>
                <td>${status.first}</td>
                <td>${status.last}</td>
            </tr>
        </c:forEach>

我們看下結果

其中從結果我們可以看出varStatus的作用主要是判斷當前迭代對象的一個狀態,比statu.last表示判斷是否是最後一個對象。

3.2:<c:forTokens>

這個標簽主要針對字元串,比喻String userNames="li;zhang;zhao"這個時候這個標簽就可以迭代把他們輸出來。這個屬性和上面標簽一樣,但是多了一個delims表示分割符。

String str="張三,李四,王五,";
<c:forTokens items="<%=str%>" delims="," var="name">
            <td><c:out value="${name}"></c:out></td>
</c:forTokens>

4:URL相關的標簽

Url標簽包含<c:import>、<c:url>、<c:redirect>、<c:param>

4.1:<c:param>

是作為一個URL請求添加的參數,主要和<c:url>,<c:redirect>等配合使用

4.2:<c:url>

可以用<c:url>來定義一個URL鏈接在另一個url出引用。有4個屬性value、var、context、scope。value是要處理的url,var是要 導入url範圍變數的名稱,context是指定上下文的名字scope是JSP範圍預設page。同樣舉個例子

比喻我先定義一個url<c:url value="http://www.cnblogs.com/cate/java/" var="myurl" scope="session"></url>,然後我就可以直接引用了<a href='<c:out value="${myurl}"></c:out>'>博客園</a>,如果我要加請求參數怎麼辦呢,就要把上面的url改成

<c:url value="http://www.cnblogs.com/cate/java/" var="myurl" scope="session">
    <c:param name="userName" value="zhangsan"></c:param>
    <c:param name="password" value="123456"></c:param>
</c:url>

我們運行看下結果是否把請求參數加上了

4.3:<c:redirect>

這個表示重定向,有2個屬性,一個是url表示定向到哪個地址,另一個則是content表示上下文的路徑。這個很簡單,寫法如下

<c:redirect url="${myurl}"></c:redirect>當然也可以加上請求的參數

<c:redirect url="${myurl}">
<c:param name="userName" value="zhangsan"></c:param>
</c:redirect>

4.4:<c:import>

這個表示要導入的資源,可以是一張照片,也可以是一個網站,(不僅可以導入本應用程式的資源也可以導入其他網站的資源)

 


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

-Advertisement-
Play Games
更多相關文章
  • 先上效果圖 這個效果來自於三星S5的充電界面,當然有些細節差別,主要看思路.本文目的是技術交流,不要將效果直接運用於商業產品和項目. 電池背景 因為電池內部有好幾個部分,所以本例用了一個Grid來做背景,用Clip屬性剪切出一個電池的輪廓,這樣不僅顯示出一個電池的輪廓,還可以避免水波和氣泡跑顯示Gr ...
  • 一、介簡 easyliter框架的升級版本,並且正式命名為SqliteSugar框架,另外Sugar系列還有 MySql和MsSql版本,Oracle版本待開發中(因為客戶端太大一直在憂郁當中) 用Sqlite 也不址什麼高性能了,好用為主。 經過一天的努力,Sqlite 版本所有的例子都已經測試通 ...
  • 1.為什麼使用緩存 hibernate使用緩存減少對資料庫的訪問次數,從而提升hibernate的執行效率。hibernate中有兩種類型的緩存:一級緩存和二級緩存。 2.一級緩存 Hibenate中一級緩存,也叫做session的緩存,當調用session的save/saveOrUpdate/ge ...
  • Partial 部分方法顧明思議是方法的一部分,不完整的,在ide編譯時候,會將所有部分方法載入到一起統一編譯,如果分部方法沒有被實現,編譯器就不會、對他們進行編譯。 局部類型的限制 (1) 局部類型只適用於類、介面、結構,不支持委托和枚舉。(2) 同一個類型的各個部分必須都有修飾符 partial ...
  • Duktape 的 C 語言源文件和頭文件可用於任何構建系統,只需將它們加入到你的項目中參與構建即可。 ...
  • Duktape 是一個輕量級的嵌入式 JavaScript 引擎,專註於可移植性和低占用率。 Duktape 可以被輕鬆地集成進一個 C/C++ 項目中:只需要將 duktape.c、duktape.h 和 duk_config.h 三個文件加入你的構建項目中,並使用 Duktape API 來實現... ...
  • 1 面向對象的三個原則 封裝性 封裝的基本單元是類(class),類是一個抽象的邏輯結構,而類的對象是一個真實的物理實體;類的目的是封裝複雜性,在類內部存在隱藏實現複雜性機制; 封裝(encapsulation) 的兩個好處: 模塊化:可以獨立於其他對象的源代碼進行編寫和維護,可以很容易的將對象在系 ...
  • python操作Mysql,很方便,使用的MySQLdb的庫,基本的操作如下: 查詢: 插入數據: 使用過程中遇到了編碼的問題,使用utf-8解決編碼問題: 還有遇到反斜杠的問題,mysql預設把反斜杠轉義了,我的解決方法是將反斜杠換成雙反斜杠: mysql語句需要格式化字元串,查詢的sql字元串需 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...