Java Portlets 介紹

jopen 11年前發布 | 131K 次閱讀 Java 門戶平臺Portal

  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.");
      

      } }</pre>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

                       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></pre>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" ";
    <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></pre></li>

  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  這個的話,
  8.     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)  
    會報如上錯誤, 所以不能使用這個方式判斷是否安裝成功。
  9. </ol> 來自:
    http://blog.csdn.net/oscar999/article/details/8282089

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!