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 占位符