JSP&EL&JSTL

JSP

概念

* Java Server Pages: java服務(wù)器端頁(yè)面
  * 可以理解為:一個(gè)特殊的頁(yè)面,其中既可以指定定義html標(biāo)簽,又可以定義java代碼
  * 用于簡(jiǎn)化書(shū)寫(xiě)?。?!

原理


 * JSP本質(zhì)上就是一個(gè)Servlet

JSP的腳本:

JSP定義Java代碼的方式

  1. <% 代碼 %>:定義的java代碼,在service方法中。service方法中可以定義什么,該腳本中就可以定義什么。
  2. <%! 代碼 %>:定義的java代碼,在jsp轉(zhuǎn)換后的java類的成員位置。
  3. <%= 代碼 %>:定義的java代碼,會(huì)輸出到頁(yè)面上。輸出語(yǔ)句中可以定義什么,該腳本中就可以定義什么。

JSP的內(nèi)置對(duì)象

在jsp頁(yè)面中不需要獲取和創(chuàng)建,直接使用的對(duì)象
jsp一共有9個(gè)內(nèi)置對(duì)象。
 * request
 * response
 * out:字符輸出流對(duì)象??梢詫?shù)據(jù)輸出到頁(yè)面上。和response.getWriter()類似
   * response.getWriter()和out.write()的區(qū)別
    * 在tomcat服務(wù)器真正給客戶端做出響應(yīng)之前,會(huì)先找response緩沖區(qū)數(shù)據(jù),
     再找out緩沖區(qū)數(shù)據(jù)。
    * response.getWriter()數(shù)據(jù)輸出永遠(yuǎn)在out.write()之前

JSP的指令

作用:用于配置JSP頁(yè)面,導(dǎo)入資源文件

格式:<%@ 指令名稱 屬性名1=屬性值1 屬性名2=屬性值2 ... %>

分類:

  1. page: 配置JSP頁(yè)面的
     * contentType:等同于response.setContentType()
      1. 設(shè)置響應(yīng)體的mime類型以及字符集
      2. 設(shè)置當(dāng)前jsp頁(yè)面的編碼(只能是高級(jí)的IDE才能生效,如果使用低級(jí)工具,則需要設(shè)置pageEncoding屬性設(shè)置當(dāng)前頁(yè)面的字符集)
     * import:導(dǎo)包
     * errorPage:當(dāng)前頁(yè)面發(fā)生異常后,會(huì)自動(dòng)跳轉(zhuǎn)到指定的錯(cuò)誤頁(yè)面
     * isErrorPage:標(biāo)識(shí)當(dāng)前也是是否是錯(cuò)誤頁(yè)面。
      * true:是,可以使用內(nèi)置對(duì)象exception
      * false:否。默認(rèn)值。不可以使用內(nèi)置對(duì)象exception
  2. include : 頁(yè)面包含的。導(dǎo)入頁(yè)面的資源文件
     * <%@include file="top.jsp"%>
  3. taglib : 導(dǎo)入資源
     * <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
      * prefix:前綴,自定義的

JSP注釋

  1. html注釋:
    <-- -->:只能注釋html代碼片段
  2. jsp注釋:推薦使用
    <%-- --%>:可以注釋所有

EL表達(dá)式

  1. 概念:Expression Language 表達(dá)式語(yǔ)言

  2. 作用:替換和簡(jiǎn)化jsp頁(yè)面中java代碼的編寫(xiě)

  3. 語(yǔ)法:${表達(dá)式}

  4. 注意:
     * jsp默認(rèn)支持el表達(dá)式的。如果要忽略el表達(dá)式
      1. 設(shè)置jsp中page指令中:isELIgnored="true" 忽略當(dāng)前jsp頁(yè)面中所有的el表達(dá)式
      2. ${表達(dá)式} :忽略當(dāng)前這個(gè)el表達(dá)式

  5. 使用:
     1. 運(yùn)算:
      * 運(yùn)算符:
       1. 算數(shù)運(yùn)算符: + - * /(div) %(mod)
       2. 比較運(yùn)算符: > < >= <= == !=
       3. 邏輯運(yùn)算符: &&(and) ||(or) !(not)
       4. 空運(yùn)算符: empty
        * 功能:用于判斷字符串、集合、數(shù)組對(duì)象是否為null或者長(zhǎng)度是否為0
        * ${empty list}:判斷字符串、集合、數(shù)組對(duì)象是否為null或者長(zhǎng)度為0
        * ${not empty str}:表示判斷字符串、集合、數(shù)組對(duì)象是否不為null 并且 長(zhǎng)度>0
     2. 獲取值
      1. el表達(dá)式只能從域?qū)ο笾蝎@取值
      2. 語(yǔ)法:
       1. ${域名稱.鍵名}:從指定域中獲取指定鍵的值
        * 域名稱:
         1. pageScope --> pageContext
         2. requestScope --> request
         3. sessionScope --> session
         4. applicationScope --> application(ServletContext)
        * 舉例:在request域中存儲(chǔ)了name=張三
        * 獲取:${requestScope.name}
    ?
       2. ${鍵名}:表示依次從最小的域中查找是否有該鍵對(duì)應(yīng)的值,直到找到為止。
    ?
       3. 獲取對(duì)象、List集合、Map集合的值
        1. 對(duì)象:${域名稱.鍵名.屬性名}
         * 本質(zhì)上會(huì)去調(diào)用對(duì)象的getter方法
    ?
        2. List集合:${域名稱.鍵名[索引]}
    ?
        3. Map集合:
         * ${域名稱.鍵名.key名稱}
         * ${域名稱.鍵名["key名稱"]}

3. 隱式對(duì)象:
  * el表達(dá)式中有11個(gè)隱式對(duì)象
  * pageContext:
   * 獲取jsp其他八個(gè)內(nèi)置對(duì)象
    * ${pageContext.request.contextPath}:動(dòng)態(tài)獲取虛擬目錄

JSTL

  1. 概念:JavaServer Pages Tag Library JSP標(biāo)準(zhǔn)標(biāo)簽庫(kù)
     * 是由Apache組織提供的開(kāi)源的免費(fèi)的jsp標(biāo)簽  <標(biāo)簽>

  2. 作用:用于簡(jiǎn)化和替換jsp頁(yè)面上的java代碼

  3. 使用步驟:
     1. 導(dǎo)入jstl相關(guān)jar包
     2. 引入標(biāo)簽庫(kù):taglib指令: <%@ taglib %>
     3. 使用標(biāo)簽

  4. 常用的JSTL標(biāo)簽
    <1> if:相當(dāng)于java代碼的if語(yǔ)句
     1. 屬性:
        * test 必須屬性,接受boolean表達(dá)式
         * 如果表達(dá)式為true,則顯示if標(biāo)簽體內(nèi)容,如果為false,則不顯示標(biāo)簽體內(nèi)容
          * 一般情況下,test屬性值會(huì)結(jié)合el表達(dá)式一起使用
     2. 注意:
          * c:if標(biāo)簽沒(méi)有else情況,想要else情況,則可以在定義一個(gè)c:if標(biāo)簽

<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<html>
<head>
    <title>if標(biāo)簽</title>
</head>
<body>

    <%--

    c:if標(biāo)簽
        1. 屬性:
            * test 必須屬性,接受boolean表達(dá)式
                * 如果表達(dá)式為true,則顯示if標(biāo)簽體內(nèi)容,如果為false,則不顯示標(biāo)簽體內(nèi)容
                * 一般情況下,test屬性值會(huì)結(jié)合el表達(dá)式一起使用

        2. 注意:c:if標(biāo)簽沒(méi)有else情況,想要else情況,則可以在定義一個(gè)c:if標(biāo)簽


    --%>

    <c:if test="true">
        <h1>我是真...</h1>
    </c:if>
    <br>

    <%
        //判斷request域中的一個(gè)list集合是否為空,如果不為null則顯示遍歷集合

        List list = new ArrayList();
        list.add("aaaa");
        request.setAttribute("list",list);

        request.setAttribute("number",4);

    %>

    <c:if test="${not empty list}">
        遍歷集合...

    </c:if>
    <br>

    <c:if test="${number % 2 != 0}">

            ${number}為奇數(shù)

    </c:if>

    <c:if test="${number % 2 == 0}">

        ${number}為偶數(shù)

    </c:if>

</body>
</html>

<2> choose:相當(dāng)于java代碼的switch語(yǔ)句
 1. 使用choose標(biāo)簽聲明             相當(dāng)于switch聲明
 2. 使用when標(biāo)簽做判斷             相當(dāng)于case
 3. 使用otherwise標(biāo)簽做其他情況的聲明     相當(dāng)于default

<body>

    <%--
        完成數(shù)字編號(hào)對(duì)應(yīng)星期幾案例
            1.域中存儲(chǔ)一數(shù)字
            2.使用choose標(biāo)簽取出數(shù)字         相當(dāng)于switch聲明
            3.使用when標(biāo)簽做數(shù)字判斷         相當(dāng)于case
            4.otherwise標(biāo)簽做其他情況的聲明  相當(dāng)于default
    --%>

    <%
        request.setAttribute("number",51);
    %>

    <c:choose>
        <c:when test="${number == 1}">星期一</c:when>
        <c:when test="${number == 2}">星期二</c:when>
        <c:when test="${number == 3}">星期三</c:when>
        <c:when test="${number == 4}">星期四</c:when>
        <c:when test="${number == 5}">星期五</c:when>
        <c:when test="${number == 6}">星期六</c:when>
        <c:when test="${number == 7}">星期天</c:when>

        <c:otherwise>數(shù)字輸入有誤</c:otherwise>
    </c:choose>


</body>

<3> foreach:相當(dāng)于java代碼的for語(yǔ)句

<body>

<%--

    foreach:相當(dāng)于java代碼的for語(yǔ)句
        1. 完成重復(fù)的操作
            for(int i = 0; i < 10; i ++){

            }
            * 屬性:
                begin:開(kāi)始值
                end:結(jié)束值
                var:臨時(shí)變量
                step:步長(zhǎng)
                varStatus:循環(huán)狀態(tài)對(duì)象
                    index:容器中元素的索引,從0開(kāi)始
                    count:循環(huán)次數(shù),從1開(kāi)始
        2. 遍歷容器
            List<User> list;
            for(User user : list){

            }

            * 屬性:
                items:容器對(duì)象
                var:容器中元素的臨時(shí)變量
                varStatus:循環(huán)狀態(tài)對(duì)象
                    index:容器中元素的索引,從0開(kāi)始
                    count:循環(huán)次數(shù),從1開(kāi)始


--%>

<c:forEach begin="1" end="10" var="i" step="2" varStatus="s">
    ${i} <h3>${s.index}<h3> <h4> ${s.count} </h4><br>

</c:forEach>

    <hr>


    <%
        List list = new ArrayList();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");

        request.setAttribute("list",list);


    %>

    <c:forEach items="${list}" var="str" varStatus="s">

            ${s.index} ${s.count} ${str}<br>

    </c:forEach>


</body>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容