Day16---EL和JSTL

一、今日內容

1. EL表達式
	1. EL表達式概述
	2. EL表達式使用
2. JSTL
	1. jstl概述
	2. 常用的JSTL標籤
3. 顯示所有用戶信息案例

二、EL表達式

1. EL表達式概述
1. 概念:Expression Language 表達式語言
2. 作用:替換和簡化jsp頁面中java代碼的編寫
3. 語法:${表達式}
4. 注意:
	* jsp默認支持el表達式的。如果要忽略el表達式
		1. 設置jsp中page指令中設置屬性:isELIgnored="true" 忽略當前jsp頁面中所有的el表達式
		2. \${表達式} :忽略當前這個el表達式
2. EL表達式使用
1. 運算:
		* 運算符:和java的運算符一樣
			1. 算數運算符: + - * /(div) %(mod)
			2. 比較運算符: > < >= <= == !=
			3. 邏輯運算符: &&(and) ||(or) !(not)
			4. 空運算符: empty
				* 功能:用於判斷字符串、集合、數組對象是否爲null或者長度是否爲0
				* ${empty list}:判斷字符串、集合、數組對象是否爲null或者長度爲0
				* ${not empty str}:表示判斷字符串、集合、數組對象是否不爲null 並且 長度>0
2. 獲取值
	1. el表達式只能從域對象中獲取值
	2. 語法:
		1. ${域名稱.鍵名}:從指定域中獲取指定鍵的值
			* 域名稱:
				1. pageScope		--> pageContext
				2. requestScope 	--> request
				3. sessionScope 	--> session
				4. applicationScope --> application(ServletContext)
			* 舉例:在request域中存儲了name=張三
			* 獲取:${requestScope.name}

		2. ${鍵名}:表示依次從最小的域中查找是否有該鍵對應的值,直到找到爲止。
		
3. 獲取對象、List集合、Map集合的值
	1. 對象:${域名稱.鍵名.屬性名}
		* 本質上會去調用對象的getter方法
			* 注意:這裏是屬性名不是類的成員變量。
			* 小結:EL表達式和BeanUtils本質上都是根據類屬性名來調用getter/setter方法。所以,當需要寫多行代碼時,可以構造帶get或者set的方法,將代碼寫在方法裏面。比如:
				在jsp頁面上有requestScope.user對象, user對象有成員變量brithday:"Tue Jun 12 15:39:11 CST 2019",現在需要顯示中文,可以在User類中編寫下面方法,再寫${requestScope.user.StrDate}:			
					public String getStrDate() {
				        if (brithday != null) {
				            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
				            return sdf.format(this.brithday);
				        } else {
				            return "";
				        }
				    }
	2. List集合:${域名稱.鍵名[索引]}

	3. Map集合:
		* ${域名稱.鍵名.key名稱}
		* ${域名稱.鍵名["key名稱"]}    * 和python類似

三、JSTL

1. jstl概述
1. 概念:JavaServer Pages Tag Library  JSP標準標籤庫
		* 是由Apache組織提供的開源的免費的jsp標籤		<標籤>

2. 作用:用於簡化和替換jsp頁面上的java代碼		

3. 使用步驟:
	1. 導入jstl相關jar包
	2. 引入標籤庫:taglib指令:  <%@ taglib %>  導入含jsp、jstl、core的那個資源
		* <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
	3. 使用標籤

jstl需要的jar包下載連接: 鏈接:https://pan.baidu.com/s/1OjSsS5Qk0utLJPkkCagwsQ
提取碼:smf1

2. 常用的JSTL標籤
1. if:相當於java代碼的if語句
		1. 屬性:
            * test 必須屬性,接受boolean表達式
                * 如果表達式爲true,則顯示if標籤體內容,如果爲false,則不顯示標籤體內容
                * 一般情況下,test屬性值會結合el表達式一起使用
   		2. 注意:
       		 * c:if標籤沒有else情況,想要else情況,則可以在定義一個c:if標籤
		* 舉例:
				<c:if test="true">我會被顯示</c:if>
2. choose:相當於java代碼的switch語句
	1. 使用choose標籤聲明         			相當於switch聲明
       2. 使用when標籤做判斷         			相當於case
       3. 使用otherwise標籤做其他情況的聲明    	相當於default
	* 舉例:
		<c:choose>
			<c:when test="1">星期一</c:when>
			<c:when test="2">星期二</c:when>
			<c:otherwise>錯誤</c:otherwise>
		</choose>
3. foreach:相當於java代碼的for語句
	1. 完成重複操作:
		1. 屬性:
			1. begin:開始值
			2. end:結束值  (左閉右閉,包含結束值)
			3. var:臨時變量
			4. step:步長
			5. varStatus:循環狀態對象
				1. varStatus.index: 容器中元素的索引(數字)從0開始
				2. varStatus.count:當前循環次數,從1開始
		2. 舉例:
			* Java實現
				for (int i = 1; i <=10; i++) {
					System.out.println(i)
				}
			* jstl實現:
				<c:forEach begin="1" end="10" var="i" step="1">
			        ${i} <br>
			    </c:forEach>
	2. 遍歷容器:
		1. 屬性:
			1. items:容器對象
			2. var:容器中元素的臨時變量
			3. varStatus:循環狀態對象
				1. varStatus.index: 容器中元素的索引(數字)從0開始
				2. varStatus.count:當前循環次數,從1開始
		2. 舉例:
			* java代碼:
				for (User user: list) {
			         System.out.println(user.getName());
			    }
			* hstl代碼:
				<c:forEach items="list" var="user">
					${user.name}
				</c:forEach>

三、顯示所有用戶信息案例

需求:

  1. 在request域中有一個存有User對象的List集合。需要使用jstl+el將list集合數據展示到jsp頁面的表格table中
  2. 表格的每一行(除表頭外)背景色交替。

效果:
在這裏插入圖片描述
jsp代碼:

<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page import="cn.wanghao.web.domain.User" %><%--
  Created by IntelliJ IDEA.
  User: Dream^hao`
  Date: 2020/2/11
  Time: 17:10
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
    <%
        List list = new ArrayList();
        list.add(new User("張三", "123"));
        list.add(new User("李四", "111"));
        list.add(new User("王五", "333"));
        request.setAttribute("list", list);
    %>

    <table border="1" width="500px">
        <tr>
            <th>編號</th>
            <th>賬號</th>
            <th>密碼</th>
        </tr>
        <c:forEach items="${list}" var="user" varStatus="s">
            <c:if test="${s.count%2==1}">
                <tr bgcolor="#ffc0cb">
                    <td>${s.count}</td>
                    <td>${user.userName}</td>
                    <td>${user.passwd}</td>
                </tr>
            </c:if>
            <c:if test="${s.count%2==0}">
                <tr bgcolor="#adff2f">
                    <td>${s.count}</td>
                    <td>${user.userName}</td>
                    <td>${user.passwd}</td>
                </tr>
            </c:if>
        </c:forEach>
    </table>

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