JSP、EL表達式、JSTL標籤

目錄

一、JSP

1、指令

2、註釋

3、內置對象

二、EL表達式

1、概念和作用

2、語法

3、忽略EL表達式

4、EL 表達式的使用

三、JSTL 標籤

1、if 標籤

2、choose 標籤

3、 foreach 標籤


一、JSP

1、指令

【1】作用

  • 用於配置JSP頁面,導入資源文件

【2】格式

  • <%@  指令名稱  屬性名1=屬性值1  屬性名2=屬性值2  .....  %>

【3】分類

  • page:配置JSP頁面的
    • contenType:等同於response.setContentType()
      • 設置響應體的mime類型以及字符集
      • 設置當前JSP頁面的編碼(高級IDE,如果是低級編譯器,需要設置 pageEncoding 屬性來設置字符集)
    • import:導包
    • errorPage:當前頁面發生異常後,會自動跳轉到指定的錯誤提示頁面
    • isErrorPage:標識當前頁面是否爲錯誤頁面
      • true:是,可以使用內置對象 exception
      • false:否,默認值,不可以使用內置對象 exception
  • include:頁面包含的,導入頁面資源文件
    • <%@include  file="top.jsp"%>
  • taglib:導入資源
    • <%@  taglib prefix="c"  uri="http://java.sun.com/jsp/jstl/core"%>

2、註釋

  • <!--  -->:只能註釋HTML代碼片段
  • <%--  --%>:可以註釋所有代碼片段

3、內置對象

在JSP頁面中不需要創建,可以直接使用的對象稱爲內置對象,一共有 9 個內置對象

變量名 真實類型 作用
pageContext PageContext 當前頁面共享數據,可以獲取其他 8 個對象
request HttpServletRequest 一次請求訪問的多個資源(轉發)
session HttpSession 一次會話的多個請求
application ServletContext 所有用戶間數據共享
response HttpServletResponse 響應對象
page Object 當前頁面(Servlet)對象
out JspWrite 輸出對象,輸出數據到頁面上
config ServletConfig Servlet的配置對象
exception Throwable 異常對象

二、EL表達式

1、概念和作用

  • Expression Language(表達式語言),主要用來替換和簡化JSP頁面中的java代碼

2、語法

  • ${表達式}

3、忽略EL表達式

  • 設置JSP中page指令:isElignored="true"  忽略JSP中所有的 EL 表達式
  • \${表達式}:忽略當前的EL表達式

4、EL 表達式的使用

【1】運算符

  • 算數運算符:+    -    *    /(div)    %(mod)
  • 比較運算符:>    <   >=    <=    ==    !=
  • 邏輯運算符:&&(and)    ||(or)    !(not)
  • 空運算符:empty  
    • ${empty str}:用於判斷字符串,集合數組對象是否爲null或者長度是否爲 0
    • ${not empty str}:表示判斷字符串、集合、數組對象是否不爲null並且長度大於 0

【2】獲取值

  • EL 表達式只能從域對象中獲取值
    • 格式:${域名稱.鍵名}  ==>  從指定的域中獲取指定的鍵值
      對應的域名稱
      pageContext pageScope
      request requestScope
      session sessionScope
      application applicationScope

      ${鍵名}:表示依次從最小的域中查找是否有該鍵對應的值

    • 獲取對象:${域名稱.鍵名.屬性名}
      本質上是調用Javabean中的getter方法

    • 獲取 List 集合:${域名稱.鍵名[索引]}

    • 獲取 Map 集合

      • ${域名稱.鍵名.key名稱}

      • ${域名稱.鍵名["key名稱"]}

【3】隱式對想

EL 表達式中有 11 個隱式對象,這裏主要說 pageContext 隱式對象,pageContext 隱式對象主要功能有:

  • 獲取 JSP 其他八個內置對象
  • 動態獲取虛擬目錄:
<%@ page import="Test.User" %>
<%@ page import="java.util.*" %>
<%@ page contentType="text/html;charset=UTF-8" isELIgnored="false" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  ${3 > 4}
  \${3 > 4}
  <hr>
  <h3>算數運算符</h3>
  ${3 + 4}<br>
  ${3 / 4}<br>
  ${3 % 4}<br>
  <h3>比較運算符</h3>
  ${3 == 4}<br>
  <h3>邏輯運算符</h3>
  ${3 > 4 && 3 < 4}
  ${3 > 4 and 3 < 4}
  <hr>

  <h3>在域中獲取值</h3>
  <%
      //在request域中存儲值
      request.setAttribute("name","oneStar");
      //在session域中存儲值
      session.setAttribute("age","18");
  %>
  ${requestScope.name}
  ${sessionScope.age}
  ${name}

  <h3>獲取對象值</h3>
  <%
      User user = new User();
      user.setName("oneStar");
      user.setAge(18);
      user.setBirthday(new Date());
      request.setAttribute("u",user);
  %>
  ${requestScope.u.name}<br>
  ${requestScope.u.age}<br>
  ${requestScope.u.birthday}<br>

  <h3>獲取List集合</h3>
  <%
      List list = new ArrayList();
      list.add("oneStar");
      list.add("twoStar");
      list.add("threeStar");
      request.setAttribute("list",list);
  %>
  ${requestScope.list}<br>
  ${requestScope.list[2]}<<br>

  <H3>獲取map集合</H3>
  <%
      Map map = new HashMap<>();
      map.put("name","oneStar");
      map.put("age","18");
      request.setAttribute("map",map);
  %>
  ${requestScope.map}<br>
  ${requestScope.map.name}<br>
  ${requestScope.map["age"]}<br>

  <h3>隱式對象</h3>
  ${pageContext.request}
  <h4>在JSP頁面動態獲取虛擬目錄</h4>
  ${pageContext.request.contextPath}
  </body>
</html>

三、JSTL 標籤

JSTL 標籤(JavaServer Pages Tag Library),即JSP標準標籤庫,是由 Apache 組織提供的開源免費的JSP標籤,主要是用來簡化和替換JSP頁面上的Java代碼,具體使用步驟如下:

  1. 導入jstl相關jar包
  2. 引入標籤庫:taglib指令引入:<%@ taglib %>
  3. 使用標籤

1、if 標籤

  • 屬性:test 屬性,爲必須屬性,接受 boolean 表達式
  • 一般情況下,test屬性值會結合 EL 表達式一起使用
  • if 標籤沒有else情況,如果想要else效果,可以定義多個 if 標籤

2、choose 標籤

choose 標籤就相當於switch 語句,switch 需要配合 case、default 來使用,而choose則需要配合when、otherwise 來使用

  • 使用choose標籤聲明:相當於 switch 聲明
  • 使用 when 標籤做判斷:相當於 case
  • 使用 otherwise 標籤做其他情況的聲明:相當於default

3、 foreach 標籤

【1】完成重複操作

屬性

  • begin:開始值
  • end:結束值
  • var:臨時變量
  • step:步長
  • varStatus:循環狀態對象
    • index:容器中元素的索引,從 0 開始
    • count:循環次數,從 1 開始

【2】遍歷容器

屬性

  • items:容器對象
  • var:容器中元素的臨時變量
  • varStatus:循環狀態對象
    • index:容器中元素的索引,從 0 開始、
    • count:循環次數,從 1 開始
<%@ 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>OneStar</title>
</head>
<body>
    <h3>if標籤</h3>
    <%
        List list = new ArrayList();
        list.add("oneStar");
        list.add("twoStar");
        request.setAttribute("list",list);
    %>
    <c:if test="${not empty list}">
        集合非空
    </c:if>
    <c:if test="${3 % 2 != 0}">
        是奇數
    </c:if>
    <hr>

    <h3>choose標籤</h3>
    <%
        request.setAttribute("number","12");
    %>
    <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>不正確字符!!!</c:otherwise>
    </c:choose>

    <h3>foreach標籤</h3>
    <c:forEach begin="0" end="10" var="i" step="1">
        ${i}
    </c:forEach><br>
    <%
        List lists = new ArrayList();
        lists.add("oneStar");
        lists.add("twoStar");
        request.setAttribute("lists",lists);
    %>
    <c:forEach items="${lists}" var="list" varStatus="s">
        ${s.index} ${s.count} ${list}<br>
    </c:forEach>
</body>
</html>

 

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