JSP自定義標籤

BodyTagSupport執行順序

BodyTagSupport類的方法:

 編寫標籤對應的實現類時,需要重載BodyTagSupport類幾個方法:doStartTag(), setBodyContent(), doInitBody(), doAfterBody(), doEndTag();

 

他們執行順序如下:

 doStartTag()→doInitBody()→setBodyContent()→doAfterBody()→doEndTag()。

 

doStartTag()方法可返回EVAL_BODY_INCLUDE或SKIP_BODY,

 如果返回EVAL_BODY_INCLUDE則繼續執行;

 如果返回SKIP_BODY則接下來的doInitBody(),setBodyContent(), doAfterBody()三個方 法不會被執行,

 而直接執行doEndTag()方法。

 

setBodyContent()方法用於設置標籤體內容,如果在此之前要作一些初始化工作,則在doInitBody()方法中完成。

 標籤體內容執行完後,會調用doAfterBody()方法,此方法可返回EVAL_BODY_TAG, SKIP_BODY, 

EVAL_PAGE或SKIP_PAGE。

 如果返回EVAL_BODY_TAG則會再次設置標籤體內容,直到返回SKIP_BODY;

 如果返回EVAL_PAGE則標籤體執行完後會繼續執行JSP頁面中接下來的部分;

 如果返回SKIP_PAGE,則JSP頁面的後續內容將不再執行。

 

標籤中靜態常量:

 

 EVAL_BODY_INCLUDE:告訴服務器正文的內容,並把這些內容送入輸出流。

 SKIP_BODY:告訴服務器不要處理正文內容。

 EVAL_PAGE:讓服務器繼續執行頁面。

 SKIP_PAGE:讓服務器不要處理剩餘的頁面。

 EVAL_BODY_AGAIN:讓服務器繼續處理正文內容,只有doAfterBody方法可以返回。

 EVAL_BODY_BUFFERED:BodyTag接口的字段,在doStartTag()返回。

 EVAL_BODY_INCLUDE、SKIP_BODY一般由doStartTag()返回,而EVAL_PAPGE、                 SKIP_PAGE由doEndTag()返回。

 

 TagSupport類的生命週期圖和自述

自述:

(1) 當JSP容器在解釋JSP頁面時,如果遇到自定義標籤的開始標記,將利用“標籤處理類”建立一個“標籤處理對象”。在建立“標籤處理對象”的過程中,JSP容器會回調setPageContext( )方法,然後會根據自定義標籤的屬性值來初始化“標籤處理對象”的屬性。

(2) 接着JSP容器會運行doStartTag( )方法內德程序代碼,然後根據此方法的返回值決定後續動作,如果返回SKIP_BODY常量,表示要求JSP容器忽略此標籤主體的內容;如果返回EVAL_BODY_INCLUDE常量,表示要求JSP容器執行標籤主體的內容,並將結果包括在響應中,然後再運行doAfterBody( )方法。

(3) 如果doAfterBody( )方法返回EVAL_BODY_AGAIN常量,表示要求JSP容器再次執行標籤主體內容;如果返回SKIP_BODY常量,JSP容器將會運行doEndTag( )方法。

(4) 最後,JSP容器會運行doEndTag( )方法內的程序代碼,並根據此方法的返回值決定後續動作——如果返回SKIP_PAGE常量,JSP容器會忽略自定義標籤以後的JSP內容;如果返回EVAL_PAGE常量,JSP容器會運行自定義標籤以後的JSP內容。

(5) 

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