a.生成servlet需要創建標簽處理器類的一個實例。實現方式通常是調用JSP容器的工廠類的一個方法,工廠類包含一個標簽處理器實例池以使其可重用不再處于激活狀態的對象。
b.初始化標簽處理器,使servlet獲知其存在性。servlet通過調用標簽處理器的兩個方法實現此過程:setPageContext(PageContext ctx)和setParent(Tag parent)。
c.如果標簽具有屬性,屬性的取值通過處理器提供setter方法傳入到對象。屬性setter方法是一個標簽支持屬性所需的唯一方法。
d.頁面的上下文和父標簽已被調置,并已具備屬性。調用標簽處理器的doStartTag()方法,該方法可以讀取這些變量并執行實現標答功能所需的計算和操作。
doStartTag()方法必須返回一個整型數。
返回EVAL_BODY_TAG則正常處理標簽體(跳到e);
返回SKIP_BODY則從初始JSP頁面中直到此標簽結束標記處的內容均被忽略。(跳到f)
e.如果返回EVAL_BODY_TAG時,則正常處理標簽體。
e1.在棧中保存當前的JspWriter對象,創建新的BodyContent對象,并將其置為JSP頁面的out對象保存在上下文范圍內名為name的屬性中。并調用它的setBodyContent()方法。
e2.調用doInitBody()方法進行初始化。
e3.處理標簽體。將輸出寫入BodyContent對象中,此過程依賴于TLD的標簽元素,有三種可能取值。
e4.調用doAfterBody()方法,將體內體內容寫入JspWriter,可如下實現:
JspWriter out=bodyContent.getEnclosingWriter();
out.println(bodyContent.getString());//bodyContent.writeOut(out);
bodyContent.clear();
e5.doAfterBody()方法返回兩種可能:
返回EVAL_BODY_TAG時,再對標簽體進行評估,這是數組和枚舉被循環處理的典型情況。
返回SKIP_PAGE時,繼續頁面的其余部份。
e6.體內容完成,因此創建它的過程被反向:
調用pageContent.popBody()方法檢索前面的JspWriter對象。
文章來源于領測軟件測試網 http://www.kjueaiud.com/