根據Portlet1.0的標準,編寫Portlet可以通過實現javax.portlet.Portlet接口和繼javax.portlet.GenericPortlet抽象類。下面具體介紹這兩種方式
第一種:實現Portlet接口方式
Javax.portlet.Portlet接口有四個方法,分別是:init,processAction,render和destroy。四個函數的描述
init() 當Portlet容器初始化該Portlet的時候調用該函數,一個Portlet在Portlet容器中只有一個實例,並且這個實例由多個用戶共享,其方式與一個servlet在應用服務器中由多個用戶共享的方式一樣。
destroy() 當Portal終止時,portlet結束服務,然後用destroy()方法來銷燬,最後portlet由垃圾收集工具收集並結束。
processAction() 當頁面請求是一個Action請求的時候調用該函數。
render() 當Portlet被調用顯示頁面的時候執行該函數。
下面的例子顯示了一個基本的實現了javax.portlet.Portlet的portlet。它只是在一個portlet窗口中顯示一行語句:”Hello,world!”
package demo;
import java.io.IOException;
import java.io.PrintWriter;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.Portlet;
import javax.portlet.PortletConfig;
import javax.portlet.PortletException;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import javax.portlet.UnavailableException;
public class HelloWorldPortlet implements Portlet {
public HelloWorldPortlet() {
super();
}
public void init(PortletConfig config) throws UnavailableException {
}
public void destroy() {
}
public void render(RenderRequest request, RenderResponse response)
throws PortletException, IOException {
PrintWriter writer = response.getWriter();
writer.print("hello,world!");
}
public void processAction(ActionRequest request, ActionResponse response)
throws PortletException, IOException {
}
}
第二種,繼承GenericPortlet抽象類方式。
javax.portlet.GenericPortlet抽象類除了init、processAction、render、destroy四個方法外,再擴展了三個方法:doView、doEdit、doHelp,簡化了Portlet的書寫,三個方法的描述:
doView() 當Portlet是VIEW模式的時候,Portlet容器將調用該函數處理頁面顯示。
doEdit() 當Portlet是EDIT模式的時候,Portlet容器將調用該函數處理頁面顯示。
doHelp() 當Portlet是HELP模式的時候,Portlet容器將調用該函數處理頁面
實例:
package demo;
impor javax.portlet.*;
import java.io.*;
import java.util. *
public class JSPPortlet extends GenericPortlet {
private PortletContext pContext;
public void init(PortletConfig config) throws PortletException {
super.init(config);
pContext = config.getPortletContext();
}
public void doView(RenderRequest request,RenderResponse response)
throws PortletException,IOException {
PrintWriter writer = response.getWriter();
writer.print("view mode!");
}
public void doEdit(RenderRequest request,RenderResponse response)
throws PortletException {
PrintWriter writer = response.getWriter();
writer.print("edit mode!");
}
public void doHelp(RenderRequest request,RenderResponse response)
throws PortletException {
PrintWriter writer = response.getWriter();
writer.print("help mode!");
}
public void processAction (ActionRequest request, ActionResponse actionResponse)
throws PortletException, java.io.IOException {
}
}
Porlet中模式、狀態讀取、設置
可以通過PortletRequest獲得到Portlet的窗口狀態和模式:
獲取窗口狀態:
WindowState state = request.getWindowState();
獲取窗口模式:
PortletMode mode = request.getPortletMode();
窗口狀態設置:直接通過actionRUL設置
PortletURL editURL = renderRequest.createRenderURL();
editURL.setPortletMode( PortletMode.EDIT );
每個Portlet對每個用戶可以有不同的配置參數,Portlet1.0標準提供了相應的方法和對象,用於讀取和設置用戶的配置參數:
例:
PortletPreferences prefs = request.getPreferences();
String zip = prefs.getValue("zip","10000");
//獲取名爲’zip’的參數值,如果不存在,缺省值設爲:’10000’。
portlet.xml
每個portlet應用在/WEB-INF文件夾中都有一個portlet.xml文件,它是portlet應用的部署描述符
包含portlet 應用程序的配置參數,以及所有portlet所提供的一般信息(如 portlet 支持的標記類型)。 Portal Server 使用該信息爲 portlet 提供服務。
<?xml version="1.0" encoding="UTF-8"?>
<portlet-app>
<portlet>
<portlet-name>SimplePortlet</portlet-name>
<portlet-class>
com.wiscom.newportal.app.wiscomSample.ArticlePortlet
</portlet-class>
<expiration-cache>-1</expiration-cache>
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>edit</portlet-mode>
<portlet-mode>help</portlet-mode>
</supports>
<portlet-info>
<title>SimplePortlet</title>
<short-title>SimplePortlet</short-title>
<keywords>SimplePortlet</keywords>
</portlet-info>
<portlet-preferences>
<preference>
<name>name1</name>
<value>value1</value>
<read-only>false</read-only>
</preference>
</portlet-preferences>
</portlet>
</portlet-app>