zoukankan      html  css  js  c++  java
  • 终于成功地在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链接,点击后可以看到

    注意修改portlet类、配置等,可能都需要重启Pluto(其实也就是Tomcat)服务器。这样之后如果通过访问servlet的方式来访问portlet:http://localhost:8080/HelloWorld/HelloWorldPortlet,应该会得到一个空页面。就是说我所知道的访问测试Portlet方式就是通过这个地址了http://localhost:8080/pluto/portal/HelloWorld
  • 相关阅读:
    2、容器初探
    3、二叉树:先序,中序,后序循环遍历详解
    Hebbian Learning Rule
    论文笔记 Weakly-Supervised Spatial Context Networks
    在Caffe添加Python layer详细步骤
    论文笔记 Learning to Compare Image Patches via Convolutional Neural Networks
    Deconvolution 反卷积理解
    论文笔记 Feature Pyramid Networks for Object Detection
    Caffe2 初识
    论文笔记 Densely Connected Convolutional Networks
  • 原文地址:https://www.cnblogs.com/wonderow/p/154984.html
Copyright © 2011-2022 走看看