【知了堂】Java中的JSTL與EL表達(dá)式
一、JSP

1、基本介紹
什么是JSP?
從用戶的角度看,就是一個(gè)網(wǎng)頁(yè),從程序員的角度看,其實(shí)就是一個(gè)Java類,它繼承了Servlet,所以可以直接說(shuō)jsp就是一個(gè)servlet
為什么會(huì)有JSP?
html多數(shù)情況下用來(lái)顯示靜態(tài)內(nèi)容,一成不變的,但是有時(shí)候我們需要在網(wǎng)頁(yè)上顯示一些動(dòng)態(tài)數(shù)據(jù),比如,查詢所有學(xué)生信息。這些動(dòng)作都需要查詢數(shù)據(jù)庫(kù),然后在網(wǎng)頁(yè)上顯示,html不支持寫java代碼,jsp里面可以寫jsp
2、怎么用JSP?
JSP三大指令
? 格式:<%@ 指令名字 %>
1、page指令(里面的一些屬性):
? ?language:表面里面可以寫什么語(yǔ)言 ? ?
? ?contentType="text/html;charset=UTF-8":告訴瀏覽器我們是內(nèi)容類型,以及用的什么編碼
? ?pageEncoding:jsp內(nèi)容編碼
? ?extends:jsp翻譯成java時(shí)候,繼承的父類是誰(shuí),一般不用寫
? ?session:可選值有true和false,用于控制這個(gè)jsp頁(yè)面里面,是否可以直接使用session對(duì)象
? ?errorPage:如果當(dāng)前頁(yè)面發(fā)送錯(cuò)誤,值會(huì)跳轉(zhuǎn)的路徑
? ?iserrorPage:指明當(dāng)前路徑是不是錯(cuò)誤頁(yè)面
2、include指令(包含一個(gè)頁(yè)面):
? ?寫法:<%@include file = "頁(yè)面名字" %>
? ?背后細(xì)節(jié):把另外一個(gè)頁(yè)面的所有內(nèi)容拿過(guò)來(lái)一起輸出,所有的標(biāo)簽元素都包含進(jìn)來(lái)輸出。
3、taglib指令(引入標(biāo)簽庫(kù))
? ?寫法:<%@ taglib prefix=" " ?uri = " " %> ? ?
? ?uri:標(biāo)簽庫(kù)路徑
? ?prefix:標(biāo)簽庫(kù)別名
JSP的常用動(dòng)作標(biāo)簽
<jsp:include page="頁(yè)面路徑"></jsp:include>:jsp包含的頁(yè)面路徑,這邊包含進(jìn)來(lái)的頁(yè)面只是把在執(zhí)行完的經(jīng)過(guò)傳進(jìn)來(lái),而不是把元素標(biāo)簽一起傳進(jìn)來(lái)輸出
<jsp:forward page="頁(yè)面路徑"></jsp:forward>:跳轉(zhuǎn)到哪一個(gè)頁(yè)面,相當(dāng)于請(qǐng)求轉(zhuǎn)發(fā)
<jsp:param name="" value=""></jsp:param>:包含在某個(gè)頁(yè)面的時(shí)候,或者在跳轉(zhuǎn)在某個(gè)頁(yè)面的時(shí)候,加入這個(gè)參數(shù),通常寫在上面兩個(gè)標(biāo)簽之間,在跳轉(zhuǎn)到的頁(yè)面用request.getParamter("")接收
JSP9大內(nèi)置對(duì)象
介紹:
? ? ?所謂內(nèi)置對(duì)象,就是我們可以直接在jsp頁(yè)面中使用這些對(duì)象。不用創(chuàng)建,在<% %>里面
9大內(nèi)置對(duì)象
?四個(gè)域?qū)ο螅? ? ? ?什么是域?qū)ο螅罕硎具@些對(duì)象可以存值,他們的取值范圍有限定,存取值都是通過(guò)setAttribute()和getAttribute()
? ? ?pageContext(是pageContext類型):作用域只限定于當(dāng)前頁(yè)面,用這個(gè)對(duì)象可以拿到其他的八個(gè)對(duì)象
? ? ?request(是HttpServletRequest類型):作用域僅僅限于一次請(qǐng)求(用請(qǐng)求轉(zhuǎn)發(fā)就可以可以在頁(yè)面中傳值,重定向不可以),重定向不可以是因?yàn)椋褐灰?wù)器對(duì)該請(qǐng)求作出了響應(yīng),這個(gè)域中存的值就沒(méi)有了
? ? ?session(是httpSession類型):作用域僅僅限于一次會(huì)話。會(huì)話:簡(jiǎn)單來(lái)說(shuō)打開(kāi)瀏覽器,訪問(wèn)服務(wù)器,直到瀏覽器關(guān)閉,稱為一次會(huì)話
? ? ?application(是ServletContext類型):整個(gè)工程都可以使用,服務(wù)器關(guān)閉之后就不可以用了
?2個(gè)使用頻率一般的對(duì)象:
? ? ?response(是HttpServletResponse類型):直接輸出,response.getWrite().write("")
? ? ?out(是JspWriter類型):這個(gè)對(duì)象輸出要先把內(nèi)容防止response的緩沖區(qū)去,再輸出,out.write(" ")
? ? ?注意:所以,當(dāng)這兩個(gè)對(duì)象在同一個(gè)頁(yè)面的時(shí)候,要先輸出response的數(shù)據(jù),再輸出out的數(shù)據(jù)
?3個(gè)其他對(duì)象:
? ? ?exception(是Throwable類型)
? ? ?page(是object類型):就是這個(gè)jsp翻譯成的java類的實(shí)例對(duì)象
? ? ?config(是ServletConfig類型)
二、EL表達(dá)式(取值和比較值)
1、基本介紹
產(chǎn)生:是為了簡(jiǎn)化咱們的jsp代碼,具體宜點(diǎn)就是為了簡(jiǎn)化在jsp里面寫的那些Java代碼格式:${表達(dá)式}
2、怎么用
取值
1、使用EL表達(dá)式取出作用域中的值:
?pageContext.setAttribute("name","page")
?普通手段取值:<%= pageContext.getAttribute("name") %>
?EL表達(dá)式取法:${pageScope.name}
2、使用EL表達(dá)式取出作用域中數(shù)組的值:
?<%String[ ] a ={"aa","bb","cc","dd"};pageContext.setAttribute("array",a); %>
?EL表達(dá)式取值:${array[0] }
3、使用EL表達(dá)式取集合中的值:
?<%List list = new ArrayList();list.add("11"); ? pageContext.setAttribute("li",list)%>
?EL表達(dá)式取值:${li[0] }
4、使用EL表達(dá)式取出集合中的值:
?<%Map map = new HashMap(); map.put("name","zhangsan");map.put("address.a","深圳");pageContext.setAttribute("map",map);%>
?EL表達(dá)式取值:${map.name}, ? ${map["address.a"]}
注意:
?${name}:表示先從page里面找,沒(méi)有的話之后request,session都沒(méi)有的話最后去appplication里面找
?${pageScope.name}:表示去特定的pageContext去找
?取值方式:如果這份值有下標(biāo),直接使用[],如果這份值沒(méi)有下標(biāo),直接使用 . ?的方式去取
data = pd.read_csv( 'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv') print(data.head())
EL表達(dá)式的11個(gè)內(nèi)置對(duì)象
取值格式:${對(duì)象名.成員}
四個(gè)作用域相關(guān)對(duì)象:
? ? ?pageScope
? ? ?requestScope
? ? ?sessionScope
? ? ?applicationScope
兩個(gè)請(qǐng)求頭相關(guān)對(duì)象:
? ? ?header
? ? ?headerValues
兩個(gè)請(qǐng)求參數(shù)相關(guān)對(duì)象:
? ? ?param
? ? ?paramValues
其他:
? ? ?cookie
? ? ?initParam:可得到全局初始化參數(shù)
? ? ?pageContext
三、JSTL
java standard Tag Library,簡(jiǎn)化jsp的代碼編寫,本身是為了替換<% %>寫法,一般與EL表達(dá)式配合
2、怎么使用
導(dǎo)入
步驟:
?1、導(dǎo)入jar文件到工程(jstl.jar和standard.jar)
?2、在jsp頁(yè)面上,使用taglib指令,來(lái)引入標(biāo)簽庫(kù)
?3、注意:如果想支持EL表達(dá)式,那么引入的標(biāo)簽庫(kù)必須選擇1.1版本,1.0的版本不支持EL表達(dá)式
常用標(biāo)簽
c:set ?儲(chǔ)存一個(gè)值到作用域當(dāng)中 ?寫法:<s:set></c:set>
c:if ?判斷
c:forEach ?遍歷
簡(jiǎn)單測(cè)試:
JSTL與EL整合測(cè)試
簡(jiǎn)單測(cè)試:

輸出:

總結(jié)
這里介紹了jsp的基本,三大指令,常用動(dòng)作標(biāo)簽,以及九個(gè)內(nèi)置對(duì)象;還介紹了EL表達(dá)式,他就是為了簡(jiǎn)化jsp里面的Java代碼而生,這里介紹了他如何取值,以及它的11個(gè)內(nèi)置對(duì)象,它的兩大作用就是取值和比較;最后介紹了JSTL,就是一個(gè)標(biāo)簽庫(kù),也是為了簡(jiǎn)化jsp的代碼而生,還介紹了他的一些常用標(biāo)簽。
