(Portal 開發讀書筆記) Portlet生命週期

 Portlet的生命週期由Portlet容器負責, portlet生命週期定義了portlet怎麼被加載、實例化、初始化,怎麼接受客戶端發過來的request,怎麼銷燬。Portlet生命週期經過portlet接口中的init、 processAction、render 、 destroy幾個方法來實現。數據庫

 

加載和實例化:ide

Portlet容器負責加載和實例化Portlet,這個動做發生在Portlet剛被部署的時候,或者某個請求要訪問Portlet的時候。Portlet容器的類加載器要與Servlet容器的類加載器一致,而且一旦加載了Portlet的字節碼以後就馬上進行實例化動做。spa

 

初始化:xml

Portlet容器負責初始化Portlet,這個動做發生在實例化以後,而發生在任何請求訪問這個Portlet以前。Portlet容器調用init()方法來進行初始化動做。在其中能夠拿到PortletConfig,因而經過PortletConfig接口能夠訪問定義在portlet.xml中的某些初始化參數和ResourceBundle.而且能夠經過PortletContext來訪問Portlet的上下文。繼承

 

處理請求:接口

一旦Portlet被初始化以後,能夠用來處理各類請求了,請求從類型看,分爲4種:生命週期

a. Action Request資源

這種請求能夠用來修改數據庫,修改Portlet Preference等信息。開發

對應的請求處理方法是定義在Portlet接口中的processAction()方法,被Portlet容器調用:部署

  
  
  
  
  1. public abstract void processAction(ActionRequest paramActionRequest, ActionResponse paramActionResponse) 
  2.   throws PortletException, IOException; 

 

b.Event Request

這種請求可讓Portlet之間進行交互和協做.

對應的請求處理方法是定義在EventPortlet接口中的processEvent()方法,被Portlet容器調用:

  
  
  
  
  1. public abstract interface EventPortlet 
  2.   public abstract void processEvent(EventRequest paramEventRequest, EventResponse paramEventResponse) 
  3.     throws PortletException, IOException; 

 

c.Render Request

這種請求可讓Portlet展示內容。render的請求是冪等的。(各次請求同樣)

對應的請求處理方法是定義在Portlet接口中的render()方法,被Portlet容器調用:

  
  
  
  
  1. public abstract void render(RenderRequest paramRenderRequest, RenderResponse paramRenderResponse) 
  2.    throws PortletException, IOException; 

 

d.Resource Request

這種請求可讓Portlet服務資源或者內容片段,

對應的請求處理方法是定義在ResourceServingPortlet中的serveResources()方法,被Portlet容器調用:

  
  
  
  
  1. public abstract interface ResourceServingPortlet 
  2.   public abstract void serveResource(ResourceRequest paramResourceRequest, ResourceResponse paramResourceResponse) 
  3.     throws PortletException, IOException; 

 

而GenericServlet這個抽象類它實現了Portlet接口,EventPortlet接口和ResourceServingPortlet接口,因此很是全面,它能夠爲任何類型的請求提供服務,因此咱們的Portlet實現類通常繼承自GenericServlet抽象類.

  
  
  
  
  1. public abstract class GenericPortlet  
  2.   implements Portlet, PortletConfig, EventPortlet, ResourceServingPortlet  
  3. {  

 

結束服務:

Portlet容器負責取結束某Portlet實例,當其認爲這個Portlet實例沒有必要再提供服務時。它會調用destroy()方法,而開發者能夠在destroy()方法中作一些釋放資源和保存必要信息的功能。一旦destory方法被調用,portlet就不能再接受任何請求,而其對應的就會被垃圾回收(不是馬上)。若是容器想重啓啓動這個portlet,就要重複以前的加載、實例化、初始化過程。

相關文章
相關標籤/搜索