JavaWeb初級學習 之 EL表達式&JSTL表達式

一、EL表達式


1爲什麼會出現EL

在JSP2.0之後不建議使用JSP表達式和JSP腳本片段,建議使用EL表達式代替JSP表達式,使用JSTL代替JSP腳本片段


2.EL簡介

EL的全稱:Expression Language,表達式語言
EL的格式:${表達式}
EL主要用來將域對象中的屬性輸出到頁面
EL表達式默認是全域查找 

先從page域中查找,找到直接返回,找不到再繼續在其他域中找,如果在application域中也找不到則返回一個空串


EL爲我們提供了四個Scope對象,用來獲取指定域中的對象,這四個Scope對象是將域對象中的域單獨拿了出來,這四個Scope對象分別是pageScope、requestScope、sessionScope、applicationScope
pageScope:用來獲取page域中的對象
requestScope:用來獲取request域中的對象
sessionScope:用來獲取session域中的對象

applicationScope:來獲取application域中的對象


如果域對象中的屬性名比較特殊,可以通過以下方式獲取域對象中的值:獲取request域中的對象:${requestScope['hello-kitty']}
獲取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
空集合時:null返回false;empty返回true
我們通常使用empty來判斷一個字符串或集合是否爲空


二、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>





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章