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门户开发之10: 通用流程实现从Servlet到Portlet(Part1)

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

  2. bpmn 文件 服务器部署,Liferay7 BPM门户开发之45: 集成Activiti文件上传部署流程BPMN模型...

    开发文件上传,部署流程模板. 首先,开发jsp页面,deploy.jsp ${RETURN_MESSAGE} 其中,上传form的action为portlet:actionURL,它的name就是在p ...

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

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

  4. Liferay7 BPM门户开发之11: Activiti工作流程开发的一些统一规则和实现原理(完整版)...

    注意:以下规则是我为了规范流程的处理过程,不是Activiti公司的官方规定. 1.流程启动需要设置启动者,在Demo程序中,"启动者变量"名统一设置为initUserId 启动时 ...

  5. Liferay7 BPM门户开发之5: Activiti和Spring集成

    参考文档: https://github.com/jbarrez/spring-boot-with-activiti-example https://github.com/sxyx2008/sprin ...

  6. Liferay7 BPM门户开发之4: Activiti事件处理和监听Event handlers

    事件机制从Activiti 5.15开始引入,这非常棒,他可以让你实现委托. 可以通过配置添加事件监听器,也可以通过Runtime API加入注册事件. 所有的事件参数子类型都来自org.activi ...

  7. Liferay7 BPM门户开发之24: Liferay7应用程序安全

    整理中...... Resources, Roles, and Permissions Portal Access Control List (PACL) Custom SSO Providers A ...

  8. liferay7.0 mysql_Liferay7 BPM门户开发之6: Activiti数据库换为mysql

    第一步: 在mysql中创建数据库名字叫 'activiti' 执行D:\activiti-5.21.0\database\create下的脚本 第二步: 打开=> apache-tomcat/ ...

  9. Android开发之ApiCloud模块开发之模块引用第三方库的问题

    因为现在第三方库比较多,所以很多人为了快速开发导致库用烂大街了,但是在模块开发中本人不建议使用第三方库的依赖会有很多问题,要么是资源图片找不到,要么是布局找不到啥的,但是有的需求只有第三方库怎么办呢? ...

  10. #开发catia_CATIA工程制图二次开发之15:从平面创建剖面视图

    从平面创建剖面视图 如何创建与平面关联的切割剖面视图 摘要 本文讨论 CAADrwCreateSectionFromPlane用例.此用例说明如何创建由与平面关联的切割剖面定义的生成剖面视图.因此,如 ...

最新文章

  1. 用Selenium 爬虫下载文件,解除Chrome 下载警告 (Keep or Discard),设置下载目录的方法
  2. python获取天气信息写入原有的excel文档
  3. 学习SQLite之路(二)
  4. OO4O的session残留问题
  5. 「移动开发」iuap mobile玩转前端自动化构建
  6. Boost.ASIO简要分析-4 多线程
  7. ADO.NETv2.0的一些特征
  8. 安全漏洞整改解决方案
  9. Python 中的容器
  10. 编译原理:CH3 语法分析
  11. STM32F103系列控制的OLED IIC 4针
  12. c语言全局变量6,C语言全局变量定义方法
  13. 微擎模块-微信门禁小区物业版(微信开门)
  14. Mongodb本机部署副本集
  15. 对字符串 “ABC” 所有子集的列举
  16. leetcode【537】Complex Number Multiplication(复数相乘)
  17. 三电技术(电池(BMS)、电驱(MCU)、电控(VCU))
  18. 华为笔试题1-面试题17.24-最大子矩阵
  19. 周期性无功电流扰动的孤岛检测仿真
  20. 软工网络15结对编程练习

热门文章

  1. 【Matlab学习笔记】【图像滤波去噪】高斯平滑滤波
  2. Python利用os.walk遍历文件夹
  3. [转载]stl之string类用法详细总结
  4. python地理数据可视化
  5. arcpy_intersectmerge
  6. ENVI学习总结(十一)——NDVI的计算
  7. 【Arcpy】Arcpy核心
  8. ScrollView如何判断滑动到底部以及getHeight()方法与getMeasuredHeight()方法的一些理解
  9. uploadify http 302问题说明
  10. 安恒赛php_安恒强网杯部分web