一、EL表達式
1爲什麼會出現EL
在JSP2.0之後不建議使用JSP表達式和JSP腳本片段,建議使用EL表達式代替JSP表達式,使用JSTL代替JSP腳本片段
2.EL簡介
EL的全稱:Expression Language,表達式語言EL的格式:${表達式}
EL主要用來將域對象中的屬性輸出到頁面
EL表達式默認是全域查找
先從page域中查找,找到直接返回,找不到再繼續在其他域中找,如果在application域中也找不到則返回一個空串
pageScope:用來獲取page域中的對象如果域對象中的屬性名比較特殊,可以通過以下方式獲取域對象中的值:獲取request域中的對象:${requestScope['hello-kitty']}
requestScope:用來獲取request域中的對象
sessionScope:用來獲取session域中的對象applicationScope:來獲取application域中的對象
獲取JavaBean中的屬性值
EL表達式不能直接獲取在JSP腳本片段中聲明的對象,必須將對象放到域對象中才能獲取
通過對象.屬性名的方式獲取JavaBean的屬性值,此時是調用了getXXX方法
如果通過EL表達式獲取的對象的屬性還是一個對象,可以一直點下去
<!-- 獲取Student中的name屬性值 -->
<%
Student stu = new Student(1,"孫悟空",520,new Address(1,"花果山"));
//將stu放到域對象中
request.setAttribute("stu", stu);
%>
${stu.han }
<hr>
<!-- 獲取Student中的address屬性值 -->
${stu.address.name }
3.EL中的十一個隱含對象
一個我們比較熟悉的pageContext
類型:PageContext
作用:與JSP中的作用一樣,一個頂JSP中的九個隱含對象,通過它可以獲取JSP中的其他隱含對象使用EL表達式獲取request對象:
${pageContext.request}
使用EL表達式獲取項目路徑:
${pageContext.request.contextPath}
四個Scope對象
pageScope類型:Map<String , Object>
作用:獲取page域中的對象
requestScope
類型:Map<String , Object>
作用:獲取request域中的對象
sessionScope
類型:Map<String , Object>
作用:獲取session域中的對象
application
類型:Map<String , Object>
作用:獲取application域中的對象
header
類型:Map<String , String>
作用:獲取請求頭中的信息
headValues
類型:Map<String , String[]>
作用:獲取請求頭中一個鍵對象多個值的情況
param
類型:Map<String , String>
作用:獲取請求參數
paramValues
類型:Map<String , String[]>
作用:獲取請求參數中一個鍵對應多個值的情況
cookie
類型:Map<String , Cookie>
作用:根據cookie的名稱獲取Cookie對象
initParam
類型:Map<String , String>
作用:獲取當前Web應用的初始化參數
4.EL中的運算
在EL表達式中可以直接進行加、減、乘、除等運算在EL表達式中有一個我們常用的運算符:empty
empty與null有以下不同
空串時:null返回false;empty返回true我們通常使用empty來判斷一個字符串或集合是否爲空
空集合時:null返回false;empty返回true
二、JSTL表達式
1.JSTL簡介
JSTL的全稱:JSP Standard Tag Library,JSP的標準標籤庫2.標籤庫
core:核心標籤庫,我們又稱它爲c標籤fn:函數標籤庫,需要結合EL表達式使用,裏面定義了一些對字符串的操作
fmt:格式化標籤庫,裏面定義了對時間、日期、數字的國際化
3.核心標籤庫
又稱它爲c標籤,使用它需要導入兩個jar包taglibs-standard-impl-1.2.1.jar
taglibs-standard-spec-1.2.1.jar
要使用c標籤還需要導入核心標籤庫
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
常用的標籤
out標籤
<!-- out標籤:用來向頁面中輸出一些內容 -->
<!-- value屬性:用來設置要輸出的內容,可以使用EL表達式 -->
<!-- default屬性:用來指定當value屬性值中是EL表達式並且無法輸出內容時要顯示的默認值 -->
<!-- escapeXml屬性:用來設置是否解析xml標籤,默認值是true,不解析標籤,如果改爲false,解析標籤 -->
<c:out value="<h1>我要變大</h1>" default="你想輸出的內容不存在" escapeXml="false"></c:out>
set標籤
<!-- set標籤:用來向域對象中添加屬性 ,默認添加到page域中 -->
<!-- var屬性:用來指定向域對象中添加屬性的那個屬性名 -->
<!-- value屬性:用來指定添加到域對象中的屬性值 -->
<!-- scope屬性:用來設置添加到那個域中,可選值有:page,request,session,application -->
<c:set var="username" value="admin" scope="page"></c:set>
<c:set var="username" value="admin" scope="request"></c:set>
<c:set var="username" value="admin" scope="session"></c:set>
<c:set var="username" value="admin" scope="application"></c:set>
${pageScope.username }<br>
${requestScope.username }
remove標籤
<!-- remove標籤:用來將域對象中的屬性移除,默認全域移除 -->
<!-- scope屬性:用來設置要移除那個域中的屬性,可選值有:page,request,session,application -->
<c:remove var="username" scope="page"/>
${pageScope.username }<br>
${requestScope.username }<br>
${sessionScope.username }<br>
${applicationScope.username }
if標籤
<!-- if標籤:與Java中的if語句類似 -->
<!-- test屬性:接受一個布爾類型的值,如果爲true才執行標籤體中的內容 -->
<c:if test="${empty param.username }">
請輸入用戶名:
</c:if>
<c:if test="${not empty param.username }">
歡迎您,${param.username }
</c:if>
choose標籤
<%
int age = 40;
request.setAttribute("age", age);
%>
<!-- choose標籤:與Java中的if..else語句類似 -->
<!-- 多個when標籤只執行一個,所有書寫是一定要注意多個when標籤的順序 -->
<!-- when標籤和otherwise標籤不能脫離choose標籤單獨使用 -->
<c:choose>
<c:when test="${age > 30 }">
大齡剩女
</c:when>
<c:when test="${age > 20 }">
青春靚女
</c:when>
<c:when test="${age > 14 }">
花季少女
</c:when>
<c:otherwise>
小屁孩兒
</c:otherwise>
</c:choose>
forEach標籤
<!-- forEach標籤:與Java中的for循環類似 -->
<!--
begin屬性:用來指定循環的開始,值不能小於0;end指定循環的結束;
var屬性:設置一個屬性值用來接收每次遍歷的數,而且每次遍歷的數會保存到page域中,var的屬性值就是page
域中的那個屬性名
-->
<!-- step屬性:用來設置循環時的步長,默認值是1 -->
<c:forEach begin="1" end="10" var="index" step="1">
<a href="#">${index }</a>
</c:forEach>
<%
List list = new ArrayList();
list.add("劉濤");
list.add("蔣欣");
list.add("王子文");
list.add("楊紫");
list.add("王凱");
request.setAttribute("list", list);
%>
<!-- items屬性:用來接收要變量的對象,通常是一個List -->
<c:forEach items="${list }" var="star">
${star }
</c:forEach>