打造一個基於OSGi的Web Application——在OSGi容器中管理Web元素的實現思路

要在OSGi容器中動態的管理Web相關的元素,目前有兩種方式。

一種是通過類似於bridge的方式,現在外層的Web Application中配置一個對應的元素,然後通過對這個元素將外部的訪問橋接到OSGi容器內部。在OSGi容器內部,會有一個總控的service,通過這個service來提供Web元素的動態管理,以及對外界請求的響應和分發。Equinox的Servlet Bridge就是採用的這種方式。

另一種方式就是通過使用Web Container提供的原生的API來實現Web元素的動態管理,將Web Container的部分功能作爲Service註冊到OSGi中,然後在OSGi中通過這個Service來動態的管理Web元素。

兩種方式各有利弊:

對於bridge方式來說,優點是與Web Container實現無關,在多種Web Container中均能正常使用;缺點也很明顯,無法使用Web Container提供的各種特性,並且相當於自己要實現一部分Web Server的功能,不僅是重複造輪子,而且還是個不怎麼好的輪子,能否滿足企業級應用的需求,還只是個未知數。

對於使用原生API的方式來說,優點就是完全使用Web Server自身的機制,可以保證性能和功能需求;缺點同樣也很明顯,現在流行的Web Server開源的並不多,而且就算是開源的,也不一定提供了可以動態管理Web元素的API,就算是有相應的API,也不一定適合OSGi環境,而且同一個Web Server的不同版本,API也很有可能會變化,這直接導致了原生方式實現的多樣性和不兼容性。

幸運的是,在Tomcat 5.5.x和6.0.x中都提供了這樣的API,在以後的章節中,我會着重針對Tomcat 5.5.x、6.0.x版本以及對bridge方式這三個場景,來實現對Web元素的動態管理。

Servlet 2.4中描述瞭如下可以在web.xml中配置的元素,這也是我要實現動態管理的目標:

  1. Context Parameter
  2. Error Page
  3. Filter
  4. Filter Mapping
  5. Listener
  6. Security role
  7. Servlet
  8. Servlet Mapping
  9. Welcome Page


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