??? 今天在jetspeed2的框架下完成了一個portlet的制作,期間遇到了不少的問題。將其記錄下,方便自己和大家。
??? 1、portlet能夠在pluto容器之中通過,但未必能在jetspeed2之中發布,因為pluto是最簡單的jsr168
portlet容器,jetspeed2在其上進行了一定的擴展。在WEB-INF/目錄之下的portlet.xml的內容需要添加,<init-param>。web.xml中要加入JetspeedContainer的servlet元素。
?? <servlet>
??? <servlet-name>JetspeedContainer</servlet-name>
??? <display-name>Jetspeed Container</display-name>
??? <description>MVC Servlet for Jetspeed Portlet Applications</description>
??? <servlet-class>org.apache.jetspeed.container.JetspeedContainerServlet</servlet-class>
??? <init-param>
????? <param-name>contextName</param-name>
????? <param-value>war_name</param-value>
??? </init-param>
??? <load-on-startup>0</load-on-startup>
? </servlet>
還有相應的<servlet-mapping>,jsp之中應用到的<taglib>。
??? 2、protlet.xml文件中<portlet-app id=" ">只要唯一即可,不一定要與psml文件中的id對應(在文檔上說是要對應的),我覺得是war包的名字與psml之中id對應。因為本人的一個失誤發現這個地方。
??? <portlet id="SearchPortlet">與<portlet-name>SearchPortlet</portlet-name>要相同,否則jetspeed2不能夠發布這個portlet,會在網頁上顯示NullPortletEntityException。
??? 3、在這發布中我又一個疑問,最開始的時候我用winrar的zip格式給它們直接打包,可以發布!后來不知道怎么的就不能發布了,非得用jar命令打包。不知道誰知道這之間的不同,(META-INF文件夾存在)如能賜教,不勝感激!jar包在java之中是從zip類繼承下來的,所以小弟認為war包的壓縮格式和zip一樣,(sun公司的壓縮格式都是zip的,這個在本人之前做OpenOffice二次開發的時候對其保存文件odt研究后得以應證)為什么之前能夠發布自動解壓,后面又不行了呢?所有的文件都沒有變動。
??? 4、現在還有一個問題是在jetspeed2的框架之下獲取文件絕對地址的問題,大家都知道在web應用之中,我們用/是獲取WEN-INF目錄的上一級目錄,但是這個方法在jetspeed2之中的portlet卻無法正常工作,如果需要讀取一個文件那么其路徑問題就比較突出,當然我們可以用getProtectionDomain().getCodeSource().getLocation()方法獲取其路徑字符串來處理。這個路徑與我們在繼承GenericPortlet的portlet類之中jsp頁面路徑的跳轉那里有差異,該跳轉路徑字符串只要從portlet根目錄開始向下一層一層直到目標為止,然后用PortletRequestDispatcher的實例進行跳轉,但是在我們自己獲得路徑中卻不能這樣。由此可以總結出jetspeed2之中的portlet應用與普通的web應用路徑的獲取方式不同,在其框架下會對PortletRequestDispatcher跳轉路徑部分進行相應的處理,但是我們不能直接從portlet根目錄之下直接獲取路徑。