开源的工程就是懒,ApachePluto是一个简单的符合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
posted on 2005-05-13 21:34  小生杂谈  阅读(2787)  评论(0编辑  收藏  举报