基礎目標:
使用 EL 獲取 web 四個容器(page、 request、 session、 serveltContext)中的數(shù)據(jù)
使用 EL 解析復雜數(shù)據(jù)(List、 Map、數(shù)組、自定義對象)
使用 EL 執(zhí)行運算(算數(shù)運算、邏輯運算、比較運算)
使用 EL 的內(nèi)置對象(快速操作常用的 javaweb 對象)
需求:需要一種新的 jsp 頁面使用 java 代碼的方式,方便直接輸出內(nèi)容。 EL 全稱:Expression Language 作用:代替 jsp 中腳本表達式的功能,簡化對 java 代碼的操作。
具體簡化的內(nèi)容:
獲取數(shù)據(jù)(獲取四個容器中數(shù)據(jù))
執(zhí)行運算(EL 執(zhí)行運算)
快速操作常用的 javaweb 對象(11 個內(nèi)置對象)
EL 表達式&EL 的內(nèi)置對象(重點:必須掌握)
EL 表達式是什么:
EL 表達式是 jsp 中的技術,書寫格式為:${ 表達式}
表達式作用:要獲取數(shù)據(jù)的名稱、執(zhí)行的運算、要獲取的 web 常用對象。
注:表達式中放的是域?qū)ο笾械膶傩裕绾问牵?/p>
基本類型:則自動放入page域中
引用類型:如果存在則取出,不存在不顯示(不存在還.成員會報錯)
pageContext:上下文?
抽象概念:研究他的作用,使用作用代替文本概念:可以獲取其他八個內(nèi)置對象,
可以給四個容器設置和獲取數(shù)據(jù),這個就是上下文對象。
細節(jié):使用 pageContext 的 getAttribute 方法或者 findAttribute 方法從 4 個
容器中取出數(shù)據(jù)的時候,如果指定的 key 不存在會得到 null,而使用 el 表達式
取出的時候指定的 key 不存在,頁面上什么都沒有
EL 使用——執(zhí)行運算
支持算術運算符:
+? -? *? /(div)? %(mod)
<%--
1 div 2=${1 div 2}? ? //0.5
1 mod 2=${1 mod 2}--%>? ? //1
2、 支持邏輯運算符:&&(and)? ?||(or)? ? ? ? ?<!-- 沒有短路&| -->
3、支持比較運算符:>(gt)? ? <(lt)? ? >=(ge)? ? <=(le)? ?==(eq)? ?!=(ne)
注:()中是英文表達方式,在eclipse中部分會報錯,不過運行還顯示
empty 運算符:檢查對象是否為 null 或“空”
注:對于自定義對象,檢查是否為 null對于集合檢查,是否為空(集合存在,但是沒有數(shù)據(jù))
代碼
<%
User user = new User();
user.setName("張三");
pageContext.setAttribute("user", user);
%>
${empty user }? ? ? ? //域中是否存在”user"對象
效果:
顯示:false
${user!=null?user.name : “”}三元運算
${user!=null?user.name:"" }
效果:
顯示:張三
<%-- 演示El執(zhí)行運算 --%>
<%
int x = 3;
int y = 4;
pageContext.setAttribute("x", x);
pageContext.setAttribute("y", y);
%>
<%-- 使用EL表達式獲取數(shù)據(jù),最終都是講數(shù)據(jù)轉(zhuǎn)換成字符串,根據(jù)字符
串,格式化數(shù)字,在進行計算 --%>
<%-- z的數(shù)據(jù)不存在,不存在的數(shù)據(jù),加減,乘除(Infinity) 0--%>
<h3>1%2=${z*2}</h3>
${x+y }? //7
${x-y } //-1
${x*y } //12
${x/y } //0.75
${x%y } //3
<hr>
<%
boolean flag = true;
boolean info = false;
pageContext.setAttribute("flag", flag);
pageContext.setAttribute("info", info);
%>
${flag && info} //false
<%-- ${ !info} --%>
${flag || info} //true
<hr>
${x < y }? //true
${x <= y }? //true
${x > y }? //false
${x >= y }? //false
${x == y }? //fales
${x != y }? //true
注意:當算術運算的時候,如果字符串內(nèi)容不能解析成數(shù)據(jù),則報數(shù)字格式化異
常。
EL 的 11 個內(nèi)置對象使用
EL 表達式它也有自己的內(nèi)置(直接使用)對象可以直接在 EL 表達式中使用:從不同的容器中取值
pageScope? :頁面
requestScope? ? :一次請求
sessionScope? ? :一次回話
applicationScope? ? :項目中? ?
剩下 7 個介紹:
param: 獲取用戶提交的請求參數(shù)? ? ? ?如: ${param.參數(shù)名 }
paramValues: 獲取某個 key 對應的多個 value 值????????
header: 獲取請求頭中的信息
headerValues: 某個請求頭中的多個 value 值
cookie: 它獲取到的一個 cookie 數(shù)組,獲取所
有的 cookie 數(shù)據(jù)
pageContext: 它就和 JSP 內(nèi)置對象 pageContext 功
能一致(獲取其他內(nèi)置對象:jsp)
initParam: 獲取的項目的全局配置參數(shù)
JSTL的核心標簽庫使用(重點:必須 掌握)
將 jar 包導入工程? ;
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
prefix 表示的是 標簽的小名。? (任意名,常用c表示)
uri 表示的是 引入那個標簽庫?
JSTL 標簽庫提供 5 大功能(了解):
core:jstl 的核心標簽庫,使用最多(必須掌握)
fmt:格式化的標簽(對頁面顯示數(shù)據(jù),格式化,現(xiàn)在都交給前端去做)
functions:jstl 中提供對字符串操作的函數(shù)庫(建議,在數(shù)據(jù)顯示在頁面之前,在后臺程序中,先格式化好字符串,然后直接顯示,不再頁面做處理,如果有前端,交給前端處理javascript 解析 json 格式數(shù)據(jù)))
sql:jstl 提供的在 jsp 頁面上書寫 sql,操作數(shù)據(jù)庫,目前已經(jīng)不再(不允許)使用(jsp 開發(fā)模式二(MVC),這個開發(fā)模式不允許,在頁面操作數(shù)據(jù)庫)
xml:jstl 操作 xml 文件的。目前已經(jīng)不再使用(頁面?zhèn)鬟f數(shù)據(jù),頁面解析數(shù)據(jù),json 格式字符串。)
c:if 標簽(重點: 必須掌握)
使用 c:if 標簽,在 JSP 頁面上可以完成 if 判斷。 注意:在 JSTL 核心標簽庫中沒有 c:else.
只有 if(){}結構 沒有 if(){}else{}結構
<%--
if標簽---
test 判斷條件:? 通常使用EL語言 計算??
var????? test條件判斷的結果存儲到變量
scope???? test條件判斷的結果存儲到變量 存放到作用域?
<c:if test="" var="" scope="">?
</c:if>
--%>
<!-- EL表達式的運算符 empty
? 當變量不存在? 返回 true
? 變量存在,但是變量的值為 null? ,? 返回 true
? 變量存在,但是變量是一個數(shù)組或集合,沒有元素? ,? 返回 true
c:choose c:when c:otherwise(重點:必須掌握)
c:choose c:when c:otherwise 相當于:if(){}else if(){} else if(){}
<c:choose>標簽它必須與<c:when>和<c:otherwise>標簽一起使用,它表示
哪些 when 和 otherwise 是在一組的
?
c:set 和 c:out 標簽
<!-- JSTL 區(qū)分大小寫 -->
<!--
? set標簽: 定義,修改 作用域變量(只能修改作用域變量)
? var 變量名
? value 變量的值
? scope 作用域(取值:page,request,session,application),如果不寫默認page
? target=""? 對象
? property="" 屬性
-->
<!-- 刪除
remove標簽
? var 刪除的變量名稱
? scope 刪除作用域,如果不指定,四大作用域的名稱相同的變量全部刪除
-->
c:out 作用:它可以把數(shù)據(jù)輸出到頁面上,相當于 JSP 的內(nèi)置對象 out
?注:set標簽定義基本變量(默認page)。當處理對象時,只可以處理域中存在的對象
c:forEach 標簽(重點:必須掌握)
<!-- 使用forEach標簽迭代
? var? 臨時的變量,接收每次從集合中取得值
? items? 迭代的集合或數(shù)組
? begin? 表示集合或數(shù)組,的哪個索引位置開始 ,0表示第一個元素
? end? 結束位置
? step? 步長 ? 默認1
? varStatus 狀態(tài)? 取得迭代的順序的值
-->
迭代標簽 forTokens
<!-- forTokens迭代字符串,類似拆分字符串
? var? 臨時的變量,接收每次 取得值
? items? 迭代的字符串
? delims? 按照什么字符拆分
? begin? 表示集合或數(shù)組,的哪個索引位置開始 ,0表示第一個元素
? end? 結束位置
? step? 步長 ? 默認1
? varStatus 狀態(tài)? 取得迭代的順序的值
-->
開發(fā)模式&JavaBean
JavaBean?簡單介紹
JavaBean:它是一個簡單的 Java 類。 屬性要求是 private 這個類中擁有 get 或 set 方法即可,但要求這個類必須有一個公開的空參數(shù)的構造函數(shù) ?
特點:
1、一定要有一個無參數(shù)的構造函數(shù)---public 無參的構造函數(shù)
2、屬性必須是 private 的。
3、為這個私有的屬性,提供公有的訪問方法 getter ,setter。
提示:后期開發(fā)中,這些類一般會保存在名稱為 domain 或者 beans.或者 entity
或者 pojo 包中,這是一個開發(fā)的習慣,你在公司,拿到公司項目的所有封裝數(shù)
據(jù)的 Javabean 一般都會在這里包中。