EL表達式介紹
- Expression Language表達式語言
- 是一種在JSP頁面獲取數據的簡單方式(只能獲取數據,不能設置數據)
- 在JSP2.0開始引入概念,默認支持EL表達式
語法格式
在JSP頁面的任何靜態部分均可通過:${expression}來獲取到指定表達式的值
禁用EL表達式
使用斜槓“\”符號
使用斜槓符號是一種比較簡單的禁用EL的方法。該方法只需要在EL的起始標記“${”前加上“\”符號,具體的語法如下:
- \${expression}
說明:該語法適合只是禁用頁面的一個或幾個EL表達式的情況。
使用page指令
使用JSP的page指令也可以禁用EL表達式,其具體的語法格式如下:
<%@ page isELIgnored="布爾值" %>
參數說明:
- isELIgnored屬性:用於指定是否禁用頁面中的EL,如果屬性值爲true,則忽略頁面中的EL,否則將解析頁面中的EL。示例:如果要忽略頁面中的EL,可以在頁面的頂部添加一下代碼:<%@ page isELIgnored="true" %>
說明:該方法適合禁用一個JSP頁面中的EL。
L表達式中的運算符
在EL表達式中我們可以使用運算符以達到我們想要的結果,運算符按作用分爲以下幾種:
1.算術運算符
+ 例如:${6+6} 。注意:在EL表達式中的‘+’只有數學運算的功能,沒有連接符的功能,它會試着把運算符兩邊的操作數轉換爲數值類型,進而進行數學加法運算,最後把結果輸出。若出現${'a'+'b'}則會出現異常。
- 例如:${4-3}
* 例如:${4*3}
/ 例如:${9/3}
2.關係運算符
> 或者 gt, 例如:${8>9} 或者 ${8 gt 9 }
>= 或者 ge, 例如:${45>=9} 或者 ${45 ge 9 }
< 或者 lt, 例如:${4<9} 或者 ${4 lt 9 }
<= 或者 le, 例如:${9<=8} 或者 ${9 le 8 }
== 或者 eq, 例如:${4==4} 或者 ${4 eq 4 }
!= 或者 ne, 例如:${4!=3} 或者 ${4 ne 3 }
3.邏輯運算符
&& 或者 and, 例如:${false && false} 或者 ${false and false }
|| 或者 or, 例如:${true || false} 或者 ${true or false }
! 或者 not,例如:${!true}(相當於${false}) 或者 ${not true }
4.三元運算符
? : 例如:${3>2?'是':'不是'}
5.特殊運算符
空運算符: empty
EL獲取數據(從四大域中獲取屬性)
EL只能從四大域中獲取屬性
獲取簡單數據指非對象類型的數據,比如String,Integer,基本類型等
語法:
- ${域名稱.鍵名}:從指定域中獲取指定鍵的值
域屬性相關(4個)
- pageScope:從page範圍域屬性空間中查找指定的key
- requestScope:從request範圍域屬性空間中查找指定的key
- sessionScope:從session範圍域屬性空間中查找指定的key
- applicationScope:從application範圍域屬性空間中查找指定的key
如果沒有使用EL的內置對象,則查找數據順序是依次按照由小到大範圍從四大域中查找指定名稱的屬性值
EL獲取域中存儲的值---對象值
語法:
- ${域名稱.鍵名.屬性名}
本質上會去調用對象的getter方法
EL獲取域中存儲的值 --List集合:
語法:
- ${域名稱.鍵名[索引]}
EL獲取域中存儲的值 --Map集合:
語法:
- ${域名稱.鍵名.key名稱}
- ${域名稱.鍵名["key名稱"]}
例如:
<%@ page import="cn.itcast.domain.User" %>
<%@ page import="java.util.*" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>el獲取數據</title>
</head>
<body>
<%
User user = new User();
user.setName("張三");
user.setAge(23);
user.setBirthday(new Date());
request.setAttribute("u",user);
List list = new ArrayList();
list.add("aaa");
list.add("bbb");
list.add(user);
request.setAttribute("list",list);
Map map = new HashMap();
map.put("sname","李四");
map.put("gender","男");
map.put("user",user);
request.setAttribute("map",map);
%>
<h3>el獲取對象中的值</h3>
${requestScope.u}<br>
<%--
* 通過的是對象的屬性來獲取
* setter或getter方法,去掉set或get,在將剩餘部分,首字母變爲小寫。
* setName --> Name --> name
--%>
${requestScope.u.name}<br>
${u.age}<br>
${u.birthday}<br>
${u.birthday.month}<br>
${u.birStr}<br>
<h3>el獲取List值</h3>
${list}<br>
${list[0]}<br>
${list[1]}<br>
${list[10]}<br>
${list[2].name}
<h3>el獲取Map值</h3>
${map.gender}<br>
${map["gender"]}<br>
${map.user.name}
</body>
</html>
${pageContext.request.contextPath}:動態獲取虛擬目錄
${pageContext.request.contextPath}
是JSP取得絕對路徑的方法,等價於<%=request.getContextPath()%>
。- 也就是取出部署的應用程序名或者是當前的項目名稱。
- 比如我的項目名稱是demo1在瀏覽器中輸入爲
http://localhost:8080/demo1/a.jsp
${pageContext.request.contextPath}
或<%=request.getContextPath()%>
取出來的就是/demo1, - 而"/"代表的含義就是 http://localhost:8080 故有時候項目中這樣寫
${pageContext.request.contextPath}/a.jsp
JSTL
概念:JavaServer Pages Tag Library JSP標準標籤庫。是由Apache組織提供的開源的免費的jsp標籤 。
作用:
- 用於簡化和替換jsp頁面上的java代碼
使用步驟:
- 導入jstl相關jar包
- 引入標籤庫:taglib指令: <%@ taglib %>
- 使用標籤
常用標籤
詳細可以去https://blog.csdn.net/qq_36297434/article/details/84638754 查看。
練習:
- 需求:在request域中有一個存有User對象的List集合。需要使用jstl+el將list集合數據展示到jsp頁面的表格table中
<%@ page import="cn.itcast.domain.User" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>test</title>
</head>
<body>
<%
List list = new ArrayList();
list.add(new User("張三",23,new Date()));
list.add(new User("李四",24,new Date()));
list.add(new User("王五",25,new Date()));
request.setAttribute("list",list);
%>
<table border="1" width="500" align="center">
<tr>
<th>編號</th>
<th>姓名</th>
<th>年齡</th>
<th>生日</th>
</tr>
<%--數據行--%>
<c:forEach items="${list}" var="user" varStatus="s">
<c:if test="${s.count % 2 != 0}">
<tr bgcolor="red">
<td>${s.count}</td>
<td>${user.name}</td>
<td>${user.age}</td>
<td>${user.birStr}</td>
</tr>
</c:if>
<c:if test="${s.count % 2 == 0}">
<tr bgcolor="green">
<td>${s.count}</td>
<td>${user.name}</td>
<td>${user.age}</td>
<td>${user.birStr}</td>
</tr>
</c:if>
</c:forEach>
</table>
</body>
</html>