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方法進行打印的。這種編程方式很麻煩驰怎,而且美工也不容易處理。SUN公司為了簡化動態(tài)網(wǎng)頁開發(fā)二打,推出了JSP
三县忌、JSP的運行原理
? ? 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的注釋-->
存在時機:存在JSP的源碼中筐眷,翻譯成Servlet后挖函,注釋也存在,在生成HTML響應(yīng)到頁面時浊竟,注釋也存在
二怨喘、Java代碼的注釋
?? ?? ? <%?
?? ??? ??? ?//單行注釋?
?? ??? ??? ?/*多行注釋*/?
?? ??? ?? ? /**文檔注釋*/
?? ??? ?%>
存在時機:存在JSP的源碼中,翻譯成Servlet后振定,Java代碼的注釋也會存在必怜,但是生成HTML響應(yīng)到頁面后,注釋就消失了
三后频、JSP注釋
?? ?? ? <%--JSP的注釋--%>
存在時機:存在JSP的源碼中梳庆,翻譯成Servlet后,注釋就沒有了
*注意:Java代碼注釋的話卑惜,不要使用HTML的注釋
(三)JSP的指令元素的概述
一膏执、JSP指令元素的作用
? ? 用于指示JSP執(zhí)行的某些步驟
? ? 用于指示JSP表現(xiàn)的特定行為
二、JSP指令元素的語法
? ? <%@?指令名稱?屬性名稱=屬性的值 屬性名稱=屬性的值?%>
三露久、JSP指令元素的分類
? ? page指令:指示JSP的頁面設(shè)置屬性和行為
? ? include指令:指示JSP包含哪些其他頁面
? ? taglib指令:指示JSP頁面包含哪些標簽庫
(四)JSP的指令
一更米、page指令
1、page指令簡介
? ? 寫法:<%@ page 屬性名=屬性值 %>
? ? Page指令用來定義JSP文件的全局屬性
? ? 這些屬性可以單獨使用毫痕,也可以幾個或多個同時使用
? ? 在JSP頁面中征峦,只有import屬性可以出現(xiàn)多次迟几,其他屬性都只能出現(xiàn)一次
2、Page指令屬性
? ? language屬性:聲明使用腳本的語言栏笆,目前只能是Java
? ? extends屬性:標明JSP編譯成Servlet的時候繼承的類类腮,默認值是HttpJspBase
? ? session屬性:標明JSP中是否可以直接使用session對象,默認值是true
? ? buffer屬性:標明JSP對客戶端輸出緩沖區(qū)的大小蛉加,默認值8KB
? ? autoFlush屬性:如果緩沖區(qū)大小溢出蚜枢,是否自動刷出,默認值true
import屬性:用于導(dǎo)入Java包或類
?? ?contentType屬性:標明JSP被瀏覽器解析和打開的時候采用的默認的字符集
?? ?pageEncoding屬性:JSP文件及JSP翻譯后的Servlet保存到硬盤上采用的字符集
? ? isErrorPage屬性:處理JSP頁面的異常
?? ?errorPage屬性:處理JSP頁面的異常
isELIgnored屬性:通知JSP是否忽略EL表達式
二针饥、include和taglib指令
1厂抽、include指令
(1)include指令簡介
? ? 寫法:<%@ include?屬性名=屬性值%>
? ? 作用:在JSP頁面中靜態(tài)包含一個文件,同時由該JSP解析包含的文件內(nèi)容
(2)include指令屬性
? ? file屬性:指示JSP頁面包含的頁面的路徑
2打厘、include指令原理(靜態(tài)包含的原理)
2修肠、taglib指令
(1)taglib指令簡介
? ? 寫法:<%@ taglib?屬性名=屬性值%>
? ? 作用:用于在JSP頁面中引入標簽庫
(2)taglib指令屬性
? ? uri屬性:引入的標簽庫的路徑
? ? prefix屬性:引入的標簽庫的別名(前綴)
(五)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:當前的JSP翻譯成Servlet后的對象的引用
? ? pageContext:本JSP頁面的上下文對象
? ? config:本JSP的ServletConfig對象
? ? exception:表示JSP頁面運行時產(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對象直接翻譯為“頁面的上下文”對象,代表的是當前頁面運行的一些屬性吃靠,它是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:頁面范圍
?? ?? ? 頁面范圍指的是在當前的頁面內(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ù)
findAttribute方法
查找屬性方法:先根據(jù)小范圍的名稱進行查找锅纺,如果找到了就返回,如果沒有找到就會去比其大一個域的范圍進行查找
(八)JSP的動作標簽
一肋殴、JSP的動作標簽的概述
1伞广、什么是JSP的動作標簽
?? ?JSP的動作標簽用于在JSP頁面中提供業(yè)務(wù)邏輯功能拣帽,避免在JSP頁面中直接編寫Java代碼,會造成JSP頁面難以維護
2嚼锄、常用的動作標簽
<jsp:forward/>:請求轉(zhuǎn)發(fā)
<jsp:include/>:包含(動態(tài)包含)
<jsp:param/>:傳遞參數(shù)
3减拭、演示JSP的動作標簽
(九)EL
一、EL的概述
1区丑、什么是EL
? ? EL:Expression Language(表達式語言)
2拧粪、EL作用
? ? EL和JSTL一起使用,取代JSP頁面中嵌入Java代碼的寫法
3沧侥、EL功能
? ? EL獲取數(shù)據(jù)
? ? EL執(zhí)行運算
? ? EL獲取Web開發(fā)常用的對象
? ? EL調(diào)用Java方法
4可霎、EL語法
? ? ${ EL表達式 }
二、EL獲取數(shù)據(jù)
1宴杀、EL如何獲取數(shù)據(jù)
? ? EL表達式語句在執(zhí)行的時候癣朗,會調(diào)用pageContext.findAttribute()方法,分別從page旺罢、request旷余、session、application范圍查找相應(yīng)對象扁达,找到就會返回相應(yīng)對象正卧,找不到返回""(不是null,是空的字符串)跪解,EL所獲取的數(shù)據(jù)需要在四個作用范圍中
2炉旷、演示EL獲取數(shù)據(jù)
五、EL獲取web開發(fā)常用對象
1叉讥、常用對象有哪些
? ? EL表達式定義了11個web開發(fā)常用對象窘行。使用這些對象可以很方便的獲取Web開發(fā)中的一些常見對象,并可以讀取這些對象中的數(shù)據(jù)
pageContext
相當于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的標準標簽庫
2透绩、為什么學習JSTL
? ? 主要和EL來取代傳統(tǒng)頁面上直接嵌入Java代碼的寫法翘骂,提升程序可讀性、維護性和方便性
3帚豪、JSTL的版本
?? ?JSTL1.0碳竟、JSTL1.1和JSTL1.2
?? ?? ? 1.0版本不支持EL表達式
?? ?? ? 1.1和1.2支持了EL表達式
4、JSTL的標簽庫
? ? c標簽(Core標簽庫)
? ? fmt標簽(國際化標簽庫)
? ? xml標簽
? ? sql標簽
? ? jstl函數(shù)庫(EL函數(shù))
二狸臣、JSTL的入門
1莹桅、引入JSTL的jar包
2、新建JSP頁面
3、引入標簽庫
4诈泼、使用JSTL
三懂拾、JSTL的if標簽
1、if標簽的使用
2铐达、if標簽的屬性
? ? test屬性:條件
? ? var屬性:將test中的條件的值賦給一個變量岖赋,可以在var中定義這個變量
? ? scope屬性:作用范圍
四、JSTL的foreach標簽
foreach標簽的使用
作者:小湯源O
鏈接:http://www.reibang.com/p/d28df007f597
來源:簡書
著作權(quán)歸作者所有瓮孙。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)唐断,非商業(yè)轉(zhuǎn)載請注明出處。