终于成功地在Pluto中部署了一个Portlet了
生活随笔
收集整理的這篇文章主要介紹了
终于成功地在Pluto中部署了一个Portlet了
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
開源的工程就是懶,Apache的Pluto是一個簡單的符合JSR168規范的Portlets容器,網站上寥寥數筆,很多東西都沒說清楚,連個API參考文檔都找不到。甚至到現在從源代碼來編譯也沒成功!只好用網站上提供的二進制版本(因為Pluto是借助Tomcat服務器的,這樣原來的安裝的一個Tomcat只好停掉)。Pluto本身不足以用來創建門戶(Portal)網站,但可以用來測試自己的Portlet。
由于項目要求,需要做一個Portlet放在門戶網站來展示我們的功能方便演示。雖然感覺并不復雜,但畢竟沒做過,一切都得從頭學起。有道是萬事開頭難,雖然IBM又有一篇入門文章——“Hello World,一個簡單的JSR 168 portlet”,從該網頁下載了一個HelloWorld.zip,但涉及文件和操作過多,使人不知道到底自己創建一個Portlet要從何做起。經過了一番摸索,終于成功地在Pluto中部署了這個Portlet,下面以這個HelloWorld為例,說說另外要注意的重點,希望對和我一樣的初學者有所幫助(可以先下載該文件,按需要解壓出相應文件和目錄):
1、對于初學者,使用Deploy很容易失敗,各種原因都會導致部署不成功(比如這個HelloWorld中說的部署過程,因為jar文件與pluto1.0.1-rc2不一致就會出現很多類沒有找到的錯誤,使部署過程失敗)。所以我們直接在<pluto_home>\webapps目錄中創建一個常規的Web應用程序,比如叫HelloWorld目錄,里面還要有WEB-INF目錄,該目錄下還有web.xml和portlet.xml。
web.xml:
<?xml?version="1.0"?encoding="UTF-8"?>
<!DOCTYPE?web-app?PUBLIC?"-//Sun?Microsystems,?Inc.//DTD?Web?Application?2.3//EN"
?????????????????????????"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app?id="WebApp">
????<display-name>HelloWorld?Web?Application</display-name>
????<servlet>
????????<servlet-name>HelloWorldPortlet</servlet-name>
????????<display-name>HelloWorldPortlet?Wrapper</display-name>
????????<description>Automated?generated?Portlet?Wrapper</description>
????????<servlet-class>org.apache.pluto.core.PortletServlet</servlet-class>
????????<init-param>
????????????<param-name>portlet-guid</param-name>
????????????<param-value>HelloWorld.HelloWorldPortlet</param-value>
????????</init-param>
????????<init-param>
????????????<param-name>portlet-class</param-name>
????????????<param-value>com.ibm.spc.HelloWorldPortlet</param-value>
????????</init-param>
????</servlet>
????<servlet-mapping>
????????<servlet-name>HelloWorldPortlet</servlet-name>
????????<url-pattern>/HelloWorldPortlet/*</url-pattern>
????</servlet-mapping>
????<taglib>
????????<taglib-uri>http://java.sun.com/portlet</taglib-uri>
????????<taglib-location>/WEB-INF/tld/portlet.tld</taglib-location>
????</taglib>
????<taglib>
????????<taglib-uri>http://java.sun.com/portlet</taglib-uri>
????????<taglib-location>/WEB-INF/tld/portlet.tld</taglib-location>
????</taglib>
</web-app>
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>A?simple?HelloWorld?portlet</description>
????????<description?xml:lang="en">A?simple?HelloWorld?portlet</description>
????????<portlet-name>HelloWorldPortlet</portlet-name>
????????<display-name>HelloWorld?portlet</display-name>
????????<display-name?xml:lang="en">HelloWorld?portlet</display-name>
????????<portlet-class>com.ibm.spc.HelloWorldPortlet</portlet-class>
????????<init-param>
????????????<name>wps.markup</name>
????????????<value>html</value>
????????</init-param>
????????<expiration-cache>0</expiration-cache>
????????<supports>
????????????<mime-type>text/html</mime-type>
????????????<portlet-mode>view</portlet-mode>
????????</supports>
????????<supported-locale>en</supported-locale>
????????<resource-bundle>com.ibm.spc.nl.HelloWorldPortletResource</resource-bundle>
????????<portlet-info>
????????????<title>HelloWorld?portlet</title>
????????</portlet-info>
????</portlet>
</portlet-app> web.xml中servlet的描述很重要,一定要映射servlet,還有要加portlet-guid這一個值(其實這些是在deploy時會自動做的,但我們不使用deploy就只好手工改了)。否則在運行時就會出現常見的NullPointerException異常:
2005-5-13 20:32:12 org.apache.pluto.portalImpl.services.log.LoggerImpl error
嚴重: Error in Portlet
java.lang.NullPointerException
??????? at org.apache.pluto.invoker.impl.PortletInvokerImpl.invoke(PortletInvokerImpl.java:109)
……
這個問題在Apache的MailList一直有人問,大部分可能都是這個問題。
? 編譯好portlet后,放好目錄(WEB-INF\classes下)。
2、修改<pluto_home>\webapps\pluto\WEB-INF\data下的pageregistry.xml、portletcontexts.txt、portletentityregistry.xml三個文件,這里可以按照http://portals.apache.org/pluto/install.html中Installing Portlets部分做,也可以參照pageregistry.xml、portletentityregistry.xml兩個文件中現有的一個test portlet的寫法改。還記得要在portletcontexts.txt中加上Web應用程序的目錄“\HelloWorld”。
3、最后,在Pluto上http://localhost:8080/pluto/portal頁面左側就可以看到一個HelloWorld鏈接,點擊后可以看到
注意修改portlet類、配置等,可能都需要重啟Pluto(其實也就是Tomcat)服務器。這樣之后如果通過訪問servlet的方式來訪問portlet:http://localhost:8080/HelloWorld/HelloWorldPortlet,應該會得到一個空頁面。就是說我所知道的訪問測試Portlet方式就是通過這個地址了http://localhost:8080/pluto/portal/HelloWorld。
由于項目要求,需要做一個Portlet放在門戶網站來展示我們的功能方便演示。雖然感覺并不復雜,但畢竟沒做過,一切都得從頭學起。有道是萬事開頭難,雖然IBM又有一篇入門文章——“Hello World,一個簡單的JSR 168 portlet”,從該網頁下載了一個HelloWorld.zip,但涉及文件和操作過多,使人不知道到底自己創建一個Portlet要從何做起。經過了一番摸索,終于成功地在Pluto中部署了這個Portlet,下面以這個HelloWorld為例,說說另外要注意的重點,希望對和我一樣的初學者有所幫助(可以先下載該文件,按需要解壓出相應文件和目錄):
1、對于初學者,使用Deploy很容易失敗,各種原因都會導致部署不成功(比如這個HelloWorld中說的部署過程,因為jar文件與pluto1.0.1-rc2不一致就會出現很多類沒有找到的錯誤,使部署過程失敗)。所以我們直接在<pluto_home>\webapps目錄中創建一個常規的Web應用程序,比如叫HelloWorld目錄,里面還要有WEB-INF目錄,該目錄下還有web.xml和portlet.xml。
web.xml:
<?xml?version="1.0"?encoding="UTF-8"?>
<!DOCTYPE?web-app?PUBLIC?"-//Sun?Microsystems,?Inc.//DTD?Web?Application?2.3//EN"
?????????????????????????"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app?id="WebApp">
????<display-name>HelloWorld?Web?Application</display-name>
????<servlet>
????????<servlet-name>HelloWorldPortlet</servlet-name>
????????<display-name>HelloWorldPortlet?Wrapper</display-name>
????????<description>Automated?generated?Portlet?Wrapper</description>
????????<servlet-class>org.apache.pluto.core.PortletServlet</servlet-class>
????????<init-param>
????????????<param-name>portlet-guid</param-name>
????????????<param-value>HelloWorld.HelloWorldPortlet</param-value>
????????</init-param>
????????<init-param>
????????????<param-name>portlet-class</param-name>
????????????<param-value>com.ibm.spc.HelloWorldPortlet</param-value>
????????</init-param>
????</servlet>
????<servlet-mapping>
????????<servlet-name>HelloWorldPortlet</servlet-name>
????????<url-pattern>/HelloWorldPortlet/*</url-pattern>
????</servlet-mapping>
????<taglib>
????????<taglib-uri>http://java.sun.com/portlet</taglib-uri>
????????<taglib-location>/WEB-INF/tld/portlet.tld</taglib-location>
????</taglib>
????<taglib>
????????<taglib-uri>http://java.sun.com/portlet</taglib-uri>
????????<taglib-location>/WEB-INF/tld/portlet.tld</taglib-location>
????</taglib>
</web-app>
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>A?simple?HelloWorld?portlet</description>
????????<description?xml:lang="en">A?simple?HelloWorld?portlet</description>
????????<portlet-name>HelloWorldPortlet</portlet-name>
????????<display-name>HelloWorld?portlet</display-name>
????????<display-name?xml:lang="en">HelloWorld?portlet</display-name>
????????<portlet-class>com.ibm.spc.HelloWorldPortlet</portlet-class>
????????<init-param>
????????????<name>wps.markup</name>
????????????<value>html</value>
????????</init-param>
????????<expiration-cache>0</expiration-cache>
????????<supports>
????????????<mime-type>text/html</mime-type>
????????????<portlet-mode>view</portlet-mode>
????????</supports>
????????<supported-locale>en</supported-locale>
????????<resource-bundle>com.ibm.spc.nl.HelloWorldPortletResource</resource-bundle>
????????<portlet-info>
????????????<title>HelloWorld?portlet</title>
????????</portlet-info>
????</portlet>
</portlet-app> web.xml中servlet的描述很重要,一定要映射servlet,還有要加portlet-guid這一個值(其實這些是在deploy時會自動做的,但我們不使用deploy就只好手工改了)。否則在運行時就會出現常見的NullPointerException異常:
2005-5-13 20:32:12 org.apache.pluto.portalImpl.services.log.LoggerImpl error
嚴重: Error in Portlet
java.lang.NullPointerException
??????? at org.apache.pluto.invoker.impl.PortletInvokerImpl.invoke(PortletInvokerImpl.java:109)
……
這個問題在Apache的MailList一直有人問,大部分可能都是這個問題。
? 編譯好portlet后,放好目錄(WEB-INF\classes下)。
2、修改<pluto_home>\webapps\pluto\WEB-INF\data下的pageregistry.xml、portletcontexts.txt、portletentityregistry.xml三個文件,這里可以按照http://portals.apache.org/pluto/install.html中Installing Portlets部分做,也可以參照pageregistry.xml、portletentityregistry.xml兩個文件中現有的一個test portlet的寫法改。還記得要在portletcontexts.txt中加上Web應用程序的目錄“\HelloWorld”。
3、最后,在Pluto上http://localhost:8080/pluto/portal頁面左側就可以看到一個HelloWorld鏈接,點擊后可以看到
注意修改portlet類、配置等,可能都需要重啟Pluto(其實也就是Tomcat)服務器。這樣之后如果通過訪問servlet的方式來訪問portlet:http://localhost:8080/HelloWorld/HelloWorldPortlet,應該會得到一個空頁面。就是說我所知道的訪問測試Portlet方式就是通過這個地址了http://localhost:8080/pluto/portal/HelloWorld。
總結
以上是生活随笔為你收集整理的终于成功地在Pluto中部署了一个Portlet了的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 支付宝浙江网商银行是什么
- 下一篇: 男生遇到漂亮MM就变傻