1. 程式人生 > >javaweb之jstl核心標籤庫

javaweb之jstl核心標籤庫

JSTL

  1. jstl的概述
  • apache的東西,依賴EL
  • 使用jstl需要匯入jstl1.2.jar
  • 四大庫:

    core:核心庫,重點
    fmt:格式化:日期、數字
    sql:過時
    xml:過時

  1. 匯入標籤庫
  • jar包
  • 在jsp頁面中:<%@taglib prefix=“字首” uri=“路徑”%>

core --> c標籤!

  1. out和set
  • <c:out>:輸出

    value:可以是字串常量,也可以是EL表示式
    default:當要輸出的內容為null時,會輸出default指定的值
    escapeXml:預設值為true,表示轉義!

  • <c:set>:設定(建立域的屬性)

    var:變數名
    value:變數值,可以是EL表示式
    scope:域,預設為page,可選值:page、request、session、application

  1. remove
  • :刪除域變數

    var:變數名
    scope:如果不給出scope,表示刪除所有域中的該名稱的變數;如果指定了域,那麼只刪除該域的變數。

  1. url
  • value:指定一個路徑!它會在路徑前面自動新增專案名。
    <> <c:url value="/index.jsp"/>,它會輸出/day13_1/index.jsp
  • 子標籤:<c:param>,用來給url後面新增引數,例如:

<c:url value="/index.jsp">
<c:param name=“username” value=“張三”/>
</c:url>
結果為:/day13_1/index.jsp?username=%ED%2C%3F%ED%2C%3F

  • var:指定變數名,一旦添加了這個屬性,那麼url標籤就不會再輸出到頁面,而是把生成url儲存到域中。
  • scope:它與var一起使用,用來儲存url。
  1. if:對應java中的if語句
  • <c:if test=“布林型別”>…</c:if>,當test為值時,執行標籤體內容!
  1. choose:它對應java中的if/else if/ … /else
  • 例如:
    <c:choose>
    <c:when test="">…</c:when>
    <c:when test="">…</c:when>
    <c:when test="">…</c:when>

    <c:otherwise> …</c:otherwise>
    </c:choose>
    等同與
    if(…) {
    } else if( …) {
    } else if( …) {
    } else if( …) {
    } …
    else { …}
  1. forEach
    它用來迴圈遍歷陣列、集合!
    它還可以用來計數方式來迴圈!

計數方式:

for(int i = 1; i <= 10; i++) {

}

<c:forEach var=“i” begin=“1” end=“10”>
${i}
</c:forEach>

屬性:
* var:迴圈變數
* begin:設定迴圈變數從幾開始。
* end:設定迴圈變數到幾結束。
* step:設定步長!等同與java中的i++,或i+=2。step預設為1


用來輸出陣列、集合!

<c:forEach items="${strs }" var=“str”>
${str }

</c:forEach>

等同於

for(String str : strs) {

}

屬性:

  • items:指定要迴圈誰,它可以是一個數組或一個集合
  • var:把陣列或集合中的每個元素賦值給var指定的變數。

迴圈狀態

可以使用varStatus來建立迴圈狀態變數!

迴圈狀態變數有如下屬性:

  • count:迴圈元素的個數
  • index:迴圈元素的下標
  • first:是否為第一個元素
  • last:是否為最後一個元素
  • current:當前元素

<c:forEach items="${list }" var=“ele” varStatus=“vs”>
${vs.index} ${vs.count } ${vs.first } ${vs.last } ${vs.current }

</c:forEach>

====================================

fmt庫
它是格式化庫

<fmt:formatDate value="" pattern="">

value:指定一個Date型別的變數
pattern:用來指定輸出的模板!例如:yyyy-MM-dd HH:mm:ss


<fmt:formatNumber value="${num1}" pattern=“0.00”>
保留小數點後2位,它會四捨五入!如果不足2位,以0補位!

<fmt:formatNumber value="${num1}" pattern="#.##">
保留小數點後2位,它會四捨五入!如果不足2位,不補位!

====================================

自定義標籤

  1. 步驟
  • 標籤處理類(標籤也是一個物件,那麼就需要先有類!)
  • tld檔案,它是一個xml
  • 頁面中使用<%@taglib%>來指定tld檔案的位置
  1. 標籤處理類
    SimpleTag介面:
  • void doTag():每次執行標籤時都會呼叫這個方法;
  • JspTag getParent():返回父標籤(非生命週期方法)
  • void setParent(JspTag):設定父標籤
  • void setJspBody(JspFragment):設定標籤體
  • void seetJspContext(JspContext):設定jsp上下文物件,它兒子是PageContext

其中doTag()會在其他三個方法之後被tomcat呼叫。

  1. 配置tld檔案

tld檔案一般都放到WEB-INF之下,這樣保證客戶端訪問不到!

myTag1 指定當前標籤的名稱
cn.itcast.tag.MyTag1 指定當前標籤的標籤處理類!
empty 指定標籤體的型別,我們這裡使用的是空標籤!

  1. 頁面中指定tld檔案位置

<%@ taglib prefix=“it” uri="/WEB-INF/tlds/itcast-tag.tld" %>
導標籤庫,就是為頁面指定tld檔案的位置!


進階

標籤體內容

  • empty:無標籤體!
  • JSP:jsp2.0已經不在支援這個型別了!表示標籤體內容可以是:java指令碼,可以是標籤,可以是el表示式
  • scriptless:只能是EL表示式,也可以是其他的標籤!
  • tagdependent:標籤體內容不會被執行,而是直接賦值標籤處理類!

不在執行標籤下面內容的標籤!

在標籤處理類中的doTag()中使用SkipPageException來結束!
  Tomcat會呼叫標籤處理類的doTag()方法,然後Tomcat會得到SkipPageException,它會跳過本頁面其他內容!


標籤屬性

步驟:

  1. 給你的標籤處理類新增屬性!
      為標籤處理類新增屬性,屬性至少要且一個set方法!這個set方法會在doTag()方法之前被tomcat執行!所在doTag()中就可以使用屬性了。

  2. 在tld檔案中對屬性進行配置

    test 指定屬性名 true 指定屬性是否為必需的 true 指定屬性是否可以使用EL

==========================================

MVC
它不是java獨有,所有的B/S結構的專案都在使用它!

M – model 模型(自己寫程式碼)
V – View 檢視(jsp)
C – Cotroller 控制器(Servlet)

==========================================

JavaWeb三層框架

Web層 --> 與Web相關的內容(Servlet,JSP,Servlet相關API:request、response、session、ServletContext)
業務層 --> 業務物件(Service)
資料層 --> 操作資料庫(DAO Data Access Object)(所有對資料庫的操作,不能跳出到DAO之外)