其他更多java基礎(chǔ)文章:
java基礎(chǔ)學(xué)習(xí)(目錄)
一鲤拿、EL表達(dá)式
EL 全名為Expression Language假褪。JSP中可以使用EL表達(dá)式,EL表達(dá)式是用"${}"括起來的腳本近顷,用來更方便地讀取對(duì)象生音,EL表達(dá)式寫在JSP的HTML代碼中宁否,而不能寫在"<%%>"引起的JSP腳本中
EL表達(dá)式的功能:
- 獲取數(shù)據(jù):EL表達(dá)式主要用于替換JSP頁(yè)面中的腳本表達(dá)式,以從各種類型的web域 中檢索java對(duì)象缀遍、獲取數(shù)據(jù)慕匠。(某個(gè)web域 中的對(duì)象,訪問javabean的屬性域醇、訪問list集合台谊、訪問map集合、訪問數(shù)組)
- 執(zhí)行運(yùn)算:利用EL表達(dá)式可以在JSP頁(yè)面中執(zhí)行一些基本的關(guān)系運(yùn)算譬挚、邏輯運(yùn)算和算術(shù)運(yùn)算锅铅,以在JSP頁(yè)面中完成一些簡(jiǎn)單的邏輯運(yùn)算。${user==null}
- 獲取web開發(fā)常用對(duì)象:EL 表達(dá)式定義了一些隱式對(duì)象减宣,利用這些隱式對(duì)象狠角,web開發(fā)人員可以很輕松獲得對(duì)web常用對(duì)象的引用,從而獲得這些對(duì)象中的數(shù)據(jù)蚪腋。
- 調(diào)用Java方法:EL表達(dá)式允許用戶開發(fā)自定義EL函數(shù)丰歌,以在JSP頁(yè)面中通過EL表達(dá)式調(diào)用Java類的方法。
1.1屉凯、獲取數(shù)據(jù)
使用EL表達(dá)式獲取數(shù)據(jù)語(yǔ)法:"${標(biāo)識(shí)符}"
- EL表達(dá)式語(yǔ)句在執(zhí)行時(shí)立帖,會(huì)調(diào)用pageContext.findAttribute方法,用標(biāo)識(shí)符為關(guān)鍵字悠砚,分別從page晓勇、request、session灌旧、application四個(gè)域中查找相應(yīng)的對(duì)象绑咱,找到則返回相應(yīng)對(duì)象,找不到則返回”” (注意枢泰,不是null描融,而是空字符串)。
${abc} - EL表達(dá)式可以很輕松獲取JavaBean的屬性衡蚂,或獲取數(shù)組窿克、Collection、Map類型集合的數(shù)據(jù)毛甲。${requestScope.emp.address.street}
1.2年叮、執(zhí)行運(yùn)算
語(yǔ)法:${運(yùn)算表達(dá)式},EL表達(dá)式支持如下運(yùn)算符:
1)關(guān)系運(yùn)算發(fā)
2)邏輯運(yùn)算符
3)empty運(yùn)算符:檢查對(duì)象是否為null(空)玻募,${!empty(list)}
4)二元表達(dá)式:${user!=null?user.name :""}
5)[ ] 和 . 號(hào)運(yùn)算符
1.3只损、獲得web開發(fā)常用對(duì)象
EL表達(dá)式語(yǔ)言中定義了11個(gè)隱含對(duì)象,使用這些隱含對(duì)象可以很方便地獲取web開發(fā)中的一些常見對(duì)象七咧,并讀取這些對(duì)象的數(shù)據(jù)跃惫。
分析:
pageScope啸蜜、requestScope、sessionScope辈挂、applicationScope代表四個(gè)作用域?qū)ο螅ㄓ糜诒4鎸傩缘腗ap對(duì)象)
pageContext:表示的是JSP中內(nèi)置對(duì)象pageContext,能獲取request等其他JSP八大內(nèi)置對(duì)象
param:表示一個(gè)請(qǐng)求參數(shù), ${param.username}等效 request.getParameter("username");(表示一個(gè)保存了所有請(qǐng)求參數(shù)的Map對(duì)象)
paramValues:表示一組請(qǐng)求參數(shù)裹粤,${paramValues.abc}等效request.getParameterValues("abc");這種多選框(表示一個(gè)保存了所有請(qǐng)求參數(shù)的Map對(duì)象终蒂,它對(duì)于某個(gè)請(qǐng)求參數(shù),返回的是一個(gè)string[])
header:表示一個(gè)請(qǐng)求頭遥诉,${header.referer}等效request.getHeader("referer");
headerValues:表示一組請(qǐng)求頭拇泣,${header.cookie}等效 request.getHeaders("cookie");獲取的請(qǐng)求頭參數(shù)中的內(nèi)容是一組內(nèi)容,比如cookie就有可以是多個(gè)cookie一起傳過來
cookie:獲得cookie對(duì)象(表示一個(gè)保存了所有cookie的Map對(duì)象)
initPatam:web項(xiàng)目初始化參數(shù)矮锈,servletContext.getInitParameter("xxx");(表示一個(gè)保存了所有web應(yīng)用初始化參數(shù)的map對(duì)象)
注意1:還有一種特殊的用法霉翔,直接獲取對(duì)象變量${user.username},user為User的一個(gè)實(shí)例對(duì)象苞笨,并且存放在page作用域中债朵,上面這句代碼的意思是,依次從page瀑凝、request序芦、session、application作用域查找user對(duì)象粤咪,直到找到為止谚中,底層使用的是pageContext.findAttribute(); 是一樣的效果。
注意2:測(cè)試header和headerValues或者有些參數(shù)時(shí)寥枝,如果頭里面有“-” 宪塔,例Accept-Encoding,則要header["Accept-Encoding"]囊拜、headerValues["Accept-Encoding"]
測(cè)試cookie時(shí)某筐,例${cookie.key}取的是cookie對(duì)象,如訪問cookie的名稱和值冠跷,須${cookie.key.name}或${cookie.key.value}
二来吩、總結(jié)
EL表達(dá)式比較簡(jiǎn)單,使用它的目的是為了減少JSP腳本蔽莱,盡量不要在HTML中嵌入Java代碼弟疆,顯的很混亂,而在HTML中使用EL表達(dá)式盗冷,就比較好來獲取JSP中各種對(duì)象怠苔,獲取四大作用域中的值,
- 如果要獲取四大作用域中的數(shù)據(jù)仪糖,則可以使用{pageScope.xxx}
- 如果想要獲取請(qǐng)求參數(shù)迫肖,則使用param或paramValues
- 如果想要獲取請(qǐng)求頭中的一些信息,獲取想要獲取Servlet的一些對(duì)象攒驰,比如request蟆湖、session等,可以使用pageContext來獲取request對(duì)象玻粪,然后在獲取所需要的信息隅津,或者直接使用header對(duì)象來獲取頭信息
- 如果想獲取web初始化參數(shù),則使用initPatam劲室。
最主要的是要記得EL中有哪11個(gè)內(nèi)置對(duì)象伦仍,知道了他們就知道了EL可以獲取哪些信息。