Java Portlets 介绍

  1.  什么是Portlets? - Web 组件
    Portlets是一种Web组件-就像servlets-是专为将合成页面里的内容聚集在一起而设计的。通常请求一个portal页面会引发多个portlets被调用。每个portlet都会生成标记段,并与别的portlets生成的标记段组合在一起嵌入到portal页面的标记内。
    以上是JSR 168 的标准解释。
  2. JSR 168 是什么? - 标准
    各IT厂商和开源组织开发各自的Portlet,IBM公司发布了WebSphere Portal Server 1.2/2.1/4.x/5.x, Apache Software Foundation推出了JetSpeed、BEA、Oracle、SAP、Sun也推出了各自的Portal服务器。这些Portal服务器各自提供不同的Java API给应用系统开发商开发Portlet,应用系统开发人员不得不为不同的Portal服务器使用互不通用的API开发功能相同的Portlet.
    这个时候就出现了标准
    2003年10月7日,Java Community Process(JCP)发布了JSR168: Portlet Specification 1.0的最终版本。该规范包含如下内容(参见 参考3)
    定义了portlet运行环境 - portlet容器
    定义了portlet容器和portlet之间的API
    提供了portlet存储持久性和非持久性数据的机制
    提供了portlet包含servlet和JSP的机制
    定义了portlet打包,方便部署
    保证了portlet在JSR 168门户中的二进制移植
    能够以WSRP协议把JSR 168 portlet作为远程portlet运行。

    官方地址:
    http://jcp.org/aboutJava/communityprocess/final/jsr168/index.html
  3. Pluto是什么? -- 是容器
    Apache Pluto 是 JSR-168 和JSR-268的参考实现(pluto 2.0基于JSR-268(Java Portlet Specification V2.0),之前的版本基于JSR-168(Java Portlet Specification V1.0)),是实现了 Portlet API 的 Portlet 容器,充当Portlet 的运行时环境,与 Web 应用服务器的 Servlet 容器的运行时环境支持 Servlet 的情形非常相似。根据Java Portlet Specification,Portlet 容器是Servlet 容器的扩展,并且需要servlet 2.3 以上支持。
        Apache Pluto 常作为验证portlet的容器,不作为产品生产的容器,目前比较流行的产品级容器有Liferay,eXo,Jetspeed,当然还有老大哥级别的Bea和IBM都有自己的portlet容器产品
    官方地址:
    http://www.apache.org/dyn/closer.cgi/portals/pluto/

  4. 一个超级简单的基于pluto ,portlet 开发例子
    本地开发环境
    1) java1.5
    1) eclipse3.7
    2) pluto-current-bundle.zip (基于Tomcat5的, 相当于一个tomcat服务器)
    下载地址: http://archive.apache.org/dist/portals/pluto/pluto-current-bundle.zip

    开发步骤:
    1) 解压下载的 pluto 的Zip  文件。(目录结构基本上和Tomcat的安装结构类似。)
    1) 在Eclipse下新建 Dynamic Web Project--HelloPortal。
        将 pluto目录下shared\lib 和 webapps\pluto\WEB-INF\lib 下面的jar  文件拷入项目 WEB-INF\lib 中
    2) 在java SRC下新建
    HelloWorldPortlet.java
    /**
     * @Title:HelloWorldPortlet.java
     * @package: com.tootuu.portlet
     * @Description: 
     * @author: oscar999
     * @date: 2012-12-11
     * @version V1.0
     */
    package com.tootuu.portlet;
    
    import java.io.IOException;
    
    import javax.portlet.GenericPortlet;
    import javax.portlet.PortletException;
    import javax.portlet.RenderRequest;
    import javax.portlet.RenderResponse;
    
    /**
     * @author oscar999
     * 
     */
    public class HelloWorldPortlet extends GenericPortlet {
    	
    	@Override	
    	protected void doView(RenderRequest request, RenderResponse response)
    			throws PortletException, IOException {
            response.setContentType("text/html");
            response.getWriter().println("Hello, This is the portal.");
    	}
    }
    

    3) 在 WEB-INF 下新建portlet.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <portlet-app
        xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
        version="1.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd
                            http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd">
        <portlet>
            <description>Hello World Portlet Description</description>
            <portlet-name>HelloWorldPortlet</portlet-name>
            <display-name>Hello World</display-name>
            <portlet-class>com.tootuu.portlet.HelloWorldPortlet</portlet-class>
            <expiration-cache>-1</expiration-cache>
            <supports>
                <mime-type>text/html</mime-type>
                <portlet-mode>view</portlet-mode>
            </supports>
            <supported-locale>en</supported-locale>
            <portlet-info>
            	<title>Hello World Portlet</title>
            	<short-title>Hello Portlet</short-title>
            	<keywords>Hello World</keywords>
            </portlet-info>
        </portlet>
        
    </portlet-app>


    4) 在 WEB-INF 下修改 web.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
    <web-app id="WebApp_ID">
      <display-name>HelloPortal</display-name>
        <servlet>
            <servlet-name>HelloWorldPortlet</servlet-name>
            <servlet-class>org.apache.pluto.core.PortletServlet</servlet-class>
            <init-param>
                <param-name>portlet-name</param-name>
                <param-value>HelloWorldPortlet</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
      
      <servlet-mapping>
        <servlet-name>HelloWorldPortlet</servlet-name>
        <url-pattern>/PlutoInvoker/HelloWorldPortlet</url-pattern>
      </servlet-mapping>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
    </web-app>

  5. 在eclipse 把project 打包成 war 档。(打包时选择的jar 档和 pluto\webapps\testsuite\WEB-INF\lib中的一致)
    将war 档放入pluto\webapps中。

  6. 到pluto/bin目录下运行 startup.bat, 启动tomcat
    进入 : http://localhost:8080/pluto/portal   使用tomcat\tomcat 登录
    到 Pluto Admin目录下, 在Portlets Applications 下面就能看到 HelloPortal了。
    新建一个Page , 加入此Application, 就能看到“Hello, This is the portal ” 出现在这个页面中了。
  7.  注意:
    如果直接访问:  http://localhost:8080/HelloPortal/PlutoInvoker/HelloWorldPortlet  这个的话,
    java.lang.NullPointerException
    	org.apache.pluto.core.PortletServlet.dispatch(PortletServlet.java:190)
    	org.apache.pluto.core.PortletServlet.doGet(PortletServlet.java:139)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    
    会报如上错误, 所以不能使用这个方式判断是否安装成功。


你可能感兴趣的:(Java Portlets 介绍)