裝飾模式在jsp tag extension中的應用
jsp中的標籤定製可以幫助來更好的實現 presentation layer。
我在學習的時候,感覺最困惑的就是 BodyContent。API 和 specification 中對 BodyContent 介紹的非常少。後來我就看了BodyContent 的原始碼和一些jsp 翻譯過來的java 原始碼,才算有了比較清楚的瞭解。下面是我的理解:
BodyContent 類對JspWriter 實現了裝飾模式,其實也算不上裝飾,只是為了實現JspWriter 的層層包裝。對於一個兩層的巢狀標籤,
容器在處理parent 標籤時,建立一個BodyContent 物件,這個BodyContent 物件包裝了真正的響應流,然後讓隱含的out 引用指向這個BodyContent 物件。於是,"parent"就被寫入到BodyContent,而不是響應流。
接下來,容器處理child標籤。同樣建立了一個BodyContent 物件,這個BodyContent包裝了parent 標籤的BodyContent,然後把這個BodyContent 物件賦給out引用。於是,"child"就被寫入到這個BodyContent 物件。
這時,就形成了3 層的流包裝。最內層標籤的BodyContent 在流包裝的最外層,流包裝的最內層是真正的響應流。標籤的巢狀順序和流的巢狀順序是反向的。每一層流包裝中都有一些被輸入的內容。
然後,最內層標籤處理器的doAfterBody () 方法中,呼叫
把自己的BodyContent 中的全部內容寫入到內層的流中,然後最內層標籤的BodyContent 就從流包裝層次中剝離出來。每一層標籤都是如此,這樣所有標籤的正文內容最終會被寫入流包裝的最內層,即真正的響應流。
我在學習的時候,感覺最困惑的就是 BodyContent。API 和 specification 中對 BodyContent 介紹的非常少。後來我就看了BodyContent 的原始碼和一些jsp 翻譯過來的java 原始碼,才算有了比較清楚的瞭解。下面是我的理解:
BodyContent 類對JspWriter 實現了裝飾模式,其實也算不上裝飾,只是為了實現JspWriter 的層層包裝。對於一個兩層的巢狀標籤,
<c:parent> parent <c:child> child </c:child> </c:parent> <p class="indent"> |
容器在處理parent 標籤時,建立一個BodyContent 物件,這個BodyContent 物件包裝了真正的響應流,然後讓隱含的out 引用指向這個BodyContent 物件。於是,"parent"就被寫入到BodyContent,而不是響應流。
接下來,容器處理child標籤。同樣建立了一個BodyContent 物件,這個BodyContent包裝了parent 標籤的BodyContent,然後把這個BodyContent 物件賦給out引用。於是,"child"就被寫入到這個BodyContent 物件。
這時,就形成了3 層的流包裝。最內層標籤的BodyContent 在流包裝的最外層,流包裝的最內層是真正的響應流。標籤的巢狀順序和流的巢狀順序是反向的。每一層流包裝中都有一些被輸入的內容。
然後,最內層標籤處理器的doAfterBody () 方法中,呼叫
bodyContent.writeOut (getEnclosingWriter ()) |
相關文章
- RecyclerView中裝飾者模式應用View模式
- 設計模式 | 裝飾者模式及典型應用設計模式
- 裝飾者設計模式在業務中的實踐設計模式
- 設計模式:裝飾者模式介紹及程式碼示例 && JDK裡關於裝飾者模式的應用設計模式JDK
- python 裝飾器在介面自動化測試中的應用Python
- python裝飾器在介面自動化測試中的應用Python
- js裝飾者模式有哪些應用場景JS模式
- TypeScript 中裝飾器的理解?應用場景?TypeScript
- Netty中的裝飾者模式Netty模式
- BSP tag in CRM and JSP tag in HybrisJS
- 原始碼中的設計模式--裝飾器模式原始碼設計模式
- 設計模式學習筆記(十)裝飾器模式及其應用設計模式筆記
- 設計模式在 TypeScript 中的應用 – 策略模式設計模式TypeScript
- 策略模式在應用中的實踐模式
- 觀察者模式在 Javascript 中的應用模式JavaScript
- 裝飾模式模式
- 設計模式(八)Context中的裝飾者模式設計模式Context
- Bottle 中的裝飾器類和描述符應用
- Google Tag Manager (GTM) 和 Adobe AEPL 在 SAP Spartacus 中的應用Go
- JSP中的TAG檔案和TLD檔案JS
- 修飾者模式(裝飾者模式,Decoration)模式
- python裝飾器decorator的應用Python
- 設計模式在vue中的應用(六)設計模式Vue
- 設計模式在vue中的應用(七)設計模式Vue
- 設計模式在vue中的應用(五)設計模式Vue
- 設計模式在vue中的應用(三)設計模式Vue
- 設計模式在vue中的應用(四)設計模式Vue
- 設計模式在vue中的應用(一)設計模式Vue
- 設計模式在vue中的應用(二)設計模式Vue
- 策略模式在實際業務中的應用模式
- 策略模式在業務中的實際應用模式
- 設計模式,及在Java中的應用設計模式Java
- Bottle 框架中的裝飾器類和描述符應用框架
- 裝飾者模式模式
- Decorator裝飾模式模式
- 設計模式之--策略模式及其在JDK中的應用設計模式JDK
- 裝飾者模式在中介軟體中使用模式
- 設計模式——裝飾模式設計模式