Java Web day(8)之EL拓展對象JSTL及mcv,javaweb三層框架簡介

JSTL



1. jstl的概述

  * apache的東西,依賴EL
  * 使用jstl需要導入jstl1.2.jar
  * 四大庫:
    > core:核心庫,重點
    > fmt:格式化:日期、數字
    > sql:過時
    > xml:過時


2. 導入標籤庫

  * 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

2. remove

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

3. url

  * value:指定一個路徑!它會在路徑前面自動添加項目名。
    <> <c:url value="/index.jsp"/>,它會輸出/day13_1/index.jsp
  * 子標籤:<c:param>,用來給url後面添加參數,例如:
    <c:url value="/index.jsp">
      <c:param name="username" value="張三"/>  <!--可以對參數進行url編碼!!-->
    </c:url>
    結果爲:/day13_1/index.jsp?username=%ED%2C%3F%ED%2C%3F
  * var:指定變量名,一旦添加了這個屬性,那麼url標籤就不會再輸出到頁面,而是把生成url保存到域中。
  * scope:它與var一起使用,用來保存url。

4. if:對應java中的if語句

  * <c:if test="布爾類型">...</c:if>,當test爲值時,執行標籤體內容!

5. 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 { ...}


6. 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 }<br/>
</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 }<br/>
</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文件的位置


2. 標籤處理類

  SimpleTag接口:
  * void doTag():每次執行標籤時都會調用這個方法;
  * JspTag getParent():返回父標籤(非生命週期方法)
  * void setParent(JspTag):設置父標籤
  * void setJspBody(JspFragment):設置標籤體
  * void seetJspContext(JspContext):設置jsp上下文對象,它兒子是PageContext


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


3. 配置tld文件



tld文件一般都放到WEB-INF之下,這樣保證客戶端訪問不到!
  <tag>
  <name>myTag1</name> 指定當前標籤的名稱
  <tag-class>cn.itcast.tag.MyTag1</tag-class> 指定當前標籤的標籤處理類!
  <body-content>empty</body-content> 指定標籤體的類型,我們這裏使用的是空標籤!
  </tag>


4. 頁面中指定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文件中對屬性進行配置



  <attribute>
  <name>test</name> 指定屬性名
  <required>true</required> 指定屬性是否爲必需的
  <rtexprvalue>true</rtexprvalue> 指定屬性是否可以使用EL
  </attribute>


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


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之外)




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