今天在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根目录之下直接获取路径。