一彤叉、表達(dá)式語(yǔ)言(EL)是 JSP 2.0 引入的一種計(jì)算和輸出 Java 對(duì)象的簡(jiǎn)單語(yǔ)音庶柿。
二、使用 EL 語(yǔ)言前的配置秽浇。
1浮庐、導(dǎo)入standard.jar。
2柬焕、在需要使用 EL 語(yǔ)音的頁(yè)面加上<%@ pageisELIgnored="false" %>审残。
注意 <%@ page isELIgnored="true" %> 表示是否禁用EL語(yǔ)言,TRUE表示禁止.FALSE表示不禁止.JSP2.0中默認(rèn)的啟用EL語(yǔ)言。
3斑举、對(duì)于整個(gè)JSP應(yīng)用程序搅轿,要修改WEB.XML配置(tomcat5.0.16默認(rèn)是支持EL的)
三、練習(xí)
四富玷、如何使用 EL 表達(dá)式璧坟。
1没宾、EL 的內(nèi)置對(duì)象。
解決相對(duì)路徑的問(wèn)題沸柔,返回站點(diǎn)的根路徑
jsp中:<%=request.getContextPath()% >
EL方式:${pageContext.request.contextPath}
首先我們要知道 EL 的內(nèi)置對(duì)象有哪些----pageScope、requestScope铲敛、sessionScope褐澎、applicationScope,如果未指定scope伐蒋,默認(rèn)從 pageScope 到?applicationScope一次擴(kuò)大范圍查找屬性名工三,也可以使用 xxxScope.屬性名 直接指定在某個(gè) scope 查找,如:
${?requestScope.tom?}
2先鱼、語(yǔ)法結(jié)構(gòu)俭正。
${expression}
3、[ ]與.運(yùn)算符焙畔。
EL 提供.和[]兩種運(yùn)算符來(lái)存取數(shù)據(jù)掸读。如:
${student.name}
${studentList[0].name}
當(dāng)要存取的屬性名稱中包含一些特殊字符,如.或?等并非字母或數(shù)字的符號(hào)宏多,就一定要使用“[ ]“儿惫。如:
${?student.My-Name} ??
${?student["My-Name"]?}
如果要?jiǎng)討B(tài)取值時(shí),就可以用“[ ]“來(lái)做伸但,而“.“無(wú)法做到動(dòng)態(tài)取值肾请。如:
${?sessionScope.student[property]?} ? ?
4、使用 EL 取出內(nèi)置對(duì)象的數(shù)據(jù)更胖。
(1)铛铁、普通對(duì)象和對(duì)象屬性。
服務(wù)器端:
request.setAttribute("student",?student);
在瀏覽器上打印出服務(wù)器端綁定的數(shù)據(jù):
Java代碼${?student?} ?
${?student.name?}??
${?student.teacher.name?}??
(2)却妨、數(shù)組中的數(shù)據(jù)饵逐。
服務(wù)器端:
String[]?nameArray?=newString[]{"Tom","Lucy","Lilei"};
request.setAttribute(“nameArray”,nameArray);
Student[]?students?=newStudent[3];
students[0]?=?stu1;
students[1]?=?stu2;
students[2]?=?stu3;
request.setAttribute(“students”,students);
在瀏覽器上打印出服務(wù)器端綁定的數(shù)組數(shù)據(jù):
${?nameArray[0]?}???
${?nameArray[1]?}???
${?nameArray[2]?}???
${?students[0].id?}???
${?students[1].name?}???
${?students[2].teacher.name?}???
(3)、List中的數(shù)據(jù)管呵。
服務(wù)器端:
List
?studentList=newArrayList();
studentList.add(stu1);
studentList.add(stu2);
studentList.add(stu3);
request.setAttribute(“studentList”,studentList);
在瀏覽器上打印出服務(wù)器端綁定的List數(shù)據(jù):
${?studentList[0].id?} ??
${?studentList[1].name?}???
${?studentList[2].teacher.name?}???
(4)梳毙、Map中的數(shù)據(jù)。
服務(wù)器端:
Map
?studentMap?=newHashMap();
studentMap.put("Tom",?stu1);
studentMap.put("Lucy",?stu2);
studentMap.put("Lilei",?stu3);
request.setAttribute(“studentMap”,studentMap);
在瀏覽器上打印出服務(wù)器端綁定的Map數(shù)據(jù):
Java代碼
${?studentMap.Tom.id?} ??
${?studentMap.Lucy.name?}???
${?studentMap.Lilei.teacher.name?}???
5捐下、使用 EL 取出隱式對(duì)象中的數(shù)據(jù)账锹。
JSP 表達(dá)式語(yǔ)言定義了一組隱式對(duì)象,其中許多對(duì)象在 JSP scriplet 和表達(dá)式中可用坷襟〖榧恚可使用的隱式對(duì)象如下:
page
ContextJSP 頁(yè)的上下文。它可以用于訪問(wèn) JSP 隱式對(duì)象婴程,如請(qǐng)求廓奕、響應(yīng)、會(huì)話、輸出桌粉、servletContext 等蒸绩。例如,${pageContext.response} 為頁(yè)面的響應(yīng)對(duì)象賦值铃肯。
此外患亿,還提供幾個(gè)隱式對(duì)象,允許對(duì)以下對(duì)象進(jìn)行簡(jiǎn)易訪問(wèn):
術(shù)語(yǔ) 定義
param將請(qǐng)求參數(shù)名稱映射到單個(gè)字符串參數(shù)值(通過(guò)調(diào)用 ServletRequest.getParameter (String name) 獲得)押逼。getParameter (String) 方法返回帶有特定名稱的參數(shù)步藕。表達(dá)式 $(param . name) 相當(dāng)于 request.getParameter (name)。
paramValues將請(qǐng)求參數(shù)名稱映射到一個(gè)數(shù)值數(shù)組(通過(guò)調(diào)用 ServletRequest.getParameter (String name) 獲得)挑格。它與 param 隱式對(duì)象非常類(lèi)似咙冗,但它檢索一個(gè)字符串?dāng)?shù)組而不是單個(gè)值。表達(dá)式 ${paramvalues. name) 相當(dāng)于 request.getParamterValues(name)漂彤。
header將請(qǐng)求頭名稱映射到單個(gè)字符串頭值(通過(guò)調(diào)用 ServletRequest.getHeader(String name) 獲得)雾消。表達(dá)式 ${header. name} 相當(dāng)于 request.getHeader(name)。
headerValues將請(qǐng)求頭名稱映射到一個(gè)數(shù)值數(shù)組(通過(guò)調(diào)用 ServletRequest.getHeaders(String) 獲得)显歧。它與頭隱式對(duì)象非常類(lèi)似仪或。表達(dá)式 ${headerValues. name} 相當(dāng)于 request.getHeaderValues(name)。
cookie將 cookie 名稱映射到單個(gè) cookie 對(duì)象士骤。向服務(wù)器發(fā)出的客戶端請(qǐng)求可以獲得一個(gè)或多個(gè) cookie范删。表達(dá)式 ${cookie. name .value} 返回帶有特定名稱的第一個(gè) cookie 值。如果請(qǐng)求包含多個(gè)同名的 cookie拷肌,則應(yīng)該使用 ${headerValues. name} 表達(dá)式到旦。
initParam將上下文初始化參數(shù)名稱映射到單個(gè)值(通過(guò)調(diào)用 ServletContext.getInitparameter(String name) 獲得)。
除了上述兩種類(lèi)型的隱式對(duì)象之外巨缘,還有些對(duì)象允許訪問(wèn)多種范圍的變量添忘,如 Web 上下文、會(huì)話若锁、請(qǐng)求搁骑、頁(yè)面:
術(shù)語(yǔ) 定義
pageScope將頁(yè)面范圍的變量名稱映射到其值。例如又固,EL 表達(dá)式可以使用 ${pageScope.objectName} 訪問(wèn)一個(gè) JSP 中頁(yè)面范圍的對(duì)象仲器,還可以使用 ${pageScope .objectName. attributeName} 訪問(wèn)對(duì)象的屬性。
requestScope將請(qǐng)求范圍的變量名稱映射到其值仰冠。該對(duì)象允許訪問(wèn)請(qǐng)求對(duì)象的屬性乏冀。例如,EL 表達(dá)式可以使用 ${requestScope. objectName} 訪問(wèn)一個(gè) JSP 請(qǐng)求范圍的對(duì)象洋只,還可以使用 ${requestScope. objectName. attributeName} 訪問(wèn)對(duì)象的屬性辆沦。
sessionScope將會(huì)話范圍的變量名稱映射到其值昼捍。該對(duì)象允許訪問(wèn)會(huì)話對(duì)象的屬性。例如:
${sessionScope. name}
applicationScope將應(yīng)用程序范圍的變量名稱映射到其值肢扯。該隱式對(duì)象允許訪問(wèn)應(yīng)用程序范圍的對(duì)象妒茬。
五、EL操作符
JSP 表達(dá)式語(yǔ)言提供以下操作符蔚晨,其中大部分是 Java 中常用的操作符:
術(shù)語(yǔ) 定義
算術(shù)型+郊闯、-(二元)、*蛛株、/、div育拨、%谨履、mod、-(一元)
邏輯型and熬丧、&&笋粟、or、||析蝴、!害捕、not
關(guān)系型==、eq闷畸、!=尝盼、ne、佑菩、gt盾沫、<=、le殿漠、>=赴精、ge〗驶希可以與其他值進(jìn)行比較蕾哟,或與布爾型、字符串型莲蜘、整型或浮點(diǎn)型文字進(jìn)行比較谭确。
空empty」娇洌空操作符是前綴操作琼富,可用于確定值是否為空。
條件型A ?B :C庄新。根據(jù) A 賦值的結(jié)果來(lái)賦值 B 或 C鞠眉。
例如:
Java代碼1+2=${1+2}
10/5=${10/5}
10div5=${10div5}
10%3=${10%3}
10mod3=${10mod3}
${empty??scope中的屬性名}
${!empty??scope中的屬性名}