Liferay SDK 开发体系

主要分6种:

  • Portlet
  • Hook
  • Theme
  • Layout Templates
  • Web Modules
  • Ext

Portlet :类似于servlet的web组件,编译后是war包,是页面的组成元素,可以把它理解为一个web APP

详细介绍:https://web.liferay.com/zh/products/what-is-a-portal/web-platform

Hook:钩子插件,用来覆盖门户的JSP文件和配置文件,适用于仅需要少量(jsp)代码修改原门户的场景,或者一些少量的附加Java功能实现,比如登陆前,表单提交后处理,流程节点的增加一个通用逻辑处理...

Theme:就是look and feel,默认的风格叫classic

Layout Templates :开发这种插件可以自定义页面布局

Web Modules:
一种web application类型的插件,可以看成是一种后台企业服务集成,比如:Enterprise Service Bus, Search Engine web application

Ext:还没搞清楚是什么

Servlet 和 Portlet 的区别

Web组件
Servlet, Portlet 都可以看成Web组件

包和部署
都是war,Servlet部署于Servlet容器,如tomcat,Portlet部署于Portlet容器,比如Liferay, WebSphere Portal, Oracle Portal

  • Servlets描述文件是在web.xml
  • Portlets的描述文件是portlet.xml,而portlet.xml是web.xml的一部分
  • portlet.xml可以定义内容:portlet name、description、class、modes、parameters、information、roles......

生成内容

  • Servlet一旦输出就必须是整个页面
  • Portlet仅仅是控制输出页面的一个小部分
  • 通过portlet preference设置定义个性化,用户可以针对不同的portlet各自设置(即可以不带重样的配置)

继承关系的不同

用图说明

JSP和Servlet的层次关系

Portlet的层次

Request & Response

  • Servlet可以直接ServletRequest and ServletResponse
  • Portlet不行,它有自己的继承关系:RenderRequest, ActionRequest and ResourceRequest

Portlet Mode模式

  • Portlet有多个模式,如view, edit , help, config...
  • Servlet没这一说

Window State 窗体状态

  • Portlet有Maximized, Minimized or Normal三种Window状态
  • Servlet没这一说,因为输出的是整页html

URLs

  • Servlet通过web.xml的<servlet-mapping>元素指定url,在开发时也能直接调试<servlet-mapping>静态指定地址url,即直接浏览器访问
  • Portlet在开发调试时,无法定义静态指定地址url,而是通过以下几种方式:
    •   Render URL:call render method,用于界面控制
    •   Action URL:call action method,用于服务调用
    •   Resource URL:call serve resource method,用于访问资源

生命周期

Servlet是Init()=〉Service() =〉destroy()

Portlet是 init() =〉 render() =〉 processAction() =〉 processEvent() =〉 serveResource() =〉destroy()

URL参数

  • Servlet可以直接读取url参数,通过Query Parameter

比如:http://abc.com?firstName=abc&lastName=pqr
Servlet就有如下的query parameter

    • firstName
    • lastName
  • 而Portlet不可以,它必须预定义,被定义为Public Render Parameter

比如:
http://xxx/group/guest/home?p_auth=epi4GwuC&p_p_id=categorynavigation_WAR_categorynavigationportlet&p_p_lifecycle=1&p_p_state=normal&p_p_col_id=column-1&p_p_col_pos=1&p_p_col_count=3&_categorynavigation_WAR_categorynavigationportlet_javax.portlet.action=triggerSearch
那么在以上的Portlet URL中,就有以下参数:

    • p_auth
    • p_p_id
    • p_p_lifecycle
    • p_p_state
    • p_p_col_id
    • p_p_col_pos
    • p_p_count
    • javax.portlet.action

看上去和Servlet Query Parameter没有区别,实际上:

  • PortletURLs是动态生成的,依赖于portlet mode、Window state、所处页面位置等
  • Servlet Query Parameter可以通过在浏览器中直接输入,然后直接访问(get),方便直接开发调试
  • PortletURLs不支持浏览器中直接访问,只能用PortletRequest或平台提供的帮助类,比如UrlUtil类;

Liferay架构

Liferay的企业级集成接口

Liferay7 BPM门户开发之15: Liferay开发体系简介的更多相关文章

  1. Liferay7 BPM门户开发之16: Liferay中用户\站点\组织架构\角色\用户组以及关联关系

    用户 . 站点 . 组织架构 . 角色 . 用户组分别是:Users. Site. Organization. Role. UserGroups Users 用户是Liferay portal中的关键 ...

  2. Liferay7 BPM门户开发之42: Liferay核心JSP定制扩展

    Liferay最大的好处是不仅接口强大,利于扩展,就连JSP定制扩展都提供了3种方式. 修改核心jsp代码,有3种修改方式:1.暴力修改直接修改(位于portal-web/docroot/html), ...

  3. Liferay7 BPM门户开发之3: Activiti开发环境搭建

    下载地址: http://activiti.org/download.html 源码: https://github.com/Activiti/Activiti 环境准备(检查项): JDK 1.7 ...

  4. Liferay7 BPM门户开发之17: Portlet 生命周期

    Portlet 生命周期 init() =〉 render() =〉 processAction() =〉 processEvent() =〉 serveResource() =〉destroy() ...

  5. Liferay7 BPM门户开发之37: Liferay7下的OSGi Hook集成开发

    hook开发是Liferay客制扩展的一种方式,比插件灵活,即可以扩展liferay门户,也能对原有特性进行更改,Liferay有许多内置的服务,比如用hook甚至可以覆盖Liferay服务. 可作为 ...

  6. Liferay7 BPM门户开发之10: 通用流程实现从Servlet到Portlet(Part1)

    开发目的: 实现通用流程自动化处理(即实现不需要hardcode代码的bpm统一处理后台,仅需要写少量前端html form代码和拖拽设计BPM定义) 既可独立运行或可依托于Liferay或依托其它门 ...

  7. Liferay7 BPM门户开发之12:acitiviti和liferay用户权限体系集成

    写到第12章才出现Liferay的内容,希望可以厚积薄发. 我们的目标是不使用不维护Activiti的用户组织架构,只维护Liferay的体系,这样的好处是非常明显的,即不用做组织架构的同步工作. 原 ...

  8. Liferay7 BPM门户开发之38: OSGi模块化Bndtools、Maven、Gradle开发构建入门

    前言 OSGi是目前动态模块系统的事实上的工业标准,它适用于任何需要模块化.面向服务.面向组件的应用程序.Eclipse如此庞大和复杂的插件体系,就是基于OSGi.Liferay也是基于OSGi.OS ...

  9. Liferay7 BPM门户开发之46: 集成Activiti用户、用户组、成员关系同步

    在实际的BPM集成开发过程中,Liferay和Activiti这两个异构的系统之间,用户.组的同步需求非常重要,用来实现签收组的概念,比如指定签收组.会签.抢签都需要用到. Activiti可以通过自 ...

随机推荐

  1. actuator/hystrix.stream 没有反应的方法

    http://localhost:8086/actuator/hystrix.stream 在启动类加上,就ok了 @Bean public ServletRegistrationBean hystr ...

  2. HDU-4725.TheShortestPathinNyaGraph(最短路 + 建图)

    本题思路:主要是建图比较麻烦,因为结点可以在层与层之间走动,也可以在边上进行走动,所以主要就是需要找到一个将结点和层统一化处理的方法. 所以我们就可以对于存在边的结点建边,层与层之间如果层数相差一也建 ...

  3. linux环境下tomcat安装

    1.安装tomcat前安装jdk(前提下) 2.下载安装包apache-tomcat-8.0.36.tar.gz    解压:tar -zxvf apache-tomcat-8.0.36.tar.gz ...

  4. [leetcode]90. Subsets II数组子集(有重)

    Given a collection of integers that might contain duplicates, nums, return all possible subsets (the ...

  5. 分布式Snowflake雪花算法

    前言 项目中主键ID生成方式比较多,但是哪种方式更能提高的我们的工作效率.项目质量.代码实用性以及健壮性呢,下面作了一下比较,目前雪花算法的优点还是很明显的. 优缺点比较 UUID(缺点:太长.没法排 ...

  6. cmd输入appium-doctor,运行时提示'node'不是内部或外部的命令

    一.提示'node'不是内部或外部命令,先按照下面步骤操作: 1.设置APPIUM_HOME系统变量,值为当前appium安装目录,例如:D:\software_install\Appium 2.设置 ...

  7. 64位Redhat系统应用(c++代码)搭建-使用informix和g++编译

    这篇博客很有必要写下来,记录我在一个比较原生的Linux系统上搭建一套应用所遇到的各种问题和各种坑. 关于这套应用,算是我离职前的一个项目,不完成的话没有办法交差,同时,这个项目也比较紧,合作行一直在 ...

  8. windows内核对象管理学习笔记

    目前正在阅读毛老师的<windows内核情景分析>一书对象管理章节,作此笔记. Win内核中是使用对象概念来描述管理内核中使用到的数据结构.此对象(Object)均是由对象头(Object ...

  9. 要开始学习C#

    之前有涉及ASP.NET,但是就仅涉及workflow这点,现在再接触还是有点陌生. 整理一些VS使用小技巧: 1,for   cw ctor 按两下Tab键会出现整个的语句 2,Ctrl+shift ...

  10. 为docker配置HTTP代理服务器

    背景: node1不能访问外网, node2可以访问外网,node1通过node2的代理服务来访问外网. 1. node1不能访问外网 vim /etc/resolv.conf 注释掉DNS配置文件 ...