天天看點

JavaWeb(EL表達式和JSTL)第七章 EL表達式和JSTL

EL表達式和JSTL

  • 第七章 EL表達式和JSTL
    • 7.1 初識JavaBean
      • 概述
      • BeanUtils工具
    • 7.2 EL表達式
      • EL中辨別符正斜杠
      • EL中的關鍵字
      • EL中的變量
      • 常量
      • EL中的運算符
      • 比較運算符
      • 邏輯運算符
      • empty運算符
      • 條件運算符
      • “()”運算符
      • 優先級
      • EL隐式對象
    • 7.3 JSTL
      • 什麼是JSTL
      • Core标簽庫

第七章 EL表達式和JSTL

資料和功能重複使用,便于移植,Sun公司提出“JavaBean技術”,使用JavaBean技術可以對這些資料和功能進行封裝,做到一次編寫,到處運作。

為了降低JSP頁面的複雜度,增強代碼重用性,Sun公司制定了一套标準标簽庫JSTL,同時為了擷取Servlet域對象中存儲的資料,JSP2.0規範裡提供EL表達式。

7.1 初識JavaBean

概述

重複使用的軟體元件,本質上就是Java類。

  • 必須具有一個 公共的無參構造方法。
  • 提供公共的get set方法

BeanUtils工具

方法聲明 功能描述
static void populate(Object bean,Map<String,?extends Object> properties) 根據指定的名稱/值為相應的JavaBean屬性設定值
static void setProperty(Object bean,String name,Object value) 根據指定的屬性值,傳入的類型要求能轉換成相應的屬性的類型
static String getProperty(Object bean,String name) 傳回指定bean指定屬性的值,傳回值為String類型

7.2 EL表達式

為了擷取Servlet域對象中存儲的資料,代碼更簡潔友善

EL中辨別符正斜杠

使用符号标記一些名稱,如變量名、自定義函數名等,這些符号被稱為辨別符。EL辨別符由任意大小寫字母、數字和下劃線組成。

  • 不能那個以數字開頭
  • 不能是EL中的關鍵字
  • 不能是隐式對象
  • 不能包含單引号(’)、(")、(-)和 (/)等特殊字元。

EL中的關鍵字

and eq gt true instanceof or ne le false empty not lt ge null div mod

EL中的變量

${product}

常量

EL中的常量又稱為字面量,它是不能改變的資料。

  1. 布爾常量

    true or false

  2. 整型常量

    取值範圍是Java語言定義的常量Long.MIN_VALUE 到 Long.MAX_VALUE 之間

  3. 浮點數常量 雙精度
  4. 字元串常量

    本身包含的單引号雙引号反斜杠需要進行轉義, 前面再加個反斜杠()

  5. Null常量

    Null常量用于表示變量引用的對象為空,隻有一個值null

EL中的運算符

點運算符(.) 方括号運算符( [] ) 算術運算符( + - * /或div %或mod )

比較運算符

==(eq) !=(ne) <(it) >(gt) <=(le) >=(ge)

避免與JSP頁面的标簽産生沖突,後面四重通常用括号内的。

邏輯運算符

&&(and) ||(or) !(not)

empty運算符

判斷某個對象是否為null或者" "

${empty var}

變量不存在,變量值為null, 變量為集合且不包含任何元素

條件運算符

${A?B:C}

“()”運算符

優先級

優先級 運算符
1 []
2 ()
3 - not ! empty
4 * / div % mod
5 + -
6 < > <= >= lt gt le ge
7 == != eq ne
8 && and
9 or 短路或
10 ? :

注意: EL表達式取值,沒有數組的下标越界,沒有空指針異常,沒有字元串的拼接。

EL隐式對象

隐含對象名稱 描述
pageContext 對應于JSP頁面中的pageContext對象 ,可以擷取jsp其他八個隐式對象
pageScope 代表page域中用于儲存屬性的Map對象
requestScope 代表request域中用于儲存屬性的Map對象
sessionScope 代表session域中用于儲存屬性的Map對象
applicationScpope 代表application域中用于儲存屬性的Map對象
param 儲存所有請求參數的Map對象
paramValues 儲存所有請求參數的Map對象,對于某個請求參數,傳回的是一個String類型數組
header 儲存了所有HTTP請求頭字段的Map對象
headerValues 儲存所有HTTP請求頭字段的Map對象,傳回String類型數組
cookie 用來取得使用者的cookie,cookie類型是Map
initParam 儲存了所有Web應用的初始化參數的Map對象

7.3 JSTL

降低JSP頁面的複雜度,增強代碼重用性。Sun公司定制了一套标準标簽庫,簡稱JSTL。

什麼是JSTL

JSTL雖然被稱為标準标簽庫,實際上這個标簽庫由5個不同的标簽庫共同組成

标簽庫 标簽庫的URI 建議使用字首
Core http://java.sun.com/jsp/jstl/core c
l18n http://java.sun.com/jsp/jstl/fmt fmt
SQL http://java.sun.com/jsp/jstl/sql sql
XML http://java.sun.com/jsp/jstl/xml x
Functions http://java.sun.com/jsp/jstl/functions fn
  • Core

    核心标簽庫 實作Web應用通用操作的标簽 。例如 <c:out> <c:if> <c:forEach>

  • l18n

    國際化或格式化标簽,包含實作Web應用中國際化标簽和格式化标簽。例如,JSP頁面的本地資訊,設定JSP頁面的時區,使日期按照本地格式顯示等。

  • SQL标簽庫

    包含用于通路資料庫和對資料庫中的資料進行操作的标簽。資料庫中獲得資料庫連接配接,從資料庫表中檢索資料等。一般不用

  • XML

    一個操作文檔的标簽庫,包含對XML文檔中資料進行操作的标簽。解析XML檔案,輸出XML文檔中的内容,疊代處理XML文檔中的元素。處理XML文檔很友善

  • Functions

    函數标簽庫,提供一套自定義EL函數,包含了JSP網頁制作者經常用到的字元串操作。

<%@ taglib  uri=" xxx " prefix="x" %>
//使用taglib指令導入Core标簽庫
           

Core标簽庫

  • <c:out>
<c:out value="value" [default="defaultValue"] // 預設值
[escapeXml="true|false"]/>//特殊字元是否HTML轉碼
           
  • <c:if>
<c:if text="textCondition" var="result" //條件  變量
[scope="{page | request | session | application }"] > //變量範圍
标簽體 //條件為真執行标簽體
</c:if> 
           
  • <c:choose>

    有點類似switch,與<c:when> <c:otherwise>

<c:choose>
<c:when test="${xxx}">
xxx
</c:when>
<c:otherwise>
xxx
</c:otherwise>
</c:choose>
           
  • <c:forEach>

    對集合對象進行循環疊代操作,Set List Map 數組 等

//文法1: 疊代包含多個對象的集合
<c:forEach [var="varName"] items="collection" [varStatus="varStatusName"]
[begin="begin"] - [end="end"]  - [step="step"]
body content
</c:forEach>
           
//文法2: 疊代指定範圍的集合
<c:forEach [var="varName"] - [varStatus="varStatusName"] begin="begin"
end="end" [step="step"]>
body content
</c:forEach>
           
  1. var目前疊代元素儲存到page域中的名稱
  2. items 用于指定要疊代的集合
  3. varStatus 指定目前疊代狀态資訊的對象儲存到page域中的名稱
  4. begin從第幾個元素開始疊代 索引從0開始 沒有指定items 從begin指定值開始疊代
  5. step疊代步長 疊代因子的增量

varStatus内屬性

  1. count:集合内序号 1開始
  2. index: 索引 0開始
  3. first 是否為集合中第一個元素
  4. last 是否為集合中最後一個元素
  • <c:param> 和<c:url>

    前者擷取參數,後者用于重新構造URL

    <c:param>一般嵌套在<c:url>中,在URL位址中附加參數

  1. value,指定構造的URL
  2. context 指定導入同一伺服器下其他Web應用的名稱
  3. var 屬性 指定構造的URL儲存到域中的屬性名稱
  4. scope屬性 指定儲存到域對象