1.EL表達式簡介 EL全名為Expression Language。EL的主要作用為: 獲取數據:EL表達式主要用於替換jsp頁面中的腳本表達式,以從各種類型的web域中檢索java對象,獲取數據。(某個web域中的對象,訪問JavaBean的屬性,訪問list集合,訪問map集合,訪問數組) 執 ...
1.EL表達式簡介
EL全名為Expression Language。EL的主要作用為:
- 獲取數據:EL表達式主要用於替換jsp頁面中的腳本表達式,以從各種類型的web域中檢索java對象,獲取數據。(某個web域中的對象,訪問JavaBean的屬性,訪問list集合,訪問map集合,訪問數組)
- 執行運算:利用EL表達式可以在JSP頁面中執行一些基本的關係運算、邏輯運算和算術運算,以在JSP頁面中完成一些簡單的邏輯運算。${user==null}
- 獲取web開發常用對象:EL 表達式定義了一些隱式對象,利用這些隱式對象,web開發人員可以很輕鬆獲得對web常用對象的引用,從而獲得這些對象中的數據。
- 調用java方法:EL表達式允許用戶開發自定義EL函數,以在JSP頁面中通過EL表達式調用Java類的方法。
1.1 獲取數據
使用EL表達式獲取數據的語法:"${標識符}"
EL表達式語句在執行時,會調用pageContext.findAttribute方法,用標識符為關鍵字,分別從page、request、session、application四個域中查找相應的對象,找到則返回相應對象,找不到則返回""(空字元串)。若沒有指定哪個屬性範圍,它的預設值會從page範圍找,假如找不到,再依序到request,session,application範圍找。假如全部的範圍都找不到時,就返回null值了。如下:${ }中沒有sessionScope屬性範圍,依舊可以讀到存儲的數據。
<body> <% Customer customer=new Customer(); customer.setName("koala"); customer.setAge(12); session.setAttribute("customer",customer); %> <br> name: ${customer.name} <br> age: ${customer.age} </body>
EL表達式可以很輕鬆獲取JavaBean的屬性,或獲取數組、Collection、Map類型集合的數據。
獲取request域中的對象:
<body> <% request.setAttribute("name", "koala"); %> name: ${name}
</body>
獲取JavaBean的屬性:
<body> <% Customer customer=new Customer(); customer.setAge(21); request.setAttribute("customer",customer); %> customer's age: ${customer.age} </body>
獲取list集合中指定位置的元素:
<body> <% Customer customer1=new Customer(); customer1.setAge(21); Customer customer2=new Customer(); customer2.setAge(23); List<Customer> list=new ArrayList<Customer>(); list.add(customer1); list.add(customer2); request.setAttribute("list", list); %> customer2's age:${list[1].age} </body>
1.2 執行運算
語法:${運算表達式},EL表達式支持如下運算符:
1.2.1 關係運算符
1.2.2 邏輯運算符
1.2.3 empty運算符
檢查對象是否為null(空)
1.2.4 二元表達式
${username==null?"":user.name}
1.2.5 []和.號運算符
EL提供.和[]兩種運算符來存取數據,兩者所代表的意思是一樣的。
如下,當域對象的屬性名中有特殊字元“.”時使用[]會很方便:
<body> <% Customer customer=new Customer(); customer.setName("koala"); session.setAttribute("com.d.dsa",customer); %> <br> name: ${sessionScope["com.d.dsa"].name} </body>
2.EL的隱含對象
EL中一共有11個隱含對象,可以將它分成三類:
- 與範圍有關的隱含對象:pageScope, requestScope, sessionScope, applicationScope
- 與輸入有關的隱含對象,獲取請求參數的:param(一個), paramValues(一組)
- 其它請求對象:cookie, header, headerValues, initParam, pageContext
2.1 與範圍有關的隱含對象
<body> time:${applicationScope.time} <!-- 相當於 <%=application.getAttribute("time") %> --> <% application.setAttribute("time",new Date()); %> </body>
2.2 與輸入有關的隱含對象
el.jsp中:
<body>
<a href="http://localhost:8080/MyWebProject/jspTest/el2.jsp?score=98&name=A&name=B">To EL2 page</a>
</body>
el2.jsp中:
<body>
score:${param.score}
<!--相當於:
<%= request.getAttribute("score")%>
-->
<br>
names:${paramValues.name[0]} and ${paramValues.name[1]}
</body>
運行el.jsp:
點擊超鏈接:
註:
names:${paramValues.name[0].class.name}
相當於
<%= request.getParameterValues("name")[0].getClass().getName()%>
也就是只要返回值有get...方法,就可以使用EL方法調用。
2.3 其它請求對象
- cookie:假如我們在cookie中設定一個名稱為userCountry的值,那麼可以使用${cookie.userCountry}來取得它。
- header和headerValues:header存儲用戶瀏覽器和服務端用來溝通的數據,當用戶要求服務端的網頁時,會送出一個記載要求信息的標頭文件,例如,用戶瀏覽器的版本,用戶電腦所設定的區域等其他相關數據。若同一標頭名稱擁有不同的值,改用headerValues。
- initParam:獲得當前web應用的初始化參數:在web.xml中進行配置,
<context-param> <param-name>initName</param-name> <param-value>koala</param-value> </context-param>
在jsp文件中使用initParam:${initParam.initName}即可獲得當前web應用的初始化參數koala。
- pageContext:pageContext即為PageContext類型,但只能讀取屬性。
contextPath:${pageContext.request.contextPath}
sessionId:${pageContext.session.id}
sessionAttributeNames:${pageContext.session.attributeNames}
3.EL的關係運算符
比較重要的是三目運算符:${param.score > 60 ? "及格" : "不及格"}
4.empty運算符
empty可以作用於一個集合,若集合不存在或集合中沒有元素,其結果都為true。
<body> <% List<String> names=new ArrayList<String>(); names.add("abc"); request.setAttribute("names",names); %> names is empty:${empty requestScope.names} </body>
運行jsp文件,
搜索微信公眾號“程式員考拉”歡迎關註!