JSP & EL & JSTL
(一)JSP的回顧
一边器、什么是JSP
? ? JSP:Java Server Pages(Java服務(wù)器端頁面)
? ? JSP就是HTML+Java代碼+JSP自身的東西組成
二鹏氧、JSP由來
? ? Servlet技術(shù)生成動態(tài)網(wǎng)頁的時候很麻煩峰弹,需要通過Response獲得輸出流穗泵,調(diào)用print方法進(jìn)行打印的云头。這種編程方式很麻煩泡嘴,而且美工也不容易處理霎肯。SUN公司為了簡化動態(tài)網(wǎng)頁開發(fā),推出了JSP
三慢哈、JSP的運(yùn)行原理
? ? JSP在執(zhí)行時蔓钟,會被服務(wù)器翻譯為Servlet編譯執(zhí)行的,JSP就是一個Servlet
四卵贱、JSP腳本元素
?<%! %>:JSP聲明奋刽,翻譯成Servlet成員部分的內(nèi)容,聲明變量艰赞、方法、內(nèi)部類
?<%= %>:翻譯成out.print()輸出的內(nèi)容肚吏,在service方法內(nèi)部方妖,用于生成HTML頁面源碼
?<% %>:用于嵌入Java代碼,會被翻譯成service方法內(nèi)部的代碼塊罚攀,聲明變量党觅、內(nèi)部類
(二)JSP的注釋
一、HTML的注釋
? ? ? ? <!--HTML的注釋-->
?存在時機(jī):存在JSP的源碼中斋泄,翻譯成Servlet后杯瞻,注釋也存在,在生成HTML響應(yīng)到頁面時炫掐,注釋也存在
二魁莉、Java代碼的注釋
? ? ? ? <%
? ? ? ? ? ? //單行注釋
? ? ? ? ? ? /*多行注釋*/
? ? ? ? ? ? /**文檔注釋*/
? ? ? ? %>
?存在時機(jī):存在JSP的源碼中,翻譯成Servlet后募胃,Java代碼的注釋也會存在旗唁,但是生成HTML響應(yīng)到頁面后,注釋就消失了
三痹束、JSP注釋
? ? ? ? <%--JSP的注釋--%>
?存在時機(jī):存在JSP的源碼中检疫,翻譯成Servlet后,注釋就沒有了
*注意:Java代碼注釋的話祷嘶,不要使用HTML的注釋
(三)JSP的指令元素的概述
一屎媳、JSP指令元素的作用
? ? 用于指示JSP執(zhí)行的某些步驟
? ? 用于指示JSP表現(xiàn)的特定行為
二夺溢、JSP指令元素的語法
? ? <%@ 指令名稱 屬性名稱=屬性的值 屬性名稱=屬性的值 %>
三、JSP指令元素的分類
? ? page指令:指示JSP的頁面設(shè)置屬性和行為
? ? include指令:指示JSP包含哪些其他頁面
? ? taglib指令:指示JSP頁面包含哪些標(biāo)簽庫
(四)JSP的指令
一烛谊、page指令
1风响、page指令簡介
? ? 寫法:<%@ page 屬性名=屬性值 %>
? ? Page指令用來定義JSP文件的全局屬性
? ? 這些屬性可以單獨(dú)使用,也可以幾個或多個同時使用
? ? 在JSP頁面中晒来,只有import屬性可以出現(xiàn)多次钞诡,其他屬性都只能出現(xiàn)一次
2、Page指令屬性
? ? language屬性:聲明使用腳本的語言湃崩,目前只能是Java
? ? extends屬性:標(biāo)明JSP編譯成Servlet的時候繼承的類荧降,默認(rèn)值是HttpJspBase
? ? session屬性:標(biāo)明JSP中是否可以直接使用session對象,默認(rèn)值是true
? ? buffer屬性:標(biāo)明JSP對客戶端輸出緩沖區(qū)的大小攒读,默認(rèn)值8KB
? ? autoFlush屬性:如果緩沖區(qū)大小溢出朵诫,是否自動刷出,默認(rèn)值true
import屬性:用于導(dǎo)入Java包或類
? ? contentType屬性:標(biāo)明JSP被瀏覽器解析和打開的時候采用的默認(rèn)的字符集
? ? pageEncoding屬性:JSP文件及JSP翻譯后的Servlet保存到硬盤上采用的字符集
? ? isErrorPage屬性:處理JSP頁面的異常
? ? errorPage屬性:處理JSP頁面的異常
isELIgnored屬性:通知JSP是否忽略EL表達(dá)式
二薄扁、include和taglib指令
1剪返、include指令
(1)include指令簡介
? ? 寫法:<%@ include 屬性名=屬性值%>
? ? 作用:在JSP頁面中靜態(tài)包含一個文件,同時由該JSP解析包含的文件內(nèi)容
(2)include指令屬性
? ? file屬性:指示JSP頁面包含的頁面的路徑
2邓梅、include指令原理(靜態(tài)包含的原理)
? ? 注意:
? ? ? ? 應(yīng)該將被包含的頁面結(jié)構(gòu)去掉
? ? ? ? 在被包含的頁面中定義變量脱盲,在包含的頁面中也可以使用
2、taglib指令
(1)taglib指令簡介
? ? 寫法:<%@ taglib 屬性名=屬性值%>
? ? 作用:用于在JSP頁面中引入標(biāo)簽庫
(2)taglib指令屬性
? ? uri屬性:引入的標(biāo)簽庫的路徑
? ? prefix屬性:引入的標(biāo)簽庫的別名(前綴)
(五)JSP的內(nèi)置對象
一日缨、JSP的內(nèi)置對象概述
1钱反、什么是JSP的內(nèi)置對象
? ? JSP的內(nèi)置對象:指的是可以直接在JSP頁面中使用的對象
2、JSP的內(nèi)置對象有哪些(9大內(nèi)置對象)
? ? request:從客戶端向服務(wù)器發(fā)送的請求對象
? ? response:從服務(wù)器端向客戶端作出的響應(yīng)對象
? ? session:服務(wù)器為客戶端創(chuàng)建會話對象
? ? application:代表應(yīng)用匣距,就是獲得的ServletContext對象
? ? out:向輸出流寫入內(nèi)容的對象
? ? page:當(dāng)前的JSP翻譯成Servlet后的對象的引用
? ? pageContext:本JSP頁面的上下文對象
? ? config:本JSP的ServletConfig對象
? ? exception:表示JSP頁面運(yùn)行時產(chǎn)生的異常對象
3面哥、JSP的內(nèi)置對象具體類型
? ? request??HttpServletRequest
? ? response??HttpServletResponse
? ? session??HttpSession
? ? application?ServletContext
? ? out????JspWriter
? ? page???Object
? ? pageContext?PageContext
? ? config???ServletConfig
? ? exception??Throwable
(六)pageContext對象的概述
一pageContext對象簡介
? ? pageContext對象直接翻譯為“頁面的上下文”對象,代表的是當(dāng)前頁面運(yùn)行的一些屬性毅待,它是javax.servlet.jsp.PageContext類的實例對象
二尚卫、pageContext對象作用
1、提供了page范圍的數(shù)據(jù)存取的方法
? ? ? ? 向page范圍中存入數(shù)據(jù)
? ? ? ? ? ? setAttribute(String name, Object value)
? ? ? ? 從page范圍獲取數(shù)據(jù)
? ? ? ? ? ? getAttribute(String name)
? ? ? ? 從page范圍移除數(shù)據(jù)
? ? ? ? ? ? removeAttribute(String name)
? ? ? ? 查詢屬性的方法
? ? ? ? ? ? findAttribute(String name)
2尸红、通過這個對象獲得其它的8個內(nèi)置對象
? ? ? ? getException()
? ? ? ? getPage()
? ? ? ? getRequest()
? ? ? ? getResponse()
? ? ? ? getServletConfig()
? ? ? ? getServletContext()
? ? ? ? getSession()
? ? ? ? getOut()
(七)JSP的四個作用范圍
一吱涉、JSP的四個作用范圍概述
1、PageScope:頁面范圍
? ? ? ? 頁面范圍指的是在當(dāng)前的頁面內(nèi)有效驶乾,出了這個頁面邑飒,用pageContext保存的數(shù)據(jù)就無效了
2、RequestScope:請求范圍
? ? ? ? 從客戶端向服務(wù)器發(fā)送一次請求级乐,服務(wù)器對這次請求作出了響應(yīng)之后疙咸,用request保存的數(shù)據(jù)就無效了
3、SessionScope:會話范圍
? ? ? ? 每個瀏覽器向服務(wù)器發(fā)送請求(可以是多次請求)风科,到該會話結(jié)束(瀏覽器關(guān)閉或?qū)⒅氨4嬖赟ession中的數(shù)據(jù)銷毀了)
4撒轮、ApplicationScope:應(yīng)用范圍
? ? ? ? 在整個應(yīng)用(項目)中任意的地方都可以獲取
二乞旦、JSP的四個作用范圍演示
三、pageContext對象向四個域范圍存取數(shù)據(jù)
關(guān)閉瀏覽器再訪問
findAttribute方法
查找屬性方法:先根據(jù)小范圍的名稱進(jìn)行查找题山,如果找到了就返回蜻展,如果沒有找到就會去比其大一個域的范圍進(jìn)行查找
(八)JSP的動作標(biāo)簽
一涮帘、JSP的動作標(biāo)簽的概述
1谒兄、什么是JSP的動作標(biāo)簽
? ? JSP的動作標(biāo)簽用于在JSP頁面中提供業(yè)務(wù)邏輯功能赶促,避免在JSP頁面中直接編寫Java代碼,會造成JSP頁面難以維護(hù)
2慨菱、常用的動作標(biāo)簽
?<jsp:forward/>:請求轉(zhuǎn)發(fā)
?<jsp:include/>:包含(動態(tài)包含)
?<jsp:param/>:傳遞參數(shù)
3焰络、演示JSP的動作標(biāo)簽
二、靜態(tài)包含和動態(tài)包含的區(qū)別
? ? 動態(tài)包含的原理
(九)EL
一符喝、EL的概述
1闪彼、什么是EL
? ? EL:Expression Language(表達(dá)式語言)
2、EL作用
? ? EL和JSTL一起使用协饲,取代JSP頁面中嵌入Java代碼的寫法
3畏腕、EL功能
? ? EL獲取數(shù)據(jù)
? ? EL執(zhí)行運(yùn)算
? ? EL獲取Web開發(fā)常用的對象
? ? EL調(diào)用Java方法
4、EL語法
? ? ${ EL表達(dá)式 }
二茉稠、EL獲取數(shù)據(jù)
1描馅、EL如何獲取數(shù)據(jù)
? ? EL表達(dá)式語句在執(zhí)行的時候,會調(diào)用pageContext.findAttribute()方法而线,分別從page流昏、request、session吞获、application范圍查找相應(yīng)對象,找到就會返回相應(yīng)對象谚鄙,找不到返回""(不是null各拷,是空的字符串),EL所獲取的數(shù)據(jù)需要在四個作用范圍中
2闷营、演示EL獲取數(shù)據(jù)
三烤黍、EL獲取數(shù)組和集合中的數(shù)據(jù)
1、獲取數(shù)組的數(shù)據(jù)
2傻盟、獲取List集合的數(shù)據(jù)
3速蕊、獲取Map集合的數(shù)據(jù)
?注意:
如果map的key中包含了特殊字符,就不能使用.必須使用[]
.是用來獲取對象的屬性的
??[]是用來獲得下標(biāo)的
四娘赴、EL執(zhí)行運(yùn)算
1规哲、執(zhí)行算數(shù)運(yùn)算
2、執(zhí)行關(guān)系運(yùn)算
3诽表、執(zhí)行邏輯運(yùn)算
4唉锌、執(zhí)行三元運(yùn)算
5隅肥、empty運(yùn)算符
五、EL獲取web開發(fā)常用對象
1袄简、常用對象有哪些
? ? EL表達(dá)式定義了11個web開發(fā)常用對象腥放。使用這些對象可以很方便的獲取Web開發(fā)中的一些常見對象,并可以讀取這些對象中的數(shù)據(jù)
pageContext
?相當(dāng)于JSP內(nèi)置對象中的pageContext
pageScope
?獲取page域下的名稱的數(shù)據(jù)
requestScope
?獲取request域下的名稱的數(shù)據(jù)
sessionScope
?獲取session域下的名稱的數(shù)據(jù)
applicationScope
?獲取application域下的名稱的數(shù)據(jù)
param
在頁面中接收請求參數(shù)(接收一個名稱對應(yīng)一個值的參數(shù))
paramValues
?在頁面中接收請求參數(shù)(接收一個名稱對應(yīng)多個值的參數(shù))绿语,返回一個數(shù)組
header
在頁面上獲取請求頭(獲取一個Key對應(yīng)一個Value頭)
headerValues
在頁面上獲取請求頭(獲取一個Key對應(yīng)多個Value頭)
cookie
?訪問Cookie的名稱和值(${cookie.key.name}${cookie.key.value})
initParam
?獲取全局初始化參數(shù)的值
(十)JSTL
一秃症、JSTL的概述
1、什么是JSTL
JSTL:JSP的標(biāo)準(zhǔn)標(biāo)簽庫
2吕粹、為什么學(xué)習(xí)JSTL
? ? 主要和EL來取代傳統(tǒng)頁面上直接嵌入Java代碼的寫法种柑,提升程序可讀性、維護(hù)性和方便性
3昂芜、JSTL的版本
? ? JSTL1.0莹规、JSTL1.1和JSTL1.2
? ? ? ? 1.0版本不支持EL表達(dá)式
? ? ? ? 1.1和1.2支持了EL表達(dá)式
4、JSTL的標(biāo)簽庫
? ? c標(biāo)簽(Core標(biāo)簽庫)
? ? fmt標(biāo)簽(國際化標(biāo)簽庫)
? ? xml標(biāo)簽
? ? sql標(biāo)簽
? ? jstl函數(shù)庫(EL函數(shù))
二泌神、JSTL的入門
1良漱、引入JSTL的jar包
2、新建JSP頁面
3欢际、引入標(biāo)簽庫
4母市、使用JSTL
三、JSTL的if標(biāo)簽
1损趋、if標(biāo)簽的使用
2患久、if標(biāo)簽的屬性
? ? test屬性:條件
? ? var屬性:將test中的條件的值賦給一個變量,可以在var中定義這個變量
? ? scope屬性:作用范圍
四浑槽、JSTL的foreach標(biāo)簽
foreach標(biāo)簽的使用
(十一)案例——學(xué)生查詢
一蒋失、搭建開發(fā)環(huán)境
1、創(chuàng)建Web項目
2桐玻、引入相關(guān)的jar包
3篙挽、創(chuàng)建包結(jié)構(gòu),引入工具類
4镊靴、創(chuàng)建數(shù)據(jù)庫和表
create database web04_student charset utf8;
use web04_student;
create table student(
sid int primary key auto_increment,
sname varchar(20),
sex varchar(10),
age int
) charset utf8;
insert into student values(null,'張三','男',20);
insert into student values(null,'李四','女',23);
insert into student values(null,'王五','女',18);
insert into student values(null,'趙六','男',25);
insert into student values(null,'孫七','男',21);
二铣卡、案例代碼實現(xiàn)
1、創(chuàng)建實體類
2偏竟、創(chuàng)建Servlet
3煮落、創(chuàng)建Model對象
4、編寫list.jsp
5踊谋、運(yùn)行效果