Liferay7 BPM门户开发之15: Liferay开发体系简介
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开发体系简介相关推荐
- Liferay7 BPM门户开发之10: 通用流程实现从Servlet到Portlet(Part1)
开发目的: 实现通用流程自动化处理(即实现不需要hardcode代码的bpm统一处理后台,仅需要写少量前端html form代码和拖拽设计BPM定义) 既可独立运行或可依托于Liferay或依托其它门 ...
- bpmn 文件 服务器部署,Liferay7 BPM门户开发之45: 集成Activiti文件上传部署流程BPMN模型...
开发文件上传,部署流程模板. 首先,开发jsp页面,deploy.jsp ${RETURN_MESSAGE} 其中,上传form的action为portlet:actionURL,它的name就是在p ...
- Liferay7 BPM门户开发之46: 集成Activiti用户、用户组、成员关系同步
在实际的BPM集成开发过程中,Liferay和Activiti这两个异构的系统之间,用户.组的同步需求非常重要,用来实现签收组的概念,比如指定签收组.会签.抢签都需要用到. Activiti可以通过自 ...
- Liferay7 BPM门户开发之11: Activiti工作流程开发的一些统一规则和实现原理(完整版)...
注意:以下规则是我为了规范流程的处理过程,不是Activiti公司的官方规定. 1.流程启动需要设置启动者,在Demo程序中,"启动者变量"名统一设置为initUserId 启动时 ...
- Liferay7 BPM门户开发之5: Activiti和Spring集成
参考文档: https://github.com/jbarrez/spring-boot-with-activiti-example https://github.com/sxyx2008/sprin ...
- Liferay7 BPM门户开发之4: Activiti事件处理和监听Event handlers
事件机制从Activiti 5.15开始引入,这非常棒,他可以让你实现委托. 可以通过配置添加事件监听器,也可以通过Runtime API加入注册事件. 所有的事件参数子类型都来自org.activi ...
- Liferay7 BPM门户开发之24: Liferay7应用程序安全
整理中...... Resources, Roles, and Permissions Portal Access Control List (PACL) Custom SSO Providers A ...
- liferay7.0 mysql_Liferay7 BPM门户开发之6: Activiti数据库换为mysql
第一步: 在mysql中创建数据库名字叫 'activiti' 执行D:\activiti-5.21.0\database\create下的脚本 第二步: 打开=> apache-tomcat/ ...
- Android开发之ApiCloud模块开发之模块引用第三方库的问题
因为现在第三方库比较多,所以很多人为了快速开发导致库用烂大街了,但是在模块开发中本人不建议使用第三方库的依赖会有很多问题,要么是资源图片找不到,要么是布局找不到啥的,但是有的需求只有第三方库怎么办呢? ...
- #开发catia_CATIA工程制图二次开发之15:从平面创建剖面视图
从平面创建剖面视图 如何创建与平面关联的切割剖面视图 摘要 本文讨论 CAADrwCreateSectionFromPlane用例.此用例说明如何创建由与平面关联的切割剖面定义的生成剖面视图.因此,如 ...
最新文章
- 用Selenium 爬虫下载文件,解除Chrome 下载警告 (Keep or Discard),设置下载目录的方法
- python获取天气信息写入原有的excel文档
- 学习SQLite之路(二)
- OO4O的session残留问题
- 「移动开发」iuap mobile玩转前端自动化构建
- Boost.ASIO简要分析-4 多线程
- ADO.NETv2.0的一些特征
- 安全漏洞整改解决方案
- Python 中的容器
- 编译原理:CH3 语法分析
- STM32F103系列控制的OLED IIC 4针
- c语言全局变量6,C语言全局变量定义方法
- 微擎模块-微信门禁小区物业版(微信开门)
- Mongodb本机部署副本集
- 对字符串 “ABC” 所有子集的列举
- leetcode【537】Complex Number Multiplication(复数相乘)
- 三电技术(电池(BMS)、电驱(MCU)、电控(VCU))
- 华为笔试题1-面试题17.24-最大子矩阵
- 周期性无功电流扰动的孤岛检测仿真
- 软工网络15结对编程练习