JSP中的EL表達式和JSTL標籤庫

JSP中的EL表達式和JSTL標籤庫


一丶EL表達式


    EL表達式概念
        在JSP開發中,爲了獲取Servlet域對象中存儲的數據,經常需要些許多Java代碼,這樣會使得JSP頁面混亂,難以維護,因此,在JSP2.0規範提供了EL表達式.EL(Expression Language),它是一種簡單的數據訪問語言.

    什麼是EL
        EL目的是使JSP寫起來更加的簡單,表達式語言靈感來源於ECMAScript和XPath表達式語言,它讓JSP的代碼更加簡便.
    EL語法:${表達式}
    EL的使用
        內置對象:
                    ①作用域
                        內置對象名稱:pageScope ,page作用域
                        內置對象名稱:requestScope ,request作用域
                        內置對象名稱:sessionScope ,session作用域
                        內置對象名稱:applicationScope ,application作用域(servletContext)
                    ②請求參數
                        param:獲得一個參數
                        paramValues:獲取一組參數
                    ③請求頭
                        header:獲得一個請求頭
                        headerValues:獲取一組請求頭
                    ④JSP上下文對象
                        pageContext
                    ⑤全局初始化參數
                        initParam
                    ⑥cookie
                        cookie
    EL的使用
        EL的使用:獲取數據
            ①自定義的數據,必須放在作用域中

代碼描述:
①獲得字符串
    <!--設置傳入不同域中的參數-->
                <%
pageContext.setAttribute("name", "pname");
request.setAttribute("name", "rname");
session.setAttribute("name", "sname");
application.setAttribute("name", "aname");
%>
<!-- 獲取 -->
<h2>獲取不同域中數據:</h2>
${pageScope.name }<br/>
${requestScope.name }<br/>
${sessionScope.name }<br/>
${applicationScope.name }

顯示效果:
這裏寫圖片描述

            ②獲得數組
<h2>獲取數組</h2>
<%
String[] str2 = {"abc","cde","fgh","hij"};
pageContext.setAttribute("str22", str2);
%>
${str22 }<br/>
${str22[2] }

顯示效果:
這裏寫圖片描述

            ③獲得List數據
<h2>獲取List集合</h2>
<%
List<String> list = new ArrayList<String>();
list.add("abc1");
list.add("abc2");
list.add("abc3");
list.add("abc4");
pageContext.setAttribute("list1", list);
%>
${list1 }<br/>
${list1[2] }

顯示效果:
這裏寫圖片描述

            ④獲得Map<String,String>數據
<%
        Map<String,String> map = new HashMap<String,String>();
        map.put("demo01", "ok01");
        map.put("demo02", "ok02");
        map.put("demo03", "ok03");
        map.put("demo04", "ok04");
        pageContext.setAttribute("map01", map);
    %>
    ${map01}<br/>
    ${map01.demo01 }<br/>

顯示效果:
這裏寫圖片描述

            ⑤獲得Map<String,User>數據
<%
        Map<String,User> map = new HashMap<String,User>();
        map.put("user01", new User("張三","123"));
        map.put("user02", new User("李四","456"));
        map.put("user03", new User("王五","789"));
        map.put("user04", new User("趙六","1234"));
        pageContext.setAttribute("map01", map);

    %>
    ${map01 }<br/>
    ${map01.user01 }<br/>
    ${map01.user02 }<br/>
    ${map01.user01.username }<br/>
    ${map01.user01.password }<br/>
    ${map01['user03'].username }

顯示效果:
這裏寫圖片描述

EL的使用:運算符
①模擬數據
<%
pageContext.setAttribute(“num1”, 10);
pageContext.setAttribute(“num2”, 20);
pageContext.setAttribute(“num3”, 30);
pageContext.setAttribute(“num4”, 40);

%>

②算數運算符
+/-/*/除(/)div/求餘:%(mod)

<h2>算數運算符</h2>
    ${num1+num2 }<br/>
    ${num1-num2 }<br/>
    ${num1*num2 }<br/>
    ${num1/num2 }<br/><!-- div -->
    ${num1%num2 }<br/><!-- mod -->

顯示效果:
這裏寫圖片描述

            ③關係運算符
                大於:>(gt),小於:<(lt),等於:==(eq),大於等於:>=(ge);小於等於:<=(le)
<h2>關係運算符</h2>
    ${num1<num2 }<__________>${num1 lt num2 }<br>
    ${num1>num2 }<__________>${num1 gt num2 }<br>
    ${num1<=num2 }<__________>${num1 le num2 }<br>
    ${num1>=num2 }<__________>${num1 ge num2 }<br>
    ${num1==num2 }<__________>${num1 eq num2 }

顯示效果:
這裏寫圖片描述

            ④邏輯運算符
                與:&&,或:||,非:!

                        <h2>邏輯運算符</h2>
    ${num1<num2 && num2<num3 }<_________>${num1<num2 and num2<num3 }<br>
    ${num1<num2 || num2<num3 }<_________>${num1<num2 or num2<num3 }<br>
    ${!(num1<num2) }<_________>${not(num1<num2) }

顯示效果:
這裏寫圖片描述

            ⑤三元運算符
                ${n1 < n2 ?  "true" : "false"}
<h2>三元運算符</h2>
    ${num1>num2 ? "正確" : "錯誤" }

顯示效果:
這裏寫圖片描述

            ⑥empty運算符
                對象是否爲null
                集合是否爲null
                字符串是否爲null
代碼演示:

                        <%
        String str08=null;
        pageContext.setAttribute("demo01",str08 );
        pageContext.setAttribute("userrr", new User());
        Map<String,String> map02 = new HashMap<String,String>();
        map02.put("zyc", "good");
        pageContext.setAttribute("map02", map02);
      %>

        字符串:${empty domo01}<br>
        對象:${empty userrr }<br>
        集合:${empty map02 }<br>

                        <%
        String str08=null;
        pageContext.setAttribute("demo01",str08 );
        pageContext.setAttribute("userrr", new User());
        Map<String,String> map02 = new HashMap<String,String>();
        map02.put("zyc", "good");
        pageContext.setAttribute("map02", map02);
      %>

        字符串:${empty domo01}<br>
        對象:${empty userrr }<br>
        集合:${empty map02 }<br>

顯示效果:
這裏寫圖片描述

二丶JSTL標籤庫
概念:
       JSTL(JSP Standard Tag Library,JSP標準標籤庫)是一個不斷完善的開放源代碼的JSP標籤庫,是由apache的jakarta小組來維護的。JSTL只能運行在支持JSP1.2和Servlet2.3規範的容器上,如tomcat 4.x。在JSP 2.0中也是作爲標準支持的。
        JSTL 1.0 發佈於 2002 年 6 月,由四個定製標記庫(core、format、xml 和 sql)和一對通用標記庫驗證器(ScriptFreeTLV 和 PermittedTaglibsTLV)組成。core 標記庫提供了定製操作,通過限制了作用域的變量管理數據,以及執行頁面內容的迭代和條件操作。它還提供了用來生成和操作 URL 的標記。顧名思義,format 標記庫定義了用來格式化數據(尤其是數字和日期)的操作。它還支持使用本地化資源束進行 JSP 頁面的國際化。xml 庫包含一些標記,這些標記用來操作通過 XML 表示的數據,而 sql 庫定義了用來查詢關係數據庫的操作。

    JSTL包含的標籤庫
        Core http://java.sun.com/jsp/jstl/core  前綴:c

        118N http://java.sun.com/jsp/jstl/fmt 前綴:fmt

        SQL http://java.sun.com/jsp/jstl/sql  前綴:sql

        XML http://java.sun.com/jsp/jstl/xml  前綴:x

        Functions http://java.sun.com/jsp/jstl/functions  前綴:fn

    JSTL使用步驟:
        ①導包
            jstl.jar
            standard.jar
        ②引入標籤庫
            <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>   prefix:前綴
        ③使用格式
            <c:類型 相關參數> </c:類型>

    Core標籤庫

        out標籤
            <c:out value="ok"></c:out> value:輸出的類容
        if標籤
<h2>if標籤的使用</h2>
    <!-- 進行計算${3>2},然後將值存入變量v,將變量v存放進HttpSession -->
    <c:if test="${3>2 }" var="v" scope="session">
        3是大於2的.
    </c:if>
    <hr/>
    <c:set value="1" var="num" property="num"></c:set>
    <c:if test="${num==1 }">
        this is first login!!!
    </c:if>
    <hr/>
    <%
        User user = new User("張三","23");
        pageContext.setAttribute("user", user);
    %>
    <c:if test="${empty user }">
        您好沒有登錄,請登錄!!!
    </c:if>

    <c:if test="${not empty user }">
        ${user.username },歡迎您!!!
    </c:if>

顯示效果:
這裏寫圖片描述

test屬性用於設置邏輯表達式;

var屬性用於指定邏輯表達式中變量的名字;
scope屬性用於指定var變量的作用範圍,默認爲page.
如果test的結果爲true,那麼標籤將被執行,否則不執行

forEach標籤:

<h2>foreach標籤的使用</h2>
    <%
        int num = 10;
        pageContext.setAttribute("num", num);
    %>
    <!-- begin="${num }" end="100" 從10到100 每個只賦給V,step="20"循環遍歷是每次增加20個數,
    varStatus="status"狀態碼可以看變化的次數等  -->
    <c:forEach  begin="${num }" end="100" var="v" step="20" varStatus="status">
        ${status.count } &nbsp;&nbsp;&nbsp;&nbsp; ${status.first } &nbsp;&nbsp;&nbsp;&nbsp; ${status.last } &nbsp;&nbsp;&nbsp;&nbsp; ${v }<br/> 
    </c:forEach>

顯示效果:
這裏寫圖片描述
var屬性用於指將當前迭代到的元素保存到page域中的名稱;
items屬性用於指定將迭代的對象;
varStatus屬性用於指定當前迭代狀態信息的對象保存到page域中的名稱;
varStatus屬性包含的相關狀態:count表示元素在集合中的序號,從1開始累加,
index表示當前元素在集合中的索引,從0開始,
first表示當前是否爲集合的第一個元素,
last表示當前是否爲集合的最後一個元素,
begin屬性指定從第幾個元素開始迭代;
end屬性指迭代到對應的值;
step屬性用於指定迭代的步長,就是每次增加的數量.

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