终于成功地在Pluto中部署了一个Portlet了

  开源的工程就是懒, 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链接,点击后可以看到
终于成功地在Pluto中部署了一个Portlet了
注意修改portlet类、配置等,可能都需要重启Pluto(其实也就是Tomcat)服务器。这样之后如果通过访问servlet的方式来访问portlet: http://localhost:8080/HelloWorld/HelloWorldPortlet,应该会得到一个空页面。就是说我所知道的访问测试Portlet方式就是通过这个地址了 http://localhost:8080/pluto/portal/HelloWorld

你可能感兴趣的:(portlet)