`
zhuliyy1983
  • 浏览: 64061 次
  • 来自: ...
社区版块
存档分类
最新评论

Eclipse下Portlet应用开发(JSR168)

阅读更多
开发环境部署
配置开发环境
             Step1 : 解压eclipse-SDK-3.2-win32.zip
           Step2 : 解压org.eclipsefan.pluto.ui_1.0.0.zip , 并将其拷入eclipse\plugins目录
下, 如下: eclipse\plugins\org.eclipsefan.pluto.ui_1.0.0\
\Icon
\Lib
\Source
\Webapp
下载地址:
Pluto-plugin
http://prdownloads.sourceforge.n ... _1.0.0.zip?download
           Step3 : 解压tomat5.5到一目录. 并且配置好Tomcat服务器.

配置完成.

a.      使用Portlet Wizard来创建Portal
1) 选择File > New > Project… > Portal > Pluto Portal application, 单击Next, 如图:


2) 指定Project名称 (如图1.3), 这里使用pluto, 然后单击Next


3) 指定Tomcat路径, 单击Finish. 之后eclipse会将Pluto安装到tomcat上,并且自动配置好环境


b.创建Portlets Application


b.      最后生成的工程如图并通过portlet.xml生成/更新web.xml


4.portlet技术验证。
4. 1doView(…),doEdit(…) , doHelp(…)
与Servlet非常类似, Portlet扩展自GenericPortlet .
import javax.portlet.*;
public class Textportlet extends GenericPortlet
其三个方法对应了Portlet标题栏中的三个链接(View, Edit, Help)所执行的功能.
public void doView(…)
public void doEdit(…)
public void doHelp(…)
三个方法分别调用了三个JSP文件, 用以生成Portlet fragment, 同样也可以调用Servlet产生Portlet fragment, 或者不调用JSP或者Servlet,直接在方法中得到PrintWriter,用最简单的pw.println(…)打印出内容,类似Servlet,如下:
PrintWriter pw=renderResponse.getWriter();
pw.println("Hello, Portlet!");
与Servlet应用类似,也可以使用getInitParameter(String s)方法,得到配置文件中Portlet的初始值. 只不过Servlet使用web.xml,而Portlet 使用portlet.xml文件.

4.2 Portal的设定
Tomcat 中Webapps目录: 其中pluto是portal所在目录, 用以配置Portal Page的两个文件分别是pageregistry.xml和portletentityregistry.xml

其中pageregistry.xml用来在Portal中配置Portal Page,
而portletentityregistry.xml 用来在Page中配置Portlet.



4.2.1配置同一行中的两个Portlet
<?xml version="1.0"?>
<portal>
<fragment name="navigation" class="org.apache.pluto.portalImpl.aggregation.navigation.TabNavigation">
 </fragment>
 <fragment name="sample" type="page">
   <navigation>
      <title>Sample Portlet</title>
         <description>Basic page to show the simple portlet</description>
    </navigation>
<fragment name="row" type="row">
<fragment name="col1" type="column">
<fragment name="p1" type="portlet">
                   <property name="portlet" value="1.1"/>
                </fragment>
<fragment name="p2" type="portlet">
                    <property name="portlet" value="1.1"/>
                </fragment>
 
            </fragment>
        </fragment>
    </fragment>
</portal>




4.2.2配置同一列中的两个Portlet

<?xml version="1.0"?>
<portal>
 <fragment name="navigation" class="org.apache.pluto.portalImpl.aggregation.navigation.TabNavigation">
</fragment>
<fragment name="sample" type="page">
 <navigation>
      <title>Sample Portlet</title>
          <description>Basic page to show the simple portlet</description>
        </navigation>
<fragment name="row1" type="row">
<fragment name="col1" type="column">
 <fragment name="p1" type="portlet">
                    <property name="portlet" value="1.1"/>
                </fragment>
            </fragment>
        </fragment>
        <fragment name="row2" type="row">
            <fragment name="col1" type="column">
                <fragment name="p1" type="portlet">
                    <property name="portlet" value="1.1"/>
                </fragment>
            </fragment>
        </fragment>
    </fragment>
</portal>




4.3 Portlet Modes 和 Portlet window states
·          Portlet模式(Portlet Mode)是Portlet提供的用以区分 Portlet所执行功能的一个概念.通常情况下其拥有以下几种模式:
1. VIEW
2. EDIT
3. HELP
以上各模式分别对应GenericPortlet中的 doView(…) , doEdit(…) , doHelp(…) 方法,分别调用以上方法来产生各个模式中的Fragment内容. 非常类似Servlet中的doGet(…) , doPost(…) 方法,都是Helper方法, 但是概念不同.
Portlet状态(Portlet window states)提供了对于Portlet窗口的控制功能 , 其中有如下三种最基本的状态:
1.      Normal
2.      Maximized
3.      Minimized
Portlet开发人员可以在处理ActionRequest (以后的章节将讲述其概念) 时使用代码实现Portlet模式, 及其Portlet状态的转变.
注: 只能在处理ActionRequest时改变Portlet Modes和Portlet Window state       
以上Portlet Modes和Portlet window states都可以配置成custom Portlet mode和custom portlet window state. 不同的地方在于对于Mode来说, 定制化的Mode需要对GenericPortlet的doDispatch方法进行重写(Overriding), 因为GenericPortlet类通过render方法按照不同的Portlet Mode将request分别分发给doView,doEdit,doHelp等辅助方法. 如果需要定制的Mode , 必须重写doDispatch 方法. 同时如果使用Portal提供商的Portlet Modes 或者 Portlet window States,都必须在部署描述中添加相关的设定

4.4 PortletConfig 对象
·          PortletConfig对象
和ServletConfig对象类似, PortletConfig对象提供Portlet初始的所需的参数及其对PortletContext对象存取提供相关方法.
和ServletConfig不同处在于, PortletConfig对象提供对Portlet Title Bar资源的I18N支持,我们可以设定不同的Resource Bundle文件用以提供多语言的支持, 如下portlet.xml文件:
… …
                            <portlet-info>
                                          <title>PortletConfig Example</title>
                                          <short-title>PortletConfig</short-title>
                                          <keywords>PortletConfig</keywords>
</portlet-info>
… …
以上Portlet描述文件中的设置用于显示Portlet的Title Bar文字, 同样也可以使用Resource Bundle用以显示Title Bar文字, 如下:
  … …
<resource-bundle>
portlets.portletconfig.portletconfigexample
</resource-bundle>
                            … …


4.5 Portlet 的Request和Response对象
Portlet的Request 对象
Portlet中的Request与Servlet的Request一样接受Client端发送的Request, 但是与Servlet不同, Portlet的Request分为Action Request及Render Request两种类型,因此Portlet接口中定义了两种方法用来处理不同的Request. 分别是processAction(ActionRequest request,ActionResponse response) 和render(RenderRequest request,RenderResponse response),分别用以处理Action Request和Render Request. 某种意义上来讲,render方法类似Servlet中的service方法,doView,doEdit,doHelp方法又类似doGet,doPost方法,如下图:

RenderRequest和ActionRequest有什么不同呢?
对于Portlet来说PortletRequest分为ActionRequest和RenderRequest两种,分别是由renderURL和actionURL来触发的.可以这样理解, renderURL是actionURL的一种优化形式.Portlet开发过程中尽可能使用renderURL而避免使用actionURL. actionURL适用于有确实的Action(行为)的情况下. 比如说, form表单的递交. Persistent状态的改变,session的操作,preference的修改,这种情况下使用actionURL,而不使用renderURL, renderURL通常用来操作portlet内容的导航.
a. 使用actionURL:
<%
PortletURL pu=renderResponse.createActionURL();
pu.setParameter("ACTION","LOGIN");

%>
<form name="usrfrm" method="post" action="<%=pu.toString()%>">
注: form表单递交时,使用HTTP post方法,而不用get方法.因为某些Portal/Portlet Container的实现将内部状态编码到URL的Query字符串中.
使用renderURL:
<%
PortletURL pu=renderResponse.createRenderURL();
pu.setParameter("PAGE",Number);

%>
<a href=”<%=pu%>”>下一页</a>
b. renderURL和actionURL的处理方式有什么不同?
当客户端request是由一个renderURL触发时,Portlet/Portlet Container会调用Portal页面中所有Portlet的render方法.如下:
renderURL

/       |         \
                    render   render    render        


而当客户端request一个actionURL触发时, Portlet/Portlet Container会先调用目标Portlet的processAction()方法,当processAction方法处理完毕后,再分别调用Portal页面中所有Portlet的render方法.如下:
                                       actionURL
                                                          |
                                                                  processAction
                                                                  /        |      \
                                                          render     render      render
由于以上原因,所以使用renderURL要比使用actionURL的performance来的好
c. RenderRequest和ActionRequest的parameter参数作用范围有什么不同?
当客户端request一个actionURL触发时,比如一个form表单的提交,所有的Parameter的get操作必须在processAction方法中进行. 例如:
JSP的form表单页面:
<%
PortletURL pu=renderResponse.createActionURL();
pu.setParameter("ACTION","LOGIN");

%>
<form name="usrfrm" method="post" action="<%=pu.toString()%>">


Portlet的处理:
public void processAction(ActionRequest req,ActionResponse res){
    String str=req.getParameter(“ACTION”);
    //response.setRenderParameter("ACTION",action);
}

public void doView(ActionRequest req,ActionResponse res){
    String str=req.getParameter(“ACTION”);
}
如上processAction方法中,getParamter方法将能成功得到表单中的参数ACTION所对应的值,因为我们知道,当目标portlet的processAction方法运行完后,Portlet Container将调用Portal页面中所有Portlet的render方法.但是实际上doView方法中使用getParameter不会得到任何值.但是如果把processAction方法中注释了的一行uncomment的话,你就可以在doView方法中的得到参数ACTION对应的值.这说明action request的参数,render方法中不可以直接取到.必须使用了setRenderParameter方法,再次传递一次.
l         A case study
在这部分中,我们来做一个简单的Portlet, 实现一个简单的Form submit功能. 以下是代码片段
JSP(view_portletrequest.jsp.jsp):
… …
<!-- Use PortletURL Object//-->
<%
PortletURL pu1=renderResponse.createActionURL();
pu1.setParameter("ACTION","Use PortletURL Object");
pu1.setPortletMode(PortletMode.VIEW);
%>
<table width=100% border=0>
<TR><TD>1. Use PortletURL object to get an ActionURL and set current portlet mode to view</TD></TR>
<tr><td>
<form name="usrfrm" method="post" action="<%=pu1.toString()%>">
<input type=submit name=bt1 value="GetActionByJava">
</form>
<tr><td>
</table>
              … …
注: 处理完form后将会将PortletMode设定为VIEW.
以上代码使用了actionURL因为是form表单的递交. 详细请参考Portlet的Request 对象部分. 或者也可以使用Tag. 它同样也可以生成一个Portlet的URL, 如下:
… …
<!-- Use Portlet Tag //-->
<portlet:actionURL windowState="maximized" portletMode="edit" var="pu2">
<portlet:param name="ACTION" value="Use Portlet Tag"/>
</portlet:actionURL>
<BR>
<table width=100% border=0>
<TR><TD>2. Use Portlet Tag to get a ActionURL and and set current portlet mode to edit</TD></TR>
<tr><td>
<form name="usrfrm" method="post" action="<%=pu2%>">
              <input type=submit name=bt2 value="GetActionByTag">
</form>
<tr><td>
</table>
… …
注: 它在处理完form后将会将PortletMode设定为EDIT,并且Window state会为最大化.
Portlet(PortletRequestExample.java):
… …
        public void processAction(ActionRequest request, ActionResponse response)
                            throws PortletException, IOException
              {
                            String action=request.getParameter("ACTION");
                            System.out.println("ACTION" + action);
                            if(action==null){
                                          action="";
                            }
                            response.setRenderParameter("ACTION",action);
}
… …
JSP(view_portletrequest.jsp)
              … …
              <%
String getaction="";
if(request.getParameter("ACTION")!=null){
getaction=request.getParameter("ACTION");
}
%>
<B>ACTION:<%=getaction%></B>
              … …
JSP(edit_portletrequest.jsp.jsp)
… …
<%
String getaction="";
if(request.getParameter("ACTION")!=null){
getaction=request.getParameter("ACTION");
}
%>
<B>ACTION:<%=getaction%></B>
… …
将以上源代码编译后, 再通过Eclipse生成/更新Portlet的web.xml后, 将所有配置及相关文件部署后, 启动Tomcat
在Browser中加载如下页面: Http://localhost:8080/pluto/portal , 可以看到如下的页面


单击PortletRequest Example Page后可以看到如下Portlet 页面


单击 GetActionByJava 后


单击 GetActionByTag 后, 将跳转到edit modes


4.5.1 Portlet的Response 对象.
与Request对象类似,Response对象也有两种:分别是ActionResponse和RenderResponse, 分别封装了对应ActionRequest和RenderRequest对象返回的所有信息。例如,重定向,windows state,portlet mode等的信息。其中他们的父类,PortletResponse拥有setProperty和addProperty方法,用以传递提供商指定的信息给portal/portlet container
1。ActionResponse和RenderResponse有什么不同?
ActionResonse可以用来处理以下相关功能:
1) 重定向
sendRedirect方法用来进行帮助portal/portlet-container进行头信息,及其内容的设定,并且将URL重定向到用户指定的页面。
2) 改变windows state, portlet mode ,我们在以前章节中介绍了window state 和 portlet mode概念.
3) 传递Parameter参数到RenderRequest中去,如上面request部分中用到的例子。
RenderResponse用来提供如下功能(和Servlet中的Response更相似):
1) 设置ContentType
2) 得到Output Stream and Writer对象,用来产生页面内容
3) Buffering
4) 设定Portlet的Title , 但必须先于portlet的输出递交前来调用,否则将会被忽略。


5.资源
Pluto
http://jakarta.apache.org/pluto
Pluto Mail List
http://news.gmane.org/gmane.comp.jakarta.pluto.user
WSRP Spec1.0
http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=wsrp
Apache的WSRP实现
http://ws.apache.org/wsrp4j/
Apache’s Portal, JetSpeed:
http://jakarta.apache.org/jetspeed/site/index.html
JSR 168:
http://www.jcp.org/en/jsr/detail?id=168
分享到:
评论
1 楼 hawk315 2008-11-10  
你这个上面是不是有步骤地遗失?
b.创建Portlets Application

b.最后生成的工程如图并通过portlet.xml生成/更新web.xml
接不上,
可以补充一下吗?

相关推荐

    使用jsr168标准开发portlet

    标题中的"使用jsr168标准开发portlet"是指基于Java Specification Request (JSR) 168标准来创建portlet应用程序。JSR 168是Java社区进程(Java Community Process)提出的一个标准,旨在规范portlet在企业级portlet...

    JSR 168 Portlet Project Creator 插件jar包

    1. **jsr168plugin.jar**:这是核心插件文件,包含了实现JSR 168 Portlet Project Creator功能的类和方法。开发者可以通过安装此插件,使Eclipse具备创建JSR 168 portlet项目的功能。 2. **plugin.xml**:这是...

    在JetSpeed中开发portlet项目

    在JetSpeed中开发portlet项目是一项涉及Java Web技术的重要工作,主要基于JSR168(portlet规范1.0)标准。JetSpeed是一个开源的企业门户服务器,它支持portlet的开发和集成,提供了一个灵活且可扩展的框架来构建企业...

    portlet开发高层设计

    - **开发环境**:开发者需要熟悉Java开发工具,如Eclipse,并且需要配置支持JSR168的portlet容器,如Liferay或Websphere Portal Server。 1.3. **缩略语、名词定义** - Portlet:portlet应用程序组件。 - JSR168...

    portlet开发以及相应的工具包,如何与tomcat整合

    portlet遵循JSR 286(Portlet 2.0)或早期的JSR 168标准,由Java Community Process定义。这些标准提供了portlet生命周期、渲染、事件处理和通信的规范。 开发portlet时,开发者通常会使用一些特定的工具包,如...

    JSR168 PORLET标准手册汉化整理

    总的来说,JSR168标准为portlet开发提供了一套统一的规范,使得portlet能够在不同的门户平台下运行,促进了企业信息化的集成与扩展。通过对JSR168标准的理解和应用,开发者能够构建出更加灵活、高效的企业级Web应用...

    portlet 开发

    Portlet开发是构建企业级Web应用程序的一种方法,特别是在Java平台上,它被广泛应用于构建可重用、可组合的Web组件。Portlet技术允许开发者创建独立的功能模块,这些模块可以集成到更大的Web门户中,为用户提供个性...

    portlet入门介绍

    Portlet是Java Portlet API(JSR-168和JSR-286)定义的一种标准组件模型,用于构建可插入到门户中的交互式小应用程序。一个portlet可以看作是门户中的一个小窗口,用户可以通过门户页面上的portlet来访问不同的功能...

    struts-portlet 开发

    1. **portlet.xml**:这是JSR168 Portlet描述符文件,位于`src/main/webapp/WEB-INF/portlet.xml`中。该文件定义了Portlet的基本属性和行为,包括名称、描述、版本号、初始化参数等。例如: ```xml &lt;portlet-app...

    Struts2 + Pluto + portletV1.0(JSR 168) CRUD Demo

    Struts2 + Pluto + Portlet V1.0 (JSR 168) CRUD Demo 是一个基于Java技术的Web应用程序示例,展示了如何在portlet环境下实现CRUD(创建、读取、更新、删除)操作。这个DEMO的核心是将Struts2作为MVC框架,Pluto作为...

    Eclipse中开发Jetspeed详细的下载、安装、创建portlet Demo示例教程

    和`com.sun.jsr168.portlet.plugin_1.0.0.jar`,这些组件可以在Eclipse-PortalPack的开发页面下载。 接下来,遵循以下安装步骤: 1. 将下载的Jetspeed安装文件存放在指定目录,例如C:\download。 2. 打开命令行,...

    portlet开发资料.rar

    - 遵循JSR168的portlet可以跨多个门户平台运行,提高了开发的可移植性。 3. **portlet开发流程**: - 创建portlet项目:通常使用IDE如Eclipse,选择portlet插件来创建项目结构。 - 实现portlet接口:主要涉及`...

    Portlet开发技术解决方案.pdf

    - **在Eclipse 3.3 (lomboz)中开发**:介绍如何在Eclipse环境下进行Portlet开发的具体步骤。 - **在MyEclipse 6.6中开发**:介绍如何在MyEclipse环境下进行Portlet开发的具体步骤。 #### 五、Liferay Portlet开发...

    Jetspeed安装与portlet开发的详细步骤

    - 打开Eclipse,选择`File -&gt; New -&gt; Other -&gt; JSR168 Portlet Project Creator -&gt; JSR168 Portlet Project Creator`。 - 填写项目名称和其他相关信息。 - 点击`Next`,配置portlet的属性。 **3. 编写Portlet...

    Portlet Plugin for Eclipse-开源

    一组插件,用于向Eclipse添加Portlet(JSR 168和JSR 286)支持。 它包括针对JSR 168和JSR 286的API,XSD和TLD。 它计划支持Portlet描述符的编辑器和向导来生成新的项目和Portlet。

    Jetspeed安装与portlet开发.pdf

    ### Jetspeed安装与Portlet开发知识点详解 #### 一、概述 ... - **Portlet容器**:从[https://eclipse-portalpack.dev.java.net/files/documents/6568/51760/com.sun.jsr168.portlet.plugin_1.0.0.jar]...

    eclipse搭建JetSpeed与开发案例详细讲解(step by step)

    2. **创建项目**: 启动 Eclipse IDE,依次选择 `New -&gt; Other -&gt; JSR168 Portlet Project Creator`,然后按照向导提示完成项目创建。 3. **编写代码**: 根据需求编写 Portlet 的功能代码。 4. **部署应用**: 将编写...

    Portlet

    6. **portlet标准**:有两个主要的portlet规范定义了portlet的行为:JSR 168(portlet 1.0)和JSR 286(portlet 2.0)。这两个标准由Java Community Process发布,提供了portlet开发的统一接口。最新的标准是JSR 362...

Global site tag (gtag.js) - Google Analytics