1. EL簡介
EL,Expression Lanauage,原本是JSTL1.0中方便存取數(shù)據(jù)所定義的語言。當(dāng)時(shí)只能在JSTL標(biāo)簽中使用。如
<c:out value="${3+7}">。
到了JSP2.0以后,EL被正式納入標(biāo)準(zhǔn)規(guī)范之一。因此,要在jsp頁面中直接使用EL,容器必須是至少支持Servlet2.4/JSP2.0的,而如Tomcat4.1.29,只支持servlet2.3/JSP1.2,所以不能在jsp頁面中直接使用EL。
2. EL語法
2.1 運(yùn)算符--.和[]
${sessionScope.user.sex}
${sessionScope.user["sex"]}
相當(dāng)于:
User user = (User)session.getAttribute("user");
String sex = user.getSex();
需要注意的兩點(diǎn):
1. 當(dāng)屬性名稱中有特殊字符,如“_”時(shí),必須使用[].
${sessionScope.user.my_name}不正確,應(yīng)改為$(sessionScope.user["my_name"]);
2. 使用變量時(shí),必須使用[].
${sessionScope.user[data]}. data="name"時(shí),相當(dāng)于${sessionScope.user["name"]}.但不能使用${sessionScope.user.data}.
3. 關(guān)系運(yùn)算符,使用${param.password1 == param.password2},不能寫成${param.password1} == ${param.password2}
4. ${empty param.username} = ${param.username == null}判斷是否為空或?yàn)閚ull。
2.2 變量
$(username)
沒有指定范圍的時(shí)候,會(huì)依次在Request,session,Application中查找username,找到就返回不再繼續(xù);否則返回null
2.3 自動(dòng)類型轉(zhuǎn)換
${param.count+10}
相當(dāng)于:
String str = request.getParamter("count");
int count = Integer.ParseInt(str);
count = count + 10;
2.4 隱含對(duì)象
a. 范圍相關(guān):pageScore,requestScore,sessionScore,applicationScore
這4個(gè)隱含對(duì)象只能用來取得范圍屬性值,也就是getAttribute(String name),不能取得其他信息比如請(qǐng)求參數(shù)或表頭信息等。
b. 輸入相關(guān):param,paramValues
${param.name} = request.getParameter(String name)
${paramValues} = request.getParameterValues(String name),獲取復(fù)選框值的時(shí)候使用。eg:${paramValues.habit[0]},${paramValues.habit[1]}
<fmt:questEncoding value="GB2312" /> = request.setCharacterEncoding("GB2312")
c. 其他: cookie,header,headerValues,initParam,pageContext
c1. cookie以key、value的方式將sessionTracking中的內(nèi)容記錄在一個(gè)文本文件中。從cookie中獲取值,${cookie.username}
c2. header存儲(chǔ)用戶瀏覽器和服務(wù)端用來溝通的數(shù)據(jù),當(dāng)用戶要求服務(wù)端的網(wǎng)頁時(shí),會(huì)送出一個(gè)記載要求信息的標(biāo)頭文件。包括用戶瀏覽器的版本,用戶計(jì)算機(jī)的區(qū)域等相關(guān)數(shù)據(jù)。eg:${header["User-Agent"]}獲取用戶瀏覽器版本.同一標(biāo)頭有不同值的話,使用headerValues來獲取
c3. ${initParam.userid} 從web.xml中設(shè)定的值,相當(dāng)于String userid=(String)application.getInitParameter("userid");
l<context-param>
l<param-name>userid</param-name>
l<param-value>mike</param-value>
l</context-param>
l
c4. 使用${pageContext}獲取其他有關(guān)用戶要求或頁面的信息
${pageContext.request.queryString}:獲取請(qǐng)求的參數(shù)字符串
${pageContext.request.requestURL}:獲取請(qǐng)求的URL,但不包含請(qǐng)求的參數(shù)字符串
${pageContext.request.contextPath}:服務(wù)的web application名稱