• 终于成功地在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
  • 相关阅读:
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    HTML语义化
    使用全角空格进行文本对齐
    安卓手机微信中清除页面缓存的方法
    jQuery与Vue的对比
    IDE提交Git出现husky>pre-commit错误
    IDEA将工程转为maven工程
    vscode设置tab缩进字符数
    mac系统下用nginx服务器部署页面
  • 原文地址:https://www.cnblogs.com/wonderow/p/154984.html
Copyright © 2020-2023  润新知