天天看點

第二十八天:聽課筆記

1.傳統标簽與簡單标簽:

2.Tag:

doStartTag  是否執行标簽體

doEndTag    是否執行餘下的JSP頁面

setPageContext

setParent   嵌套形式

getParent   在doStartTag之前調用

release        可以用來釋放資源,如資料庫連接配接,不過JSP用資料庫太恐怖了

3.先後順序:

執行個體化

setPageContext

setParent

doStartTag

doEndTag

release    被垃圾回收器回收之前調用release

胡亂猜,不如去看源碼,查文檔

4.Tag 它孩子的實作:傳統标簽

SimpleTag 它孩子的實作:簡單标簽

IterationTag 疊代标簽

BodyTag 修改标簽體

5.Tag接口

定義了JSP頁面與标簽處理器類之間的通信規則

down一個JSP的規範

6.防止盜鍊:

String referer = request.getHeader("referer");  //得到你從哪個頁面通路過來的

String sitePart = "http://"+request.getServerName();

referer != null && referer.startsWith(sitePart)

要是通過servlet通路了

通過超連結通路,referer有值,

直接在浏覽器中輸入位址,referer為null

7.屬性

setter

在tld中描述标簽的屬性

setter是在doStartTag調用之前執行

<attribute>

name

required 是否是必須的

rtexprvalue 是否可以放$等  運作時表達式

<c:if test=""></c:if>

屬性值可以是各種類型,不一定就是string

如結合${} 可以是boolean ,int 等

<jsp:useBean ></jsp:useBean >

<c: readfile>

8.IteratorTag

9.SimpleTag

setJspContext  JspContext是pageContext的父類

setParent    嵌套用的

getParent

setJspBody  将标簽體封裝成JspFragment對象傳遞給标簽處理器對象

        在傳統标簽中,是通過doStartTag 或 doEndTag的return this.XXX傳回值來決定是否執行

        那麼JspFragment 一定有執行或不執行的方法

doTag

        輸出,疊代,修改  标簽體

10.JspFragment 這段JPS片度不能包含JSP腳本元素

getJspContext

public abstract void invoke(java.io.Writer out)

如果是response.getWriter 就寫到浏覽器

如果是我們定義的容器,就寫到容器中

如果沒有調用JspFragment.invoke 忽略

重複調用   疊代

寫到容器   修改

11.

JspContext getJspContext

JspFragment  getJspBody

JspFragment.invoke

scriptless 無腳本的

doTag中抛異常   餘下的JSP代碼就不執行了

throw new SkipPageException(...)

12.疊代

<c:forEach var items>

每次疊代的時候,标簽就取出當次疊代的資料

将資料放到JspContext域中 鍵和值:鍵是var

由于JspContext是那個頁面的

13.修改标簽體内容的标簽

浏覽器看到<>就解析了,所有我們就将<>轉義

14.StringWriter

FileReader

XXXRead

XXXWriter

表示寫到XXX  ,  除包裝流以外

壓棧

<c:htmlFilter>

   <c:readFile file="" />

</c:htmlFilter>

15.JSTL标簽庫:

核心标簽庫

國際化标簽

資料庫标簽  不用學

XML        不用學

JSTL函數

16.

<c:out>

pageContext out

如果它是一個标簽的子标簽 輸出到父标簽中的流中

value escapeXml default

<c:set>

設定域中的屬性

var value  scope target(往哪灌資料) property

<c:remove>

var scope

<c:catch>捕獲異常

var 異常對象

<c:if>

test

var

scope

<c:choose>

if .... else

<c:choose>

  <c:when test="">

  </c:when>

  <c:otherwise>

  </c:otherwise>

</c:choose>

嵌套 if else if else

<c:forEach>

var items begin end step varStatus

<c:param>

設定/得到URL位址後面的參數

配合 url redirect

<c:url>

<c:redirect>

<c:import>

new 一個 往域裡面放  name

EL 取得

fmt bundle 隻在标簽體有用

setBundle 都有用

fmt param 占位符