??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲欧美日本免费,国产精品网站视频,久久夜色精品国产亚洲aⅴhttp://www.aygfsteel.com/rain1102/category/37652.html<br/><font color="green" style="font-family: 华文行楷;font-size:16px;">子曰Q危邦不入,乱邦不居。天下有道则见,无道则隐?lt;/font><font color="#3C1435"></font>zh-cnFri, 20 Feb 2009 13:59:55 GMTFri, 20 Feb 2009 13:59:55 GMT60liferay portlet处理程之一http://www.aygfsteel.com/rain1102/archive/2007/01/28/96353.htmlEric.ZhouEric.ZhouSun, 28 Jan 2007 01:59:00 GMThttp://www.aygfsteel.com/rain1102/archive/2007/01/28/96353.htmlhttp://www.aygfsteel.com/rain1102/comments/96353.htmlhttp://www.aygfsteel.com/rain1102/archive/2007/01/28/96353.html#Feedback0http://www.aygfsteel.com/rain1102/comments/commentRss/96353.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/96353.html 关键?   liferay    

// 初始?/font>
portal.servlet.MainServlet.init()
 // process startup events
 StartupAction.run()

 // 初始化portlets.
 String[] xmls = new String[] {
  Http.URLtoString(ctx.getResource("/WEB-INF/portlet.xml")),
  Http.URLtoString(ctx.getResource("/WEB-INF/portlet-ext.xml")),
  Http.URLtoString(ctx.getResource("/WEB-INF/liferay-portlet.xml")),
  Http.URLtoString(ctx.getResource("/WEB-INF/liferay-portlet-ext.xml")),
  Http.URLtoString(ctx.getResource("/WEB-INF/web.xml"))
 };
 PortletLocalServiceUtil.initEAR(xmls)

 // 初始化display.
 String xml = Http.URLtoString(ctx.getResource(
   "/WEB-INF/liferay-display.xml"));
 PortletCategory newPortletCategory =
  PortletLocalServiceUtil.getEARDisplay(xml);
 portletCategory.merge(newPortletCategory);

 // 初始化layout模板.
 String[] xmls = new String[] {
  Http.URLtoString(ctx.getResource(
   "/WEB-INF/liferay-layout-templates.xml")),
  Http.URLtoString(ctx.getResource(
   "/WEB-INF/liferay-layout-templates-ext.xml"))
 };
 LayoutTemplateLocalUtil.init(ctx, xmls)

 // 初始化Theme.
 String[] xmls = new String[] {
  Http.URLtoString(ctx.getResource(
   "/WEB-INF/liferay-look-and-feel.xml")),
  Http.URLtoString(ctx.getResource(
   "/WEB-INF/liferay-look-and-feel-ext.xml"))
 };
 ThemeLocalUtil.init(ctx, xmls)

 // 查company
 CompanyLocalServiceUtil.checkCompany(_companyId);

 // 其它内容...

// 响应服务
portal.servlet.MainServlet.service()
 
 // get portalContext
 ServletContext ctx = getServletContext();
 ServletContext portalCtx = ctx.getContext(
  PrefsPropsUtil.getString(_companyId, PropsUtil.PORTAL_CTX));
 
 // Struts module config
 ModuleConfig moduleConfig = getModuleConfig(req);

 // Portlet Request Processor - 在struts.config中定?
 portletReqProcessor = PortletRequestProcessor.getInstance(this, moduleConfig);

 // d处理.

 // 处理service前置事g.
 EventsProcessor.process(PropsUtil.getArray(PropsUtil.SERVLET_SERVICE_EVENT_PRE), req, res);

 // 调用Struts的serviceҎ.
 callParentService(req, res);

 // 处理Sruts后置事g.
 EventsProcessor.process(PropsUtil.getArray(PropsUtil.SERVLET_SERVICE_EVENTS_POST), req, res);
 
// struts的ActionServlet.
ActionServlet.process(HttpServletRequest req, HttpServletResponse res)
 processor.process(req, res);

// portal的RequestProcessor.
portal.struts.PortalRequestProcessor.process(HttpServletRequest req, HttpServletResponse res)
  
 // struts的RequestProcessor
 RequestProcessor.process(HttpServletRequest req, HttpServletResponse res)

  string path = processPath(req, res)  // PortalRequestProcessor重蝲

  ActionMapping mapping = processMapping(req, res, path);

  processRoles(req, res, mapping) // PortalRequestProcessor重蝲

  ActionForm from = processActionForm(req, res, mapping);

  processForward(req, res, mapping);

  processInclude(req, res, mapping);

  Action action = processActionCreate(req, res, mapping);

  ActionForward forward = processActionPerform(req, res, action, form, mapping);

  processForwardConfig(req, res, forward);  // TilesRequestProcessor重蝲
  
 // tiles的RequestProcessor
 TilesRequestProcessor.processForwardConfig(req, res, forward)

  processTilesDefinition(forward.getPath(), forward.getContextRelative(), req, res);

   Controller.execute();  // 输出/portal/layout.jsp


/html/portal/layout.jsp  - portal布局面.
 
此处include?portal-ejb/classes/portal.properties里layout.view.page定义的页?portal/layout/view/portlet.jsp

/html/portal/layout/view/portlet.jsp  - portlet布局视图面.

// d模板内容Q模板由liferay-layout-templates.xml文g定义.
String content = LayoutTemplateLocalUtil.getContent(
 layoutTypePortlet.getLayoutTemplateId(), false, theme.getThemeId());
 下面是一个一列的模板:
 Qdiv id="layout-content-outer-decoration"Q?br /> Qdiv id="layout-content-inner-decoration"Q?br />  Qdiv id="layout-content-container"Q?br />   $processor.processColumn("column-1")
  Q?divQ?br /> Q?divQ?br /> Q?divQ?br />
// 处理模板
portlet.layoutconfiguration.util.RuntimePortletUtil.processTemplate(
  application, pageContext, request, response, content);
 

 // 注入模板处理E序
 TemplateProcessor processor = new TemplateProcessor(ctx, req, res, portletId);
 VelocityContext context = new VelocityContext();
 context.put("processor", processor); 
 // 处理模板
 Velocity.evaluate(context, pageContext.getOut(),
  RuntimePortletUtil.class.getName(), content); 



Eric.Zhou 2007-01-28 09:59 发表评论
]]>
JSR168规范中对接口、具体类的概q?/title><link>http://www.aygfsteel.com/rain1102/archive/2007/01/26/96124.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Fri, 26 Jan 2007 05:33:00 GMT</pubDate><guid>http://www.aygfsteel.com/rain1102/archive/2007/01/26/96124.html</guid><wfw:comment>http://www.aygfsteel.com/rain1102/comments/96124.html</wfw:comment><comments>http://www.aygfsteel.com/rain1102/archive/2007/01/26/96124.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/rain1102/comments/commentRss/96124.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/rain1102/services/trackbacks/96124.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; LINE-HEIGHT: 150%; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt"> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'"> <span style="mso-list: Ignore">1Q?span style="FONT: 7pt 'Times New Roman'">  </span></span> </span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">GenericPortlet</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">。ؓ具体c,l承?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Portlet</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">Q提供了基本的一些功能?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"> <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; LINE-HEIGHT: 150%; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt"> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'"> <span style="mso-list: Ignore">2Q?span style="FONT: 7pt 'Times New Roman'">  </span></span> </span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Portlet</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">。ؓ</span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Portlet</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">接口部分Q在新编?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Portlet</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">时均需要直接实现此接口或承已实现此接口的</span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Portlet</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">c?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">(</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">GenericPortlet)</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">Q此接口控制?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Portlet</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">的整?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Lifecycle</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">Q根?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">JSR168</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">规范Q将</span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Portlet</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Lifecycle</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">划分Z三个阶段Q?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"> <br />(1) init</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">。初始化?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Portlet</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">Q在一?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Lifecycle</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Portlet</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">只可初始化一ơ。通过传入?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">PortletConfig</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">可获?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">PortletContext</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"> <br />(2) handlerRequest</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">。在此阶D规范将其分Z</span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">processAction</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">以及</span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">render</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">两种概念Q?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">processAction</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">表示?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Portlet</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">与用L交互q程的处理;</span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">render</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">则主要控制了</span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Portlet</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">的内容的昄Q用于组?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Portlet</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">fragment</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">Q不好翻译,</span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">^_^</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">Q?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"> <br />(3)destroy</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">。结束此</span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Portlet</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Lifecycle</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">Q可在此部分q行</span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Portlet</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">的一些资源的回收{工作?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"> <br />Portlet</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">容器通过</span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Portlet</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">的一个标识符调用</span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Portlet</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">的接口进行与</span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Portlet</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">的交互?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"> <br /> </span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Portlet</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">接口依赖</span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">PortletConfig</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">ActionRequest</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">ActionResponse</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">RenderRequest</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">RenderResponse</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">Q这?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Servlet</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">非常的相伹{?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; LINE-HEIGHT: 150%; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt"> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'"> <span style="mso-list: Ignore">3Q?span style="FONT: 7pt 'Times New Roman'">  </span></span> </span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">PortletRequest</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">。此接口cM</span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">HttpServletRequest</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">Q通过此接口获取所有与当前</span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Portlet</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">相关的参数?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Portlet</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Mode</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Portlet</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">WindowState</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Portal</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">的上下文环境?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Portlet</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Preference</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">PortletSession</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; LINE-HEIGHT: 150%; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt"> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'"> <span style="mso-list: Ignore">4Q?span style="FONT: 7pt 'Times New Roman'">  </span></span> </span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">ActionRequest</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">。此接口l承?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">PortletRequest</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">Q通过此接口在</span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Portlet</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">processAction</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">中通过</span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">ActionRequest</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">可获得相关的</span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Portlet</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">的交互式h的参数?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; LINE-HEIGHT: 150%; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt"> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'"> <span style="mso-list: Ignore">5Q?span style="FONT: 7pt 'Times New Roman'">  </span></span> </span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">RenderRequest</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">。此接口l承?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">PortletRequest</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">Q目前规范中此接口中未定义Q何方法?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; LINE-HEIGHT: 150%; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt"> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'"> <span style="mso-list: Ignore">6Q?span style="FONT: 7pt 'Times New Roman'">  </span></span> </span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">PortletResponse</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">。此接口cM?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">HttpServletResponse</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">Q提供页面显C?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Portlet</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">时的一些内容的写入?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; LINE-HEIGHT: 150%; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt"> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'"> <span style="mso-list: Ignore">7Q?span style="FONT: 7pt 'Times New Roman'">  </span></span> </span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">ActionResponse</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">。此接口l承?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">PortletResponse</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">Q提供了交互相关的设|?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">PortletMode</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">以及?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">WindowState</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">的方法?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; LINE-HEIGHT: 150%; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt"> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'"> <span style="mso-list: Ignore">8Q?span style="FONT: 7pt 'Times New Roman'">  </span></span> </span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">RenderResponse</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">。此接口l承?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">PortletResponse</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">Q提供了完全cM?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">HttpServletResponse</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">的方法,׃</span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Portlet</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">只提供片断式的内容,?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Servlet</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">提供一个完整的面内容不同Q在</span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">response</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">时无法设|页面的</span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">contentType</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">{相关的面头的东ѝ?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; LINE-HEIGHT: 150%; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt"> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'"> <span style="mso-list: Ignore">9Q?span style="FONT: 7pt 'Times New Roman'">  </span></span> </span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">PortletConfig</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">。此接口非常cM?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">ServletConfig</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">Q用于获?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Portlet</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">配置文g</span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">(portlet.xml)</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">中的初始参数Q类g</span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">ServletConfig</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">获取</span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">web.xml</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">中的初始参数Q通过</span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">PortletConfig</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">可获?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Portlet</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">的相关上下文对象</span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">PortletContext</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 27pt; TEXT-INDENT: -9pt; LINE-HEIGHT: 150%; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'"> <span style="mso-list: Ignore">10Q?span style="FONT: 7pt 'Times New Roman'">  </span></span> </span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">WindowState</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">。此具体cȝ于定?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Portlet</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">所支持?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">WindowState</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 27pt; TEXT-INDENT: -9pt; LINE-HEIGHT: 150%; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'"> <span style="mso-list: Ignore">11Q?span style="FONT: 7pt 'Times New Roman'">  </span></span> </span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">PortletMode</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">。此具体cȝ于定?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Portlet</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">所支持?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Mode</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">Q默认提供的?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">View</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Edit</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Help</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">Q?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Portlet</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">容器厂商可根据需要提供特D的</span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Mode</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 27pt; TEXT-INDENT: -9pt; LINE-HEIGHT: 150%; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'"> <span style="mso-list: Ignore">12Q?span style="FONT: 7pt 'Times New Roman'">  </span></span> </span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">PortalContext</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">。此接口cM?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">ServletContext</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">Q用于获?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Portal</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">相关的上下文信息Q如</span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Portal</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">的提供商信息{等?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 27pt; TEXT-INDENT: -9pt; LINE-HEIGHT: 150%; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'"> <span style="mso-list: Ignore">13Q?span style="FONT: 7pt 'Times New Roman'">  </span></span> </span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">PortletPreference</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">。此接口主要用于考虑</span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Portlet</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">的个性化定制的数据的保存Q此接口q不代表要替代用于保存个性化定制信息的数据库Q可用于保存一些数据量不大情况下的Ҏ偏好?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 27pt; TEXT-INDENT: -9pt; LINE-HEIGHT: 150%; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'"> <span style="mso-list: Ignore">14Q?span style="FONT: 7pt 'Times New Roman'">  </span></span> </span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">PreferenceValidator</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">。此接口用于?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">portlet.xml</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">中的</span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Preference</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">参数的合法性?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 27pt; TEXT-INDENT: -9pt; LINE-HEIGHT: 150%; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'"> <span style="mso-list: Ignore">15Q?span style="FONT: 7pt 'Times New Roman'">  </span></span> </span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">PortletSession</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">。此接口非常cM?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">HttpSession</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">Q用于串?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Portlet</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">中的</span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Session</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">数据?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 27pt; TEXT-INDENT: -9pt; LINE-HEIGHT: 150%; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'"> <span style="mso-list: Ignore">16Q?span style="FONT: 7pt 'Times New Roman'">  </span></span> </span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">PortletContext</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">。此接口用于获取?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Portlet</span> <span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">容器相关的上下文信息?/span> <span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"> <o:p> </o:p> </span> </p> <div> <span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">      17Q?PortletURL</span> <span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">。此接口有点cM</span> <span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">Jetspeed</span> <span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">中所使用?/span> <span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">$jslink.setAction</span> <span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">以及</span> <span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">$jslink.setPage</span> <span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">之类的方法,如果熟悉</span> <span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">Jetspeed</span> <span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">的架构的应该比较 熟悉q?/span> <span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">个概念,q个主要Z得容器得以识?/span> <span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">View</span> <span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">层和</span> <span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">Model</span> <span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">层的交互的衔</span> <span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">接?/span> </div><img src ="http://www.aygfsteel.com/rain1102/aggbug/96124.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/rain1102/" target="_blank">Eric.Zhou</a> 2007-01-26 13:33 <a href="http://www.aygfsteel.com/rain1102/archive/2007/01/26/96124.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>按照LiferayPortal二次开发指南做例子http://www.aygfsteel.com/rain1102/archive/2007/01/25/95920.htmlEric.ZhouEric.ZhouThu, 25 Jan 2007 06:16:00 GMThttp://www.aygfsteel.com/rain1102/archive/2007/01/25/95920.htmlhttp://www.aygfsteel.com/rain1102/comments/95920.htmlhttp://www.aygfsteel.com/rain1102/archive/2007/01/25/95920.html#Feedback1http://www.aygfsteel.com/rain1102/comments/commentRss/95920.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/95920.html需要portal-kernel.jar和portlet.jar两个?攑օlib下?br />package com.rain.portal;

import Java.io.IOException;

import javax.portlet.GenericPortlet;
import javax.portlet.PortletException;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;

public class HelloWorldPortlet extends GenericPortlet {

 @Override
 protected void doEdit(RenderRequest arg0, RenderResponse arg1) throws PortletException, IOException {
  // TODO Auto-generated method stub
  arg1.setContentType("text/html");
  arg1.getWriter().println("Hello World,This is a Portlet!---doEdit");

 }

 @Override
 protected void doView(RenderRequest arg0, RenderResponse arg1) throws PortletException, IOException {
  // TODO Auto-generated method stub
  arg1.setContentType("text/html");
  arg1.getWriter().println("Hello World,This is a Portlet!---doView");

 }

}

package com.rain.portal;

import Java.io.IOException;

import javax.portlet.GenericPortlet;
import javax.portlet.PortletException;
import javax.portlet.PortletRequestDispatcher;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;

public class HelloJSPPortlet extends GenericPortlet {

 @Override
 protected void doEdit(RenderRequest arg0, RenderResponse arg1) throws PortletException, IOException {
  // TODO Auto-generated method stub
  arg1.setContentType("text/html");
  String jspName=getPortletConfig().getInitParameter("edit-jsp");
  PortletRequestDispatcher rd=getPortletContext().getRequestDispatcher(jspName);
  rd.include(arg0, arg1);
 }

 @Override
 protected void doView(RenderRequest arg0, RenderResponse arg1) throws PortletException, IOException {
  // TODO Auto-generated method stub
  arg1.setContentType("text/html");
  String jspName=getPortletConfig().getInitParameter("view-jsp");
  PortletRequestDispatcher rd=getPortletContext().getRequestDispatcher(jspName);
  rd.include(arg0, arg1);
 }

}


web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "<web-app>
  <display-name>TestPortal</display-name>
  <listener>
    <listener-class>com.liferay.portal.kernel.servlet.PortletContextListener</listener-class>
  </listener>
  <servlet>
    <servlet-name>HelloWorldPortlet</servlet-name>
    <servlet-class>com.liferay.portal.kernel.servlet.PortletServlet</servlet-class>
    <init-param>
      <param-name>portlet-class</param-name>
      <param-value>com.rain.portal.HelloWorldPortlet</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
  </servlet>
   <servlet>
    <servlet-name>HelloJSPPortlet</servlet-name>
    <servlet-class>com.liferay.portal.kernel.servlet.PortletServlet</servlet-class>
    <init-param>
      <param-name>portlet-class</param-name>
      <param-value>com.rain.portal.HelloJSPPortlet</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>HelloWorldPortlet</servlet-name>
    <url-pattern>/HelloWorldPortlet/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>HelloJSPPortlet</servlet-name>
    <url-pattern>/HelloJSPPortlet/*</url-pattern>
  </servlet-mapping>
  <taglib>
    <taglib-uri>PortletTag</taglib-uri>
    <taglib-location>/WEB-INF/tld/liferay-portlet.tld</taglib-location>
  </taglib>
</web-app>

portlet.xml用来定义Portlet的诸如部|名U、初始化参数、支持模式?/span>resource bundle{普通的初始化信息,包括Q?/span>portlet-name?/span>display-name?/span>portlet-class?/span>init-param?/span>expiration-cathe?/span>supports?/span>portlet-info?/span>security-role-ref{等。其正式的规范请参考:http://java.sun.com/xml/ns/Portlet/Portlet-app_1_0.xsd

portlet.xml
<?xml version="1.0"?>
<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd  <portlet>
    <portlet-name>HelloWorldPortlet</portlet-name>
    <display-name>HelloWorldPortlet</display-name>
    <portlet-class>com.rain.portal.HelloWorldPortlet</portlet-class>
    <expiration-cache>0</expiration-cache>
    <supports>
      <mime-type>text/html</mime-type>
    </supports>
    <supports>
      <mime-type>text/html</mime-type>
      <portlet-mode>edit</portlet-mode>
    </supports>
    <portlet-info>
      <title>HelloWorldPortlet</title>
      <short-title>HelloWorldPortlet</short-title>
      <keywords>HelloWorldPortlet</keywords>
    </portlet-info>
    <security-role-ref>
      <role-name>guest</role-name>
    </security-role-ref>
    <security-role-ref>
      <role-name>power-user</role-name>
    </security-role-ref>
    <security-role-ref>
      <role-name>user</role-name>
    </security-role-ref>
  </portlet>
  <portlet>
    <portlet-name>HelloJSPPortlet</portlet-name>
    <display-name>HelloJSPPortlet</display-name>
    <portlet-class>com.rain.portal.HelloJSPPortlet</portlet-class>
    <init-param>
      <name>view-jsp</name>
      <value>/view.jsp</value>
    </init-param>
    <init-param>
      <name>edit-jsp</name>
      <value>/edit.jsp</value>
    </init-param>
    <expiration-cache>0</expiration-cache>
    <supports>
      <mime-type>text/html</mime-type>
    </supports>
    <supports>
      <mime-type>text/html</mime-type>
      <portlet-mode>edit</portlet-mode>
    </supports>
    <portlet-info>
      <title>HelloJSPPortlet</title>
      <short-title>HelloJSPPortlet</short-title>
      <keywords>HelloJSPPortlet</keywords>
    </portlet-info>
    <security-role-ref>
      <role-name>guest</role-name>
    </security-role-ref>
    <security-role-ref>
      <role-name>power-user</role-name>
    </security-role-ref>
    <security-role-ref>
      <role-name>user</role-name>
    </security-role-ref>
  </portlet>
</portlet-app>

定义Portlet默认可用的用L、默认模ѝ是否支持多个实例等Q规范由http://www.liferay.com/dtd/liferay-Portlet-app_3_5_0.dtd

liferay-portlet.xml
<?xml version="1.0"?>
<!DOCTYPE liferay-portlet-app PUBLIC "-//Liferay//DTD Portlet Application 4.2.0//EN" "<liferay-portlet-app>
  <portlet>
    <portlet-name>HelloWorldPortlet</portlet-name>
    <struts-path>HelloWorldPortlet</struts-path>
    <use-default-template>true</use-default-template>
    <instanceable>true</instanceable>
  </portlet>
  <portlet>
    <portlet-name>HelloJSPPortlet</portlet-name>
    <struts-path>HelloJSPPortlet</struts-path>
    <use-default-template>true</use-default-template>
    <instanceable>true</instanceable>
  </portlet>
  <role-mapper> 
    <role-name>administrator</role-name>
    <role-link>Administrator</role-link>
  </role-mapper>
  <role-mapper>
    <role-name>guest</role-name>
    <role-link>Guest</role-link>
  </role-mapper>
  <role-mapper>
    <role-name>power-user</role-name>
    <role-link>Power User</role-link>
  </role-mapper>
  <role-mapper>
    <role-name>user</role-name>
    <role-link>User</role-link>
  </role-mapper>
</liferay-portlet-app>

定义Portlet默认的所属类别?/span>Liferay Portal?/span>Portlet实行按类别管理和划分用户权限?/span>

liferay-display.xml
<?xml version="1.0"?>
<!DOCTYPE display PUBLIC "-//Liferay//DTD Display 4.0.0//EN" "
<display>
  <category name="category.test">
    <portlet id="HelloWorldPortlet"/>
    <portlet id="HelloJSPPortlet"/>
  </category>
</display>

view.jsp
<table cellpadding="8" cellspacing="0" width="100%">
  <tr>
    <td>
      <font class="Portlet-font" style="font-size:x-small;">
        This is a <b>Sample JSP Portlet</b> used in viewing model. Use this as a quick way to include JSPs.
      </font>
    </td>
  </tr>
</table>

edit.jsp
<table cellpadding="8" cellspacing="0" width="100%">
  <tr>
    <td>
      <font class="Portlet-font" style="font-size:x-small;">
        This is a <b>Sample JSP Portlet</b> used in editing model. Use this as a quick way to include JSPs.
      </font>
    </td>
  </tr>
</table>


Eric.Zhou 2007-01-25 14:16 发表评论
]]>
玩liferay开心的一?/title><link>http://www.aygfsteel.com/rain1102/archive/2007/01/25/95881.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Thu, 25 Jan 2007 03:41:00 GMT</pubDate><guid>http://www.aygfsteel.com/rain1102/archive/2007/01/25/95881.html</guid><wfw:comment>http://www.aygfsteel.com/rain1102/comments/95881.html</wfw:comment><comments>http://www.aygfsteel.com/rain1102/archive/2007/01/25/95881.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/rain1102/comments/commentRss/95881.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/rain1102/services/trackbacks/95881.html</trackback:ping><description><![CDATA[<p>昨天看了Liferay Portal二次开发指南,q按照里面的例子q行了开发。但׃初次接触PortalQ更是初ơ接触Liferay Q所以也不知道怎么ȝ他。今天早上到了Liferay 的中文站看到需要部|Ԍ所以就试了一下,竟然可以了!好开心!<br />让h生气的是Q好不容易用MSN加了一个会q玩意的兄弟Q昨天就问他了,他说很忙Q所以就没好意思打CQ今天早上又来问他,竟然q说忙,其实告诉我一下需要到里面部vQ然后怎么看不可以了吗!哎``心都凉了Q?br />但ȝ来说Q还是满开心的。因为终于看C天的成果了!<br />dq去--->理---->自动部v<br />然后d内容---->试里面有部v的东东了Q?/p><img src ="http://www.aygfsteel.com/rain1102/aggbug/95881.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/rain1102/" target="_blank">Eric.Zhou</a> 2007-01-25 11:41 <a href="http://www.aygfsteel.com/rain1102/archive/2007/01/25/95881.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Portal中的重要基类GenericPortlethttp://www.aygfsteel.com/rain1102/archive/2007/01/24/95687.htmlEric.ZhouEric.ZhouWed, 24 Jan 2007 03:02:00 GMThttp://www.aygfsteel.com/rain1102/archive/2007/01/24/95687.htmlhttp://www.aygfsteel.com/rain1102/comments/95687.htmlhttp://www.aygfsteel.com/rain1102/archive/2007/01/24/95687.html#Feedback0http://www.aygfsteel.com/rain1102/comments/commentRss/95687.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/95687.html ?/span> Servlet 一P~写?/span> Portlet 也必ȝ接或者间接的扩展基类 GenericPortlet Q这个是?/span> JCP 针对 Portal 提出?/span> JSR168 规范定义的。只要扩展自规范?/span> GenericPortlet Q所有的 Portlet 都可以在支持 JSR168 规范?/span> Portal 服务器上q行?/span>

GenericPortlet l一定义了可?/span> Portal 容器识别和调用的ҎQ包括:

public Init() Q初始化Q?/span>

public Init(PortletConfig) Q初始化Q?/span>

public getInitParameter(String) Q取得在 Portlet.xml 中定义的初始化参敎ͼ

public getInitParameterNames() Q取得在 Portlet.xml 中定义的全部初始化参敎ͼ

public getPortletConfig() Q取得包含初始化参数的配|对?/span> PortletConfig 实例Q?/span>

public getPortletContext() Q取?/span> Portlet 上下文;

public getPortletName() Q取得在 Portlet.xml 中定义的 Portlet 名称?/span>

public getResourceBundle(Locale) Q取?/span> Portlet 国际化的 Resource Bundle Q?/span>

protected getTitle(RenderRequest) Q取?/span> Portlet 的标题;

protected doView(RenderRequest Q?/span> RenderResponse) Q?/span> Portlet 览模式的处理方法;

protected doEdit(RenderRequest Q?/span> RenderResponse) Q?/span> Portlet ~辑模式的处理方法;

protected doHelp(RenderRequest Q?/span> RenderResponse) Q?/span> Portlet 帮助模式的处理方法;

protected doDispatch(RenderRequest Q?/span> RenderResponse) Q?/span> Portlet 行ؓ分发Q?/span>

protected processAction(ActionRequest Q?/span> ActionResponse) Q?/span> Portlet 处理 Action Request 的方法;

protected render(RenderRequest Q?/span> RenderResponse) Q?/span> Portal 处理 Render Request 的方法;

public destroy() Q?/span> Portlet 销毁,l止其生命周期?/span>

?/span> Portlet Portal q行的时候, doView ?/span> doEdit ?/span> doHelp 三个Ҏ分别被调用,用以生成 Portlet 标记。同样也可以调用 Servlet 生成 Portlet 标记Q或者不调用 JSP 或?/span> Servlet Q直接在Ҏ中得?/span> PrintWriter 然后用最单的 pw.println() 打印出内宏V这个过E类?/span> Servlet Q如下:

PrintWriter pw = renderResponse.getWriter();

pw.println(“Hello Q?/span> world!”);

?/span> Servlet cMQ可以?/span> getInitParamter(String s) 得到配置文g?/span> Portlet 的初始|只不q?/span> Servlet ?/span> web.xml 中,?/span> Portlet ?/span> portlet.xml 中?br />

portlet.xmlQ?/span>

       <init-param>
           <name>jspView</name>

           <value> /jsp/view.jsp</value>
       </init-param>


针对如上portlet.xml中的初始化信息,可以采用如下的调用方式:

SimplePortlet.java Q?/span>

String jspName = getPortletConfig().getInitParameter("jspView");



Eric.Zhou 2007-01-24 11:02 发表评论
]]>
【JetSpeed】简?/title><link>http://www.aygfsteel.com/rain1102/archive/2007/01/23/95491.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Tue, 23 Jan 2007 03:21:00 GMT</pubDate><guid>http://www.aygfsteel.com/rain1102/archive/2007/01/23/95491.html</guid><wfw:comment>http://www.aygfsteel.com/rain1102/comments/95491.html</wfw:comment><comments>http://www.aygfsteel.com/rain1102/archive/2007/01/23/95491.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/rain1102/comments/commentRss/95491.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/rain1102/services/trackbacks/95491.html</trackback:ping><description><![CDATA[<span id="wmqeeuq" class="style7"> <font face="宋体" size="2">Jetspeed是一个开放源代码的企业信息门?EIP)的实? 使用的技术是Java和XML. 用户可以使用览? 支持WAP协议的手机或者其它的讑֤讉KJetspeed架设的信息门戯取信? Jetspeed扮演着信息集中器的角色, 它能够把信息集中hq且很容易地提供l用? <br />Jetspeedh如下的特? <br /><br />* 卛_成ؓ标准化的Java Portlet API <br />* Z模板的布局, 包括JSP和Velocity <br />* 通过开攄内容同步技术支持远EXML内容交换 <br />* 定制默认的主?<br />* 使用数据库进行用戯?<br />* 内存~存技? 加快面的响?<br />* 通过Rich Site Summary技? 支持同步内容 <br />* 和Cocoon, WebMacro, Velocity集成. <br />* Wireless Markup Language (WML) 支持 <br />* 使用XML格式的配|文件注册portlet. <br />* 完整的Web Application Archive (WAR) 支持 <br />* Web应用E序开发的基础设施 <br />* 可以在本地缓存远E内?<br />* 与Avantgo同步 <br />* 可移植到所有支持JDK1.2和Servlet 2.2的^?<br />* 与Turbine模块和服务集?<br />* 可以Ҏ用户, 安装媒体cd和语a的不同设? 产生不同的个性化服务 <br />* 持箋化服务得所qportlet能够Ҏ的存储每个用L状? 面和portlet <br />* 使用皮肤技术得用户可以选择portlet的颜色和昄属?<br />* 自定义功能是的管理员可以选择portlet以及定义个h面的布局 <br />* 在数据库中存储PSML <br />* 通过Jetspeed的安全portlets理用户, l?角色和权?<br />* Z角色对访问portletq行控制 </font> </span><img src ="http://www.aygfsteel.com/rain1102/aggbug/95491.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/rain1102/" target="_blank">Eric.Zhou</a> 2007-01-23 11:21 <a href="http://www.aygfsteel.com/rain1102/archive/2007/01/23/95491.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSR#168 Portlet 说明http://www.aygfsteel.com/rain1102/archive/2007/01/23/95475.htmlEric.ZhouEric.ZhouTue, 23 Jan 2007 02:40:00 GMThttp://www.aygfsteel.com/rain1102/archive/2007/01/23/95475.htmlhttp://www.aygfsteel.com/rain1102/comments/95475.htmlhttp://www.aygfsteel.com/rain1102/archive/2007/01/23/95475.html#Feedback0http://www.aygfsteel.com/rain1102/comments/commentRss/95475.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/95475.html1 序言

许多大型企业的网? 渐渐采用?portal server 作ؓ开发的基础. 至于什么是 portal ? 中文译?"门户|站"?有h可能?. 天杀?. 门户|站不是像 yahoo, pchome, yam {等。不q? 我们现在讨论?portal server, 不是那么地简? 基本?yahoo, pchome, yam 那些只能UCؓ搜烦引擎的门L站?

如果你从来沒有用q?portal server 或是似懂非懂.. 大家可以q结?MyNetscape ?MyYahoo ?注册一个帐受因?MyNetscape 的样式比较好? 所以我接下来就?MyNetscape Zl的范例?

如果你第一ơ接触到 portalQ你会惊讶的发现... ?. Z一个网站里面充满了q么多小H口. 我们U这些小H口叫做 "portlet"Q而且每个窗口都存在着独立的信息与内容Q可以放到最大化Q羃,q原Q关闭等{。当你登陆之后,可以选择及调整自?portlet 的配|,也可以设|自己喜q风格与样式,更可以设|每?portlet 的资料配|。这U以客户Z帝的pȝQ就是我们将要介l的 portal?

2 Portal 的组?/h3>

Portal 的组成可以分Z部䆾 (1) Portal Server (2) Portlet Container (3) Portlet

1) Portal Server 的定义是
一?PortalQ门L站)是指一?Web-based 的系l,通常都会提供个h化设|、单一登陆、以及由各种不同来源或不同网站取得各式各L信息Qƈ且将q些信息攑֜|页之中l合而成的呈现^収ͼ门户|站会有_y的个人化讄L供定制的|页Q当不同{的用者来览该页面将获得不同的信息内宏V?
2) Portlet Container 的定义是
portlet container 是提?portlets 执行的环境,包含了许?portlets q且理他们的生命周期,他也会永q保存着 portlets 的喜好设|,一?portlet container 接收到来?portal 的请求后Q接着这个请求传递给存在 container ?portlet 执行。portlet container 没有义务ȝ?portlets 产生的信息內容,q个工作必须?portal 来处理。portal ?portlet container 可以攑֜一赯为同一个系l的lgQ或者分开成ؓ两个独立的组件?
3) Portlet 的定义是
一?Portlet 是以 Java 技术ؓ技术的 Web lgQ由 Portlet Container 所理Q专门处理客L request 以及产生各种动态的信息内容。Portlets 为可插式 ( pluggable ) 的客L面组Ӟ提供呈现层成Z个信息系l。这些由 portlet 产生的内容也被称为片D?(fragment)Q而片D|h一些规则的Markup( HTML、XHTML、WML )Q而且可以和其他的片段l合而成一个复杂的文g。?Portlet 中的内容正常来说是与其他 Portlet 的内容聚合而成Z?Portal |页。?Portlet 的生命周期是?Portlet Container 所理控制的。客L?portlets 的互动是?portal 通过典型?request/response 方式实现Q正常来_客户会和 portlets 所产生的内容互动,举例来说Q根据下一步的q接或者是认送出的表单,l果 portal 会接收?portlet 的动作,这个处理状况{向到目标 portlet。这?portlet 内容的生可能会因ؓ不同的用者而有不同的变化,完全是根据客户对于这?portlet 的设|?

3 portlet ?servlet 的关p?/h3>Portlet ?Servlet 是兄弟有那么一点点怼却又有那么一点点不同Q因?Servlet ?Portlet 不尽然相同,所以研I小i決定将 portlets 定义成ؓ一个新的组Ӟ因此定义?portlets 一个新的ƈ且明的界面与行为。ؓ了尽可能与现有的 servlet l合辑ֈ重复使用的目的,portlet 的规范利用了 servlet 的规范,许多观念都很怼的,l合 portlets、servlets ?jsp 在同一个网站系l中Q我们称?portlet application 。在同一?portlet application 中,他们分享同一?classloaderQcontext ?session?br />抽象cportlet是Portlet API的核心?PortletcL展了Servelt API的HTTPServlet。所有的Portlet 都从HTTPServletl承而来Q间接地扩展了Portletc,如下所C:
... +--javax.servlet.http.HttpServlet | +--org.apache.jetspeed.portlet.Portlet | +--org.apache.jetspeed.portlet.PortletAdapter | +--com.myCompany.myApplication.myPortlet 

因此QPortlet是一cȝD的ServletQ能方便的插入Portal ServerQƈ在其上运行。与 servlet 不同Qportlet 无法直接发送重定向或错误信息到览器,以及转发h或者写专用标记到输出流?/p>

?servlet 相比QPortlet有更强的动态性,可在不重新启?Portal Server 的情况下q行更新Q?/p>

  • 可以使用门户|站理界面安装和除去portlet 应用E序
  • portlet 的设|可由拥有适当讉K权的理员进行更?
  • 可以使用理 portlet 动态创建和删除 portlet

Portlet容器依赖于J2EE体系l构。Portlet 被打包成cM于J2EE Web应用的WAR文gQƈ按类g servlet 的方式部|Ӏ与其它 servlet 怼Q?servlet 部v描述W(web.xmlQ把 portlet 定义到应用程序服务器Q这个文件定?portlet 的类文g和只d始化参数。除此之外,portletq必L供一个portlet的部|描q符Qportlet.xmlQ来把portlet定义到portal server

1) Portlet ?Servlet 的相g?/h5>@ portlets 也是 Java 技术的 web lg
@ portlets 也是有特定的 container 在管?br />@ portlets 可以动态生各U内?br />@ portlets 的生命周期由 container 所理
@ portlets 和客L的互动是通过 request/response 的机?
2) Portlet ?Servlet 也有一些不?/h5>@ portlets 只?markup 信息片段Q不是完整的|页文g。?Portal 会将所有的 Portlet markup 信息?D|C个完整的 Portal |页?br />@ portlets 不会?URL 有直接的关系
@ 客户端必通过 portal pȝ才能?portlets 互动
@ portlets 有一些定义好?request 处理Qaction request 以及 render request?br />@ portlets 默认定义 portlet modes 及窗口状态可以指出在|页中该 portlet 的哪个功能正在执行及现在?状态?br />@ portlets 可以在同一?portal |页之中存在多个?
3) Portlet 有一些附加的功能?Servlet 所没有?/h5>@ Portlets 能够存取及储存永久配|文件及定制资料?br />@ portlets 可以存取使用者数?br />@ portlets h URL 的重写功能在文g中去动态徏立连l,允许 portal server 不用ȝ道如何在|页的片 D之中徏立连l及动作?br />@ portlets 可以储存临时性的数据?portlet session 之中Q拥有两个不同的范围 Q?br />application-wide scope ?portlet private scope ?
4) Portlet 不具有一些功能, 但是 Servlet 却有提供
@ servlet h讄輸出的文字编? character set encoding)方式
@ servlet 可以讄 HTTP 输出?header
@ servlet 才能夠接收客户对?portal 发出?URL h

4 RI - pluto 冥王星计?/h3>

JSR 是由 JCP ( www.jcp.org ) q个 Java l织所定义出来的规范。几乎每?JSR 都会产出 TCK* ?RI**

*TCK ( Technology Compatibility Kit ) 兼容性测试组?br />*RI ( Reference Implementation ) 实现参?

2003/10/27 JSR#168 Portlet Spec 1.0 已经正式公布。以? 大家可以开始根据这个规范开发兼Ҏ的产品。而这个标准规范书?RI 是采用 Apache Jakarta Pluto 冥王星计划。至于ؓ何叫做冥王星,我猜?Sun 惌把光芒射到冥王星都会发光?:P

目前 pluto 未有正式的版本释放, 来有兴的人可以从 jakarta |站下蝲。不q目前我?CVS 取得版本已经可以正常q行了。安装的Ҏ十分?. 只需要执?%pluto%/bin/install 可以安装了Q安装过E会询问?tomcat 的目录,假设?tomcat 根目录是 c:\tomcat4.1.27 Q你输入 c:\tomcat4.1.27 可以了?

接着 http://localhost:8080/pluto/portal 可以看到很漂亮?portal 界面Q至于操作模式与Ҏ非常单,请多加操控就可以慢慢了解 portlet 的控制方法了?

?portlet spec 中定义的控制有分?
1) 基本?Portlet Modes
VIEW - 你没有做M动作仅仅做内ҎC?br />EDIT - ~辑相关的设|?br />HELP - L帮助

2) 基本?Window States
NORMAL - q原 portlet H口
MAXIMIZED - 最大化 portlet H口
MINMIZED - 最化 portlet H口

其实, q些动作都已l由 portal 所实现Qportlet container 接收与回应相关的动作。真正在E序开发上q不会考虑到这些细节,除非你要做一?portlet container。而开发上要考虑的是什么h能夠做什么事情。例如说未登陆的h应该只能?doView / doHelpQ而不能夠 doEdit q种权限控机制的开发?

5 css 定义

每个通过认证的用者,可以用相关的 portlet 外观 ( Look&Feel )讄Q而这些设|就是通过 css ?~辑。在没有 portlet spec 之前Q各家厂商都自行规定或由 ISV 各自完成Q造成了許?portlet 无法q同一?CSS 来实玎ͼUL上将会有许多问题发生?

因此 css 的定义对于具有定制功能的 portal 是相当重要的?

0) Anchor
q个q没有定?:P

1) Fonts ( font )
portlet-font
portlet-font-dim

2) Message ( paragraph .. )
portlet-msg-status
portlet-msg-info
portlet-msg-error
portlet-msg-alert
portlet-msg-success

3) Sections ( table, div, span ... )
portlet-section-header
portlet-section-body
portlet-section-alternate
portlet-section-selected
portlet-section-subheader
portlet-section-footer
portlet-section-text

4) Forms ( form )
portlet-form-label
portlet-form-input-field
portlet-form-button
portlet-icon-label
portlet-dlg-icon-label
portlet-form-field-label
portlet-form-field

5) menus ( popup menu )
portlet-menu
portlet-menu-item
portlet-menu-item-selected
portlet-menu-item-hover
portlet-menu-item-hover-selected
portlet-menu-cascade-item
portlet-menu-cascade-item-selected
portlet-menu-description
portlet-menu-caption

基本? 你要了解什么地方该用什?cssQ这?css 名称套用在你开发的 portlet 之中Q你可以移植到其他支持 jsr#168 的系l,不需要在花时间去更改成ؓ他们?Look&Feel?

6 信息片段 ( fragment markup ) 的限?/h3>每个 portlet 输出都是一个信息片D,之前有提? q些 markup 有些限制?

如果你是生成 HTML 格式的信息片D,?不可?拥有以下q些 tag Q?br />base, body, iframe, frame, frameset, head, html, ?title

如果生成?XHTML ?XHTML-basic 格式的信息片D,?不可?拥有以下q些 tag Q?br />base, body, iframe, head, html ?title

7 其他l节

最? portlet 需要考虑的还?security, caching, taglib {等..

Portal 是连l后?EAI 处理的信息整合^収ͼ提供了企业完整的解决ҎQ提供了单一登陆的机Ӟ贴心的个人化面讄Q更可以提供各式各样q_?pda, 手机{等的统一H口。因? 政府与大企业?*应该* 采用q种解决ҎQ通过 Webservice 达成信息?金流/物流 的效?...



Eric.Zhou 2007-01-23 10:40 发表评论
]]>几种开源Portal的简单介l分?http://www.aygfsteel.com/rain1102/archive/2007/01/23/95465.htmlEric.ZhouEric.ZhouTue, 23 Jan 2007 01:58:00 GMThttp://www.aygfsteel.com/rain1102/archive/2007/01/23/95465.htmlhttp://www.aygfsteel.com/rain1102/comments/95465.htmlhttp://www.aygfsteel.com/rain1102/archive/2007/01/23/95465.html#Feedback0http://www.aygfsteel.com/rain1102/comments/commentRss/95465.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/95465.html

主要包括QPlutoQLiferayQeXo,Jetspeed四种开源Portal的介l和分析Q有助于对具体项目选择合适的开发^台?

Q?Q?font color="#421ae6">Pluto
2003q?0月JSR168规范1.0正式公布后,Jakarta Apache开始实施Pluto计划Q冥王星计划Q,最l开发出该规范的一个参考实玎ͼReference ImplementationQ,即Pluto。Pluto?.0.1-rc2版与2004q?2月发布?br />Pluto实现Z JSR168的一?Portlet ContainerQ相当于为开发者提供了一个运行portlets的工作^台。Pluto本n也提供了一个简单的Portal模块Q该模块仅仅是ؓ了满Portlet容器和JSR 168的需要而写的,因而显得非常简单,提供的实用的Portlet也非常少。从某种意义上说Pluto更像是一个Portlet ContainerQ作Z个实用的Portal开发框架尚需要更强大的支持。但新版本的Pluto仍没有推出。对于Pluto的应用开发,Apache更推荐用Jetspeed目框架?br />管Pluto作ؓ一个完整的Portal应用q非常欠~。但不少有媄响力的Portal目使用Pluto作ؓPortlet Container。这些项目包括:Jetspeed 、Cocoon uPortal 、Jahia{。由此可见Pluto的重要性。从开发者和学习者的角度看,Pluto的意义还在于为开发者和学习者提供了一个深入了解Portlet Container的简z的参考实例?

Q?Q?font color="#421ae6">Liferay
LiferayQ支持JSR168Q代表了完整的J2EE应用 Q最高版本是2005q?月推出的Professional 3.2.0。它的主要优ҎQ?br />      Q?Q用第三放的开源项目,如Hibernate{。特别是前台界面部分使用了Struts技术;
      Q?Q支持包括中文在内的多种语言Q?br />      Q?Q支持较多的先进技术,如Web Services、EJB, JMS, SOAP, XML{;
Liferay的缺Ҏ它缺乏一个简单清晰可拓展的架构设计,整个架构比较复杂且庞大;Struts1.1本nq不支持JSR168Q所以Liferay在实现诸如上下文׃n{问题上昑־十分W重且没有从Ҏ上解册些问题;portlet设计也显得比较凌乱。此外,如果你的门户pȝ准备应用于商业用途,你需要购买License。基于它q行二次开发比较困难?br />

Q?Q?font color="#421ae6">eXo
eXo(支持JSR168)ZJSF的Portal实现。最新版本是2004q?0月发布的1.0RC1版?br />主要优点包括Q?br />Q?Q?#160;由AOPQAspectJQ实现的内容理pȝQ极大提高了内容理性能Q?br />Q?Q?#160;ZPico Container的Portlet ContainerQPico是一个著名的IoC3轻量U容器。同时也实现了上下文׃nQ二ơ开发的程比较清晰Q?br />Q?Q?#160;使用Struts框架技术;
Q?Q?#160;提供工作技术服务(Workflow serviceQ?br />Q?Q?#160;提供了很多交工P通过XML可以为结构化的信息轻易地创徏视图Q?br />     ׃可见eXo采用了诸多先q技术,但存在不缺炏V主要缺点:׃Portal Server本n的数据是使用xmldb来进行处理,保存到数据库的数据都是ؕ码而且它所有默认的q_字符集都是ISO-8859_1。缺乏中文的充分支持Q对于中文门L开发ƈ没有优势Q由于JSF是重量的表现层框架Q得exo的二ơ开发工作量比较大;对于商业Portal应用开发需要购买License。M开发难度较大?

(4) JetSpeed
JetSpeed是Apachel织的开源Portal目。Jetspeed 目前有两个版本可供选择1.X?.0版本。Jetspeed1.X出现得比较早Q但W一个较为成熟的版本发布?.4。此?.X不断推出新版本。但Jetspeed1.X都不支持JSR168。当JSR168?003q发布后QApche开始开发Jetspeed2Q提供对JSR168 的全面支持?
下表是Jetspeed重要版本的发布日期:
Jetspeed的重要版?#160;                                        发布日期
Jetspeed-1.4b2                                              2002q?2?br />Jetspeed-1.5                                                2004q??br />Jetspeed-2.0-M1                                             2004q?2?br />Jetspeed-2.0-M2                                             2005q??br />Jetspeed1.XZTurbine框架开发,它提供了丰富的Portal技术功能。主要优ҎQXML文g注册PortletQ便于管理;囑Ş化的部v和卸载;对中文的良好支持{。值得注意的是IBM早期的WebSphere Portal Server是在JetSpeed1.X上进行二ơ开发的。Jetspeed2.0?.X基础上进行了较大的改动,功能更加丰富Q完全遵循JSR标准?

配置ҎQ不同的版本的配|可能有变化Q如不成功,可以自行察看文档?
Pulto在Tomcat下的安装配置ҎQ?br />Q?Q?#160;? 下蝲最新的二进制版本安装文?/font>
Q?Q?#160;执行%pluto%/bin/installQ将它安装到Tomcat目录下即?br />Q?Q?#160;在浏览器中输入: Q运行Pluto http://localhost:8080/pluto/portal http://portals.apache.org/pluto/mirrors.cgi

Liferay Professional在Tomcat下的安装配置ҎQ?br />Q?Q?#160;? 下蝲Liferay Professional安装文g Q?br />Q?Q?#160;解压ZIP包到某个目录?br />Q?Q?#160;若下载Tomcat版本的Liferay安装文gQ则不需再装TomcatQ直接启动bin目录下的startup.bat文g?br />Q?Q?#160;在浏览器中输?/font> q行Liferay Professional?/font> http://localhost/ http://www.liferay.com/downloads/index.jsp

eXo Platform在Tomcat下的安装配置ҎQ?br />Q?Q?#160;? 下蝲eXo Platform的安装包 ?br />Q?Q?#160;解压ZIP包到某个目录?br />Q?Q?#160;若下载Tomcat版本的eXo安装文gQ则不需再装TomcatQ直接启动bin目录下的startup.bat文g?br />Q?Q?#160; 在浏览器中输?/font> q行eXo Platform. http://localhost/ http://www.exoplatform.com/portal/faces/public/exo

Jetspeed2在Tomcat下的安装配置ҎQ?br />Q?Q?#160;? 下蝲Jetspeed2 M1或M2版本安装?/font> ?br />Q?Q?#160;若是安装包中已经捆绑TomcatQ解压即可。若安装包不含TomcatQ先安装TomcatQ然后将安装包解压到Tomcat目录Qƈ覆盖相关文g卛_?br />Q?Q?#160;安装要注意的问题有:Jetspeed2M1版本׃Bug无法安装Tomcat5.5上(此BUG?/font> Q;Jetspeed2必须安装在Tomcat5.0.28以上版本上,否则低版本由于JAAS问题无法登陆 Q?br />Q?Q?#160;启动jetspeed-database目录下的start-database.batQ启动数据库Q?br />Q?Q?#160;启动TomcatQ?br />Q?Q?#160;在浏览器中输?/font> q行JetspeedQ?/font> http://localhost:8080/jetspeed/portal http://issues.apache.org/jira/browse/JS2-187 http://www.apache.org/dist/portals/jetspeed-2/



Eric.Zhou 2007-01-23 09:58 发表评论
]]>
portal基础知识http://www.aygfsteel.com/rain1102/archive/2007/01/23/95459.htmlEric.ZhouEric.ZhouTue, 23 Jan 2007 01:42:00 GMThttp://www.aygfsteel.com/rain1102/archive/2007/01/23/95459.htmlhttp://www.aygfsteel.com/rain1102/comments/95459.htmlhttp://www.aygfsteel.com/rain1102/archive/2007/01/23/95459.html#Feedback0http://www.aygfsteel.com/rain1102/comments/commentRss/95459.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/95459.htmlPortal包括Q?br />(1) Portal Server。『Portal Server是基于WEB的应用程? 它将不同资源q行整合q展现给用户。有些文章直接把Portal Server叫做PortalQ请注意。?br />(2) Portlet Container。『Portlet Container用来理Portlet的生命周期ƈ且提供其q行所需要的必要环境. q且为Portlet Preferences提供持久?Persistent)存取服务.但是其不支持内容的Aggregation. Aggregation由Portallg提供.?br />(3) Portlet。『Portlet 是以 Java 技术ؓ技术的 web lgQ可以被容器理Q可以生动态内宏V处理请求ƈ动态返回页? 可以做ؓPortal 的可拔插的用L面组??br />
我们需要Portal的目的就是要做到pȝ功能与模块的可配|。同时要开源ƈW合标准。能与其他的pȝq行l合比如Struts?br />

目前比较L的Portal产品Q?br />Apache JetspeedQhttp://jakarta.apache.org/jetspeed/Q?br />LiferayQhttp://www.liferay.comQ?br />EXOportalQhttp://cvs.sf.net/viewcvs.py/exo/ExoPortal/Q?br />PlutoQhttp://jakarta.apache.org/plutoQ?br />BEA WebLogic Portal Qhttp://edocs.bea.com/wlp/docs81/javadoc/com/bea/portal/model/Portlet.html Q?br />IBM Websphere Portal Qhttp://www.software.ibm.com/wsdd/zones/portal/ Q?br />Oracle Portal Developer Kit Qhttp://portalstudio.oracle.com/Q?
jfoxportalQhttp://www.huihoo.org/jfox/jfoxportal/index.html 刚提案,不过是国内的。)

说PortalQ就不能不提JSR#168 Portlet?br />
JSR 是由 JCP (
http://www.jcp.org/ ) q个 Java l织所定义出来的规范。JSR#168规范是一个关于Portlet的规?——Portlet Spec 1.0 。既然有了规范,理所当然的之后的产品应该按照这个规范来制作?br />

JSR168的目标是Q?span lang="EN-US">

定义portlet的运行时环境Q即portlet容器

定义portlet?span lang="EN-US">portlet容器之间?span lang="EN-US">api?span lang="EN-US">

提供portlet存储易失数据和持久数据的机制

提供portlet包含servlet?span lang="EN-US">jsp的机?span lang="EN-US">

定义方便部v?span lang="EN-US">portlet打包Ҏ

提供jsr168规范下的portal的二q制portlet便携?span lang="EN-US">

通过WSRPQ?span lang="EN-US">web service for remote portletQ协议运行符?span lang="EN-US">jsr168规范的远E?span lang="EN-US">portlet

IT 界已l广泛的接受?span lang="EN-US">jsr168规范。所有的portal领域主要公司都是jsr168专家l的成员Q?span lang="EN-US">Apache,AGT,BEA,Boeing,Borland,Broadvision,Citrix,EDS, Fujitsu, Hitachi, IBM, Novell, Oracle, SAP, SAS Institute, Sun Microsystems, Sybase, TIBCO, and Vignette。官Ҏ持列表甚xѝ?br />
客户端请求由 Portal Web 应用E序q行处理Q它为当前用h索当前页上的 Portlet 。然后, Portal Web 应用E序为每?/span> Portlet 调用 Portlet 容器来通过 Container Invoker API 索它的内宏V?/span> Portlet 容器通过 Portlet API 调用 Portlet ?/span> Container Provider Service Provider Interface Q?/span> SPI Q允?/span> portlet 容器通过 Portal 索信息?/span>

Portlet H口包括Q?/span>

l        标题栏,带有 Portlet 的标?/span>

l        修饰Q包括用于更?/span> Portlet 的窗口状态的按钮Q比如最大化或最化 Portlet Q和用于更改 Portlet 的模式的按钮Q比如显C帮助或~辑预定义的 Portlet 讄Q?/span>

l        ?/span> Portlet 产生的内容(也称Z个标记段Q?/span>

下面是典型的事g程Q当用户讉K portal 面的时候:

 

<!--[if !supportLists]-->²        <!--[endif]-->客户端在验证后向portal?/span>httph?/span>

<!--[if !supportLists]-->²        <!--[endif]-->portal接收h?/span>

<!--[if !supportLists]-->²        <!--[endif]-->portal判断是否有包含请求,q请求包含的动作指向?/span>portlet是和q个portal面相关联的?/span>

<!--[if !supportLists]-->²        <!--[endif]-->如果含有动作的目?/span>portletQ?/span>portal发请求给portlet容器L行相应的portlet的动作?/span>

<!--[if !supportLists]-->²        <!--[endif]-->portal通过portlet容器调用portletsQ去获得内容片断Q这个片断可以包含在portal面中?/span>

<!--[if !supportLists]-->²        <!--[endif]-->portal集合portlets的输出内容到1?/span>portal面中,q把面q回客户端?/span>

Portlet 产生标记片断?/span> Portal 通常l?/span> portlet 产生的标记片断加了标题,控制按钮和其他的装饰Q这个新的片断叫 portlet H口。然?/span> portal 整合 portlet H口到完整的文gQ?/span> portal 面?/span>

   <!--[if !vml]--><!--[endif]-->

Portlets q行?/span> portlet 容器内?/span> Portlet 容器接收 portlets 产生的内宏V典型的Q?/span> portlet 容器?/span> portlet 内容传到 portal ?/span> Portal server Ҏ portlet 产生的内容创?/span> portal 面Qƈ传送给客户端,由客L昄?/span>

lt;!--[if !vml]--><!--[endif]-->

 

       客户使用客户l端讉K portal 。在收到h后, portal 判断满h?/span> portlets 列表?/span> Portal 通过 portlet 容器Q调?/span> portlets ?/span> Portal ?/span> portlet 产生的片断创?/span> portal 面Q同时把面q回l用戗?/span>

<!--[if !vml]--><!--[endif]-->

用户可以Ҏ需要通过增删 Portlet 的方式配|他们的面。在 Windows 或?/span> XWindows H口E序中,H口有最大化和最化的窗口状态, portlet 也有H口状态?/span> H口状态是 portal 面I间数量的指C器Q它被赋值给 portlet 产生的内容中。当调用 portlet Q容器提供当前窗口状态给 portlet ?/span> Portlet 使用H口状态决定多信息需?/span> render ?/span> Portlets 能在处理 action hӞ~程的改变他们的H口状态?/span> Portlet 规范定义?/span> 3 U窗口状态, normal Q?/span> maximized ?/span> minimized ?/span>

Normal H口状?/span>

Normal H口状态表C?/span> portlet 要和其他?/span> portlet ׃n面。它也表C目标设备限制了昄能力。因此, portlet 限制输出的尺寸?/span>

MAXIMIZED H口状?/span>

Maximized H口状态表C?/span> portlet ?/span> portal 面唯一?/span> portlet Q或 portlet 相比与其他的 portlet 有更多的I间。当H口状态是 Maximized Ӟ portlet 产生更多的内宏V?/span>

Minimized H口状?/span>

?/span> portlet ?/span> minimized 状态,它将是最限度的输出Q或不输出?/span>

Portlet 模式指出 porlet 的功能。一般来_ portlet 执行不同dQ依靠当前执行的d的创Z同内宏V?/span> Portlet 模式告诉 portlet 他们执行什么Q务,生什么内宏V当调用 portlet Q容器提供当?/span> portlet 模式l?/span> portlet ?/span> Portlets 在处?/span> action h时能~程的改变他们的 portlet 模式?/span>

Portlet 有四U模式: view Q?/span> edit, help ?/span> config ?/span>

可用的模式根据用L角色受到限制。例如,匿名用户只能使用 view ?/span> help 模式Q而验证用户可以?/span> edit 模式?/span>

举例来说Q一个用户可以定制的股票信息PortletQ?span lang="EN-US">View模式允许用户查看股票列表Q?span lang="EN-US">Help模式提供l用户帮助手册,Edit模式允许用户定制自己x的股列表,?span lang="EN-US">Config模式允许理员改变股服务的一些配|?span lang="EN-US">

VIEW 模式  

View 模式期待的功能是产生标记反映当前的状态给portlet。例如,view模式?span lang="EN-US">portlet包含1个或多个框,用户可以操作或交互,或组成不需要Q何用户交互的的静态内宏V?span lang="EN-US">

Portlet 开发者需要通过覆盖doViewҎ实现view portlet模式的功能?span lang="EN-US">

EDIT 模式  

通过edit模式Q?span lang="EN-US">portlet提供内容?span lang="EN-US">logic让用L户化portlet的行为?span lang="EN-US">Edit模式包含一个或多个框,用户可以定位q输入他们的用户化数据?/span>  

典型的,edit模式Q将讄或修?span lang="EN-US">portlet的参数?span lang="EN-US">Portlet开发者需要通过覆盖doEditҎ实现edit portlet模式的功能?span lang="EN-US">

HELP 模式

当在help模式Q?span lang="EN-US">portlet提供portlet?span lang="EN-US">help信息。这?span lang="EN-US">help信息会是简单的框,用连贯的正文或上下文敏感的帮助阐明了整个portlet?span lang="EN-US">Portlet开发者需要通过覆盖doHelpҎ实现help portlet模式的功?span lang="EN-US">

CONFIG 模式

当在config模式Q管理员可以q行相应的操作?/span> Portlet开发者需要通过覆盖doConfigҎ实现view portlet模式的功能?/p>

因ؓPortletl承?span lang="EN-US">Servlet,所?span lang="EN-US">portlet可以打包?span lang="EN-US">war文g发布?span lang="EN-US">Portal容器中。管理员可以发布或者卸?span lang="EN-US">portlet。在一?span lang="EN-US">Portlet Web 应用中,一?span lang="EN-US">portlet描述文g用来描述portlet的属性和初始化信息。一?span lang="EN-US">Portlet定义包含一?span lang="EN-US">application portlet和多?span lang="EN-US">concrete portlet。一?span lang="EN-US">Application Portlet?span lang="EN-US">portlet容器中仅存在一个实例。一?span lang="EN-US">concrete Portlet实例一个用额外的数据实例化的portlet?span lang="EN-US">



Eric.Zhou 2007-01-23 09:42 发表评论
]]>什么是PortalQPortal用来做什么,Z么要用PortalQ?http://www.aygfsteel.com/rain1102/archive/2007/01/22/95373.htmlEric.ZhouEric.ZhouMon, 22 Jan 2007 09:09:00 GMThttp://www.aygfsteel.com/rain1102/archive/2007/01/22/95373.htmlhttp://www.aygfsteel.com/rain1102/comments/95373.htmlhttp://www.aygfsteel.com/rain1102/archive/2007/01/22/95373.html#Feedback1http://www.aygfsteel.com/rain1102/comments/commentRss/95373.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/95373.htmlPortalQ中文字意:门户。在如今的网l时代,q是一个容易让Z生敬畏的词。因?#8220;门户”QL联想到yahoo、sina 之类的大型门L点,它们因ؓ提供大量l合分类的信息且易于索而受Ch们的Ƣ迎?br />      许多企业和组l同样需要类似功能的门户技术。他们同旉要ؓ企业内部员工、外部客L体量w定制有“价?#8221;的企业信息,令企业倍感头痛的是Q一斚w是好些有“价?#8221;的企业信息获取ƈ不是一件轻杄事情Q信息部门需要整合来自不同的应用pȝQ不同数据源Q不同^台的无数各种cd的数据和资源Q另一斚wQ如何轻村֮C个ؓ所有的用户体量n定制的系l构架也不是一件容易的事情。传l技术整合这些资源的技术复杂度和成本都太高Q许多企业无法负担如此的投入?br />Protal 技术的出现Q带lh们解册c难题的曙光。Portal技术强调以用户Z心,重视程及整体工作效能,提供l一登陆界面Q实C息的集中讉K。Portal 创徏一个提供支持信息访问、传递,以及跨组l工作的集成化商务环境?br />      Protal它不仅要把企业的后端内容表现出来,它还要把企业U的后端的应用表现出来。对于企业来_Portalq不仅仅是发布几个新闻,它真正是Z处理业务用的。无论是企业客户q是员工Q只要登录进PortalQ将能够q入对应的业务系l,真正的去完成业务功能。那么这L话,对于企业来说QPortal 成Z个真正的“企业U?#8221;门户?br />      Z企业UPortal有IBM websphere PortalQSun ONE PortalQBea WebLogic Portal四大产品?/div>
 
从技术方面讲Q主要是体现Q?br />  个性化
  各种讑֤的支?br />  与后台系l的集成
  内容发布
  商务规则
  重中之重QؓSingle Sign On
 



Eric.Zhou 2007-01-22 17:09 发表评论
]]>
谈Portal技?http://www.aygfsteel.com/rain1102/archive/2007/01/22/95372.htmlEric.ZhouEric.ZhouMon, 22 Jan 2007 09:03:00 GMThttp://www.aygfsteel.com/rain1102/archive/2007/01/22/95372.htmlhttp://www.aygfsteel.com/rain1102/comments/95372.htmlhttp://www.aygfsteel.com/rain1102/archive/2007/01/22/95372.html#Feedback0http://www.aygfsteel.com/rain1102/comments/commentRss/95372.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/95372.html 1.               概述

Portal 一词最早是指门L站。简单讲 Portal 是一个重要的 Web 站点Q是一个联合的C֌Q?/span> ?/span> 作ؓ Web 应用E序?/span> ?/span> l一的访问点和信息系l的展现层,通过个性化“我的主页Q?/span> My Home Pages Q?#8221;Z同用h供个性化、统一d和内Ҏ合的服务。此?/span> Portal q提供了许多有h值的附加功能Q如安全性、搜索、协作和工作等。对最l用戯言Q?/span> Portal 是一个到所有计资源的单独讉K炏V业界认?/span> Portal 会成ؓ下一代的桌面Q在 Web 上ؓ各种客户备提供大量的电子商务应用?/span>

2.               发展历程

最初的 Portal 指的是像 Yahoo ?/span> Sina q样?/span> Internet 门户|站。这些门L站ؓ用户提供了检索、分cdcM My Yahoo! 的个性化定制服务Q目的是帮助用户更快地找到自己所需要的信息。这L Portal 被称?/span> Public Portal Q即面向公众的信息门戗?/span>

随着 Web 应用的发展,又出C Vertical Portal ?/span> Enterprise Information Portal ?/span> Vertical Portal 卌业门P目的是帮助某一行业的商业h员和技术h员找到自已需要的特定行业的商业信息和技术信息?/span> Enterprise Information Portal Q?/span> EIP Q?/span> 即企业信息门戗目的是帮助企业用户及员工通过l一入口扑ֈ分布于企业的各种信息。与 Public Portal 怼Q?/span> Vertical Portal ?/span> EIP 也同h供了索、分cd个性化定制服务?/span>

在以上三U?/span> Portal 中, EIP 包含的内Ҏ多,因此Q?/span> Portal 的发展过E也?/span> EIP 中得C最充分的体现。在 EIP 发展的最初阶D, Portal 实际上就是一些静态网,用户通过它获得企业提供的信息及服务。随着信息量的增加Q逐渐增加了搜索功能和内容发布功能Qƈ一定程度上实现了内容管理( Content Management Q;融入了工作流Q渠道(包括 Email Q的功能Q集成了更多应用Q如 ERP Q?/span> CRM Q?/span> SCM {;增加?/span> Web Services 引擎。下面ؓ Portal 在企业应用里的结构图 ( 摘自?/span> WebLogic Portal 8.1 相关资料 ) Q?/span>

图: Portal 在企业信息化中扮演的角色

3.               现状

Portal 技术与应用服务器紧密结合,加强了高U的个性化功能Q发展成为应用服务器之上的管理客戗员工和合作伙伴应用的一个框架?/span> Portal 作ؓ应用服务器之上的面向企业应用集成的品里的必不可的l成部分Q在企业信息化方面扮演着重要的角艌Ӏ各大应用服务器厂商也纷UhZ自己?/span> Portal 产品Q比较著名的?/span> IBM WebSphere Portal Server Q?/span> BEA WebLogic Portal Q?/span> Sun Portal Server Q同时也有同cd源品,?/span> Apache JetSpeed Q?/span> Liferay {?/span>

4.              

著名咨询公司 Gartner 不久?/span> 提出了应用^台套?/span> (Application Platform Suites Q简U?/span> APS) 的概c根?/span> Gartner 的定义, APS ׃批基软gl装而成Q这些基软g提供了创Z业应用所需的架构,臛_必须包括应用服务器?/span> Portal 产品和企业应用集成包{?/span> IDC 通过对众多企业信息主的调查发现Q他们最兛_的问题是如何实现企业应用的整合,以及如何构徏l一的企业信息门户^台等。厂商对企业用户的这些需求,仅仅提供一个应用服务器是远q不够的Q而需要提供一整套能够使企业有效和灉|地徏立信息系l的工具和Y件^収ͼ把应用开发^台和应用集成q_有机地结合v来?/span>

ȝ来看Q?/span> Portal 作ؓ未来企业信息用户q_的一个重要组Ӟ随着应用服务器的发展Q也得到长的发展和进步?/span>



Eric.Zhou 2007-01-22 17:03 发表评论
]]>
վ֩ģ壺 Ϫ| | ī| ̩˳| ²| | | | Ϫ| ٽ| Ϫ| | | ԭ| IJ| ˮ| Ѯ| | | | | | | | ƽ| | | | Ԫ| ӥ̶| | | ³| ½| | ¬| | ϴ| | | |