在处理请求期间,Portlet 容器调用 Portlet 的:
processAction 方法来通知 Portlet 用户行为。每个客户机只有一个基于用户的行为被触发。Portlet 可以发出一个重定向、改变它的 Portlet 模式或窗口状态或者更改它的状态。
render 方法来请求标记片段。
Portlet 还可以调用更多的服务来执行所需的功能。清单 1 示例使用 Web 服务来检索和显示特定用户的股票报价。
清单 1. 股票报价 Portlet 代码示例
public class StockQuotePortlet extends GenericPortlet {
private ServiceManager serviceManager;
public void init(PortletConfig config) throws PortletException {
serviceManager = new ServiceManager();
}
public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException {
response.setContentType("text/html");
// invoke autogenerated wrapper to locate service
NetXmethodsServicesStockquoteStockQuoteServiceLocator loc =
new NetXmethodsServicesStockquoteStockQuoteServiceLocator();
NetXmethodsServicesStockquoteStockQuotePortType port =
loc.getNetXmethodsServicesStockquoteStockQuotePort();
// loop through all stock quotes the user is interested in
PortletPreferences prefs = request.getPreferences();
Iterator quoteKeys = prefs.getMap().keys().iterator();
String key;
Float quote;
StockBean quoteBean = new StockBean();
while ( quoteKeys.hasNext() ) {
key = quoteKeys.next();
quote = port.getQuote (key);
quoteBean.add(key, quote);
}
request.setAttribute("StockQuoteBean", quoteBean);
// render stock quotes using a JSP
PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher("jsp/View.jsp");
rd.include(request,response);
}
}
这一部分演示了您可以如何使用 Java Portlet 规范来实现 UI 服务,以及您的 Portlet 可以如何调用其他 Web 服务。下一部分将展示如何使用 WSRP 将 UI 作为 Web 服务发布。
用于远程 Portlet 的 Web 服务
WSRP 是远程呈现 Portlet 的标准,使门户能够从多个源聚合内容。WSRP 将 Web 服务的集成能力扩展到面向表示的组件,并将视图层公开为跨平台、实现语言和供应商共享。可以发现内容和应用程序提供者并将其插入遵循标准的应用程序中,而不必进行任何额外的编程工作。
典型的 Web 服务使用远程表示范例,这意味着所有的视图逻辑在客户机上执行,而应用程序逻辑和数据层(控制器和模型)则驻留于服务器上。与此相反,WSRP 使用分布式范例将客户机和服务器的表示分开。

图 1. 面向数据的 Web 服务和 WSRP 面向表示的 Web 服务的比较
