jsp詳細總結二(EL表達式,JSTL)

一.EL表達式

做用:EL :爲了消除jsp中的Java代碼html

1.語法java

${EL表達式}
a.EL不須要導包
b.在el中調用屬性,實際上是調用的getXxx()方法
${範圍.對象.屬性.屬性的屬性 }
${requestScope.student.address.schoolAddress }數組

2.操做符:操做:屬性,不是對象瀏覽器

. : 使用方便
[] : 若是是常量屬性,須要使用雙引號/單引號 引發來;比點操做符更增強大(能夠訪問數據,獲取變量值)session

  • []強大之處:
  • a.能夠容納一些 特殊符號 (. ? -)
  • b.[]能夠容納 變量屬性 (能夠動態賦值)
  • String x =「a」; $ {requestScope.a}等價於$ {requestScope[「a」]}等價於${requestScope[x]}
  • c.能夠處理數組:${requestScope.arr[0] }
  • 獲取map屬性
    Map<String,Object> map = new HashMap<>();
    map.put(「cn」,「中國」);
    map.put(「us」,「美國」);
    request.setAttrubute(「map」,map);
    ${requestScope.map.cn}

3.經過EL獲取JSP 九大內置對象
${pageContext }
${pageContext.request }
${pageContext.sessoin }
${pageContext.方法名去掉()和get而且將首字母小寫} //上面的就是app

4.各內置對象的做用域jsp

<%// 向page做用域存入內容
    pageContext.setAttribute("name", "張三"); // 同一頁面中的信息
    request.setAttribute("name", "李四");    // 一次請求有效的信息(例如servlet存入結果,jsp獲取結果)
    session.setAttribute("name", "王五"); // 每一個用戶(瀏覽器)獨有的信息(例如購物車信息)
    application.setAttribute("name", "趙六"); // 適合放全局信息(城市信息, 類別信息)
    %>
 
    <!-- 從page做用域獲取內容-->
    <%= pageContext.getAttribute("name")%>
    <!--  從page做用域獲取內容(推薦) -->
    ${ pageScope.name}
 
    <!-- 從request做用域取-->
    <%= request.getAttribute("name")%>
    <!-- 從request做用域取(推薦)-->
    ${ requestScope.name}
 
    <!-- 從session做用域取值 -->
    <%= session.getAttribute("name")%>
    <!-- 從session做用域取值(推薦) -->
    ${ sessionScope.name}
 
    <!-- 從application做用域取值 -->
    <%= application.getAttribute("name")%>
    <!-- 從application做用域取值(推薦) -->
    ${ applicationScope.name}
 
    <hr/>
    <!-- 在el表達式取做用域變量時,不加前綴,先搜索pageScope, 再搜索requestScope, 繼續搜索sessionScope, 再搜索applicationScope-->
    ${ name}

二.JSTL (比EL更增強大)

  • 須要引入2個jar :jstl.jar standard.jar

引入tablib :spa

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

其中prefix=「c」 :前綴.net

核心標籤庫: 通用標籤庫、條件標籤庫、 迭代標籤庫code

1.通用標籤庫

1.<c:set>賦值

i:
在某個做用域之中(4個範圍對象),給某個變量賦值
<%-- request.setAttribute(「name」, 「zhangsan」) ; --%>

<c:set var=「name」 value=「zhangsan」 scope=「request」/>
${requestScope.name }

<c:set var=「變量名」 value=「變量值」 scope=「4個範圍對象的做用域」/>

給普通對象賦值
在某個做用域之中(4個範圍對象),給某個對象的屬性複製 (此種寫法,不能指定scope屬性)

${requestScope.student.sname}  //取出studen對象sname屬性值
<c:set target="${requestScope.student}" property="sname"  value="zxs" />

給map對象賦值

${requestScope.countries.cn}  //取出countries對象cn屬性值
<c:set target="${requestScope.countries}" property="cn"  value="中國" />

<c:set target=「對象」 property=「對象的屬性」 value=「賦值」 />

注意 <c:set>能夠給不存在的變量賦值 (但不能給不存在的對象賦值)

2.<c:out>顯示
傳統EL:$ {requestScope.student }
c:out方式:<c:out value ="$ {requestScope.student }"
c:out顯示不存在的數據:<c:out value="$ {requestScope.stu}>" default=「zs-23」>

  • true:<c:out value=‘百度’ default=「當value爲空的,顯示的默認值」 escapeXml=「true」 /> //將a標籤內容以文字形式顯示
  • false:<c:out value=‘百度’ escapeXml=「false」 /> //顯示連接

3.<c:remove >:刪除屬性

<c:set var=「a」 value=「aaa」 scope=「request」/> //賦值
${a} // 賦值後顯示
<c:remove var=「a」 scope=「request」/> //刪除
${a} //刪除後再顯示

2.條件標籤庫

1.選擇
單重選擇

<c:if test="${6>2}" var = "result" scope="request" ></c:if>

if else if… esle if… else /switch

<c:choose>
	<c:when test="${requestScope.role == '老師'}">
				老師代碼 .... 
	 </c:when>
	<c:when test="${requestScope.role == '學生'}">   ==能夠用 eq 代替
				學生代碼....
	</c:when>
	<c:otherwise>  
				管理員其餘人員....
	 </c:otherwise>
</c:choose>

3.迭代標籤庫(循環)

for(int i=0;i<5;i++)
<c:forEach var=「name」 items=" r e q u e s t S c o p e . n a m e s " > − {requestScope.names }" > - requestScope.names">{name }-
</c:forEach>

//至關於 for(int i=0;i<5;i++)
<c:forEach begin="0" end="5" step="1" varStatus="status" >
	${status.index}
</c:forEach>

//至關於for(String str:names)
<c:forEach var="name" items="${requestScope.names}">
	${name}
</c:forEach>

<c:forEach var="student" items="${requestScope.students }" >
		${student.sname }-${student.sno }	
</c:forEach>

jsp詳細總結一

相關文章
相關標籤/搜索