Java EE day15學習總結

今天主要學習EL表達式和 JSTL

思維導圖:

 

一.EL表達式

1.概述:

EL表達式是可以嵌入在JSP的頁面的當中的,本質上是爲的去減少JAVA代碼的編寫,因爲從原則上來說,JSP裏面JAVA代碼越少越好,甚至不出現任何JAVA代碼。

 

2.EL表達式的格式:

在JSP的內置表達式當中,所有的操作都是使用 <% %>進行,其實這種操作符號是非常反人類的,絕大部分的語言基本都不會出現這種操作符號。正常的操作符號應該是"$",比如mybits/ajax/juqey/php..類型的框架和語言都是採用"$"。

而EL表達式爲了符合正常的表達式的操作定義習慣,也是使用了$.

${表達式}

注意:

因爲JSP當中,默認是支持EL表達式的,所以我們直接使用,但是回想下我們之前學JSP的時候,是可以禁止EL(注意)

 

3.EL獲取作用域 不同類型的數據:

EL獲取普通字符串

獲取上下文作用域

     ${applicationScope.key_con}

獲取會話作用域

     ${sessionScope.key_sess}

獲取請求作用域

     ${requestScope.key_req}

獲取JSP作用域

     ${pageScope}

簡寫:

${key}

注意:

  當作用域的名字不一致,取出各自作用域的值.

  當作用域的名字一致,按照findAttribute的方式,從小到大去尋找作用域 

 

4.EL獲取普通對象的數據

request.setAttribute("u",user);

${u.username}

 ${u.password}

 

5.EL獲取數組或者集合

request.setAttribute("l",list);

    ${l}

    ${l[0]}

    ${l[1]}

    ${l[2]}

 

6.EL獲取Map集合

request.setAttribute("map",map);

    ${map}

    ${map.u1}

    ${map.u1.username}

 或者

   ${map['day01.user'].username} (這種方式,主要是避免在請求名當中,命名存在了".",比如 day01.user 上面的方式就沒法獲取)

 

7.EL的內置11個對象:

對象調用getxxx()方法,例如pageContext.getRequest()可以寫爲${pageContext.request)

pageContext對象來獲取當前項目的名稱:

${pageContext.request.contextPath}

 

8.EL的運算符:

算數運算符:

+ - * /

邏輯運算符:

&& || ! 

比較運算符:

> < >= <= ==

三元運算符:

(true) ? xx : xx

判空運算符(爲null或者沒有元素值都爲空):

empty

${empty list2}

9.注意:

(1)EL的主要作用其實就是減少JSP頁面當中的輸出語句的編寫(本質上就是少些代碼,完成輸出)

(2)EL如果獲取到的數據是一個null,則不會顯示到頁面

 

 

二.JSTL

1.JSTL概念:

JSTL是JSP的標籤庫,可以嵌入在JSP頁面當中,使用標籤的形式完成大部分的業務邏輯功能,JSTL的出現和EL的出現是一樣的;主要也是爲了解決減少JSP頁面大量編寫Java代碼的問題的,但是EL解決的輸出的問題,而JSTL解決的是邏輯問題,一般JSTL基本上都是和EL搭配使用。學習JSTL一共要學習5個庫,但是隨着開發態勢的不斷調整,JSP的優勢幾乎喪失,目前所謂的5個庫,在代碼當中基本只能見到核心庫。

2.JSTL的核心標籤庫:

核心標籤(core): 核心標籤庫,我們學習的重點;

格式化標籤 :只需要學習兩個標籤即可;

SQL 標籤( sql):數據庫標籤庫,不需要學習了,它過時了;

XML 標籤: 不需要學習了,它過時了。

JSTL 函數: 主要定義對字符串操作的函數庫,在EL表達式中運行。

 

3.如何使用JSTL:

(1)先導入Jar包

javax.servlet.jsp.jstl.jar

jstl-impl.jar

(2)在JSP頁面使用taglib指令導入JSTL的標籤庫

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

(3)測試導入是否成功

在頁面輸入 <c: 看有沒有core庫的代碼提示,有一些編譯器可能沒有,那麼就只能寫好再去測。

 

4.JSTL的常用標籤:

JSTL的核心庫當中存在很多的標籤,但是目前常用的標籤只有if和foreach標籤,其餘的幾乎見不到,萬一見到就百度

 

5.if標籤的使用:

if標籤的屬性:

test:用於判斷表達式

scope:可以將執行的結果保存到一個指定的作用域當中(基本不用)

var:可以將執行的屬性的執行結果保存當某個作用域的某個屬性的名稱(基本不用)

<c:if test="${num == 5}">

         <span style="color: red">這個值大於5</span>

     </c:if>

注意:

     JSTL沒有else和else if

 

6.foreach標籤的屬性:

var:代表的循環當中的變量(循環變量)

begin:代表這個var的初始化值(循環初始化值)

end:代表判斷條件的結束的值(循環的結束值,結束值本身也算)

step:代表執行多少次(循環每次自增的次數)

items:代表需要遍歷的容器

varStatus:定義一個計數器對象,默認從1開始

操作普通循環:

     <c:forEach var="i" begin="0" end="5" step="1">

         ${i}<br/>

    </c:forEach>

操作foreach循環:

<c:forEach var="str" items="${list}" varStatus="num">

     {str}<br/>

     ${num.count}

</c:forEach>

7.JSTL的判斷和循環的對比

 

8.三層架構和MVC的開發模式:

JSP的開發模式:但是在SUM公司推出jsp之後,其實也提供一個對應的開發模式,到目前爲止,JAVAWEB的開發至少經歷了兩代甚至三代的開發模式的變革

9.Model1代的開發模式

10.Model2代的開發模式

 

 

 

 

 

 

 

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