apache上2.0的开发文档很少,看了前人写的2.0的开发示例,以及pluto2.0.1自带的例子,完成了第一个开发例子。
相关参考资料:
IBM上的例子,以及 pluto2.0.1自带的pluto-testsuite;
第一步:
首先配置Eclipse中的tomcat:
注意点: 在server窗口配置中, Server Locations 中选择 Use Tomcat Installation,Deploy Path选择 ${TOMCAT_HOME}\webapps,必须设定 Deploy Path 为 Tomcat 安装目录下的 webapps 目录,否则使用 Eclipse 启动 Tomcat 后,Pluto 不能加载进来。(详见IBM例子的tomcat配置说明)。
第二步:创建portlet应用:
1. 首先在Eclipse中,建立一个Dynamic Web Project
-- 注意创建Project时候,“dynamic web module version”:选用的versin,必须要和自己配置的tomcat版本相适应。自己在开发的时候,为了调整tomcat,有时候用了tomcat5.5,可是工程配置不进来,原因就是在创建工程的时候选择了2.5版本,而tomcat5.5只支持2.4的版本
2. 在 META-INF 下新建 context.xml 文件
<Context crossContext="true" />
该文件为 Tomcat 的特有配置文件,根据 Pluto 的要求,该 Web 工程的上下文应该可以被其它 JavaEE 程序访问,所以 crossContext 参数设置为 true。
3. 在 WEB-INF 下新建 portlet.xml 文件
<?xml version="1.0" encoding="UTF-8"?> <portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" version="2.0"> <!-- 在该位置填写portlet描述内容,在后面开发好的portlet要加入进来 --> </portlet-app>
4. 新增Java类:
在IBM的说明中,是实现了 javax.portlet.Portlet 和 javax.portlet.ResourceServingPortlet 接口,在新下载的pluto test-suite中,是继承了GenericPortlet
import javax.portlet.GenericPortlet; public class TestPortlet extends GenericPortlet { ... public void serveResource(ResourceRequest request, ResourceResponse response) throws PortletException, IOException { getPortletContext().getRequestDispatcher("自己的页面").include(request, response); } @Override public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException { PortletRequestDispatcher dispatcher = getPortletContext().getRequestDispatcher(显示的页面); dispatcher.include(request, response); } }
在这个类中的实现也和IBM的说明不同
5. 增加2个页面:
portlet 呈现阶段所显示的 jsp 文件 TestPortletView.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib prefix="portlet" uri="http://java.sun.com/portlet_2_0"%> <portlet:defineObjects /> <table> <tr> <td><h1>Test portlet page.</h1></td> </tr> <tr> <td><a href="<portlet:resourceURL/>">Click me to request Resource URL</a></td> </tr> </table>
portlet 资源服务所请求的 jsp 文件 TestPortletResource.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib prefix="portlet" uri="http://java.sun.com/portlet_2_0"%> <portlet:defineObjects /> <table> <tr> <td><h1>Test portlet resource page.</h1></td> </tr> </table>
6.编辑 portlet.xml 文件, 为 TestPortlet 增加一个 portlet 定义片断,该 TestPortlet 仅支持 View 模式
<portlet> <portlet-name>TestPortlet</portlet-name> <display-name>TestPortlet</display-name> <portlet-class>com.ibm.samples.jsr286.portlets.TestPortlet</portlet-class> <supports> <mime-type>text/html</mime-type> <portlet-mode>VIEW</portlet-mode> </supports> <portlet-info> <title>TestPortlet</title> </portlet-info> </portlet>
7. 编辑 web.xml 文件,增加 Pluto 所需的 servlet 定义及映射。读者请注意,该定义为 Pluto 2.0 Portlet 容器所需,不属于 JSR 286 标准的要求。
<servlet> <servlet-name>TestPortlet</servlet-name> <servlet-class> <!-- IBM例子中的类: org.apache.pluto.core.PortletServlet --> <!-- 在pluto2.0.1 test-suite中的类:--> org.apache.pluto.container.driver.PortletServlet </servlet-class> <init-param> <param-name>portlet-name</param-name> <param-value>TestPortlet</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>TestPortlet</servlet-name> <url-pattern>/PlutoInvoker/TestPortlet</url-pattern> </servlet-mapping>
8. 将工程加到server中,运行server,余下的部分,看一下IBM示例中的说明操作即可
在 Eclipse 的 Servers 视图中,右键单击 Tomcat 服务器,点击 Add and Remove Projects,在弹出的对话框中将 jsr286portlets 项目添加到右侧栏目中,点击 Finish 确认,如图13:
在 Servers 视图中启动服务器,Console 视图中输出 Tomcat 启动信息。
浏览器中输入相应 url 访问 pluto 的 portal 页面,登录,点击 Pluto Admin 导航栏,如图14:
使用该工具新建一个页面,如 "Test JSR 286 Portlet Page"。导航栏中马上新增一项 "Test JSR 286 Portlet Page",点击进入该页面可以见到目前该页面没有内容。
选择 jsr286portlets 应用程序中的 Portlet TestPortlet,选择上一步新建的页面,点击 Add Portlet 按钮,将 TestPortlet 布局到 "Test JSR 286 Portlet Page"页面。如图 15:
进入"Test JSR 286 Portlet Page"页面,该页面新增了一个 Portlet TestPortlet,如图16:
注意到上图 portlet 的标题显示为 null, 这是由于 pluto 2.0 目前处于开发阶段,存在一些 bug,读者可不必理会。
点击超链接,进入所请求的资源页面,如图 17:
观察此页面,发现此页面只显示了 TestPortletResource.jsp 的内容,未经过 Portal 容器的修饰, 和直接请求一个 Servlet 或者 JSP 页面的效果是一样的。这就是 JSR 286 Portlet 资源服务的主要特性。对照此示例,