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容器調用:部署
- public abstract void processAction(ActionRequest paramActionRequest, ActionResponse paramActionResponse)
- throws PortletException, IOException;
b.Event Request
這種請求可讓Portlet之間進行交互和協做.
對應的請求處理方法是定義在EventPortlet接口中的processEvent()方法,被Portlet容器調用:
- public abstract interface EventPortlet
- {
- public abstract void processEvent(EventRequest paramEventRequest, EventResponse paramEventResponse)
- throws PortletException, IOException;
- }
c.Render Request
這種請求可讓Portlet展示內容。render的請求是冪等的。(各次請求同樣)
對應的請求處理方法是定義在Portlet接口中的render()方法,被Portlet容器調用:
- public abstract void render(RenderRequest paramRenderRequest, RenderResponse paramRenderResponse)
- throws PortletException, IOException;
d.Resource Request
這種請求可讓Portlet服務資源或者內容片段,
對應的請求處理方法是定義在ResourceServingPortlet中的serveResources()方法,被Portlet容器調用:
- public abstract interface ResourceServingPortlet
- {
- public abstract void serveResource(ResourceRequest paramResourceRequest, ResourceResponse paramResourceResponse)
- throws PortletException, IOException;
- }
而GenericServlet這個抽象類它實現了Portlet接口,EventPortlet接口和ResourceServingPortlet接口,因此很是全面,它能夠爲任何類型的請求提供服務,因此咱們的Portlet實現類通常繼承自GenericServlet抽象類.
- public abstract class GenericPortlet
- implements Portlet, PortletConfig, EventPortlet, ResourceServingPortlet
- {
結束服務:
Portlet容器負責取結束某Portlet實例,當其認爲這個Portlet實例沒有必要再提供服務時。它會調用destroy()方法,而開發者能夠在destroy()方法中作一些釋放資源和保存必要信息的功能。一旦destory方法被調用,portlet就不能再接受任何請求,而其對應的就會被垃圾回收(不是馬上)。若是容器想重啓啓動這個portlet,就要重複以前的加載、實例化、初始化過程。