根据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 提供服务。
SimplePortlet
com.wiscom.newportal.app.wiscomSample.ArticlePortlet
-1
text/html
edit
help
SimplePortlet
SimplePortlet
name1
value1
false