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门户开发之16: Liferay中用户\站点\组织架构\角色\用户组以及关联关系
用户 . 站点 . 组织架构 . 角色 . 用户组分别是:Users. Site. Organization. Role. UserGroups Users 用户是Liferay portal中的关键 ...
- Liferay7 BPM门户开发之42: Liferay核心JSP定制扩展
Liferay最大的好处是不仅接口强大,利于扩展,就连JSP定制扩展都提供了3种方式. 修改核心jsp代码,有3种修改方式:1.暴力修改直接修改(位于portal-web/docroot/html), ...
- Liferay7 BPM门户开发之3: Activiti开发环境搭建
下载地址: http://activiti.org/download.html 源码: https://github.com/Activiti/Activiti 环境准备(检查项): JDK 1.7 ...
- Liferay7 BPM门户开发之17: Portlet 生命周期
Portlet 生命周期 init() =〉 render() =〉 processAction() =〉 processEvent() =〉 serveResource() =〉destroy() ...
- Liferay7 BPM门户开发之37: Liferay7下的OSGi Hook集成开发
hook开发是Liferay客制扩展的一种方式,比插件灵活,即可以扩展liferay门户,也能对原有特性进行更改,Liferay有许多内置的服务,比如用hook甚至可以覆盖Liferay服务. 可作为 ...
- Liferay7 BPM门户开发之10: 通用流程实现从Servlet到Portlet(Part1)
开发目的: 实现通用流程自动化处理(即实现不需要hardcode代码的bpm统一处理后台,仅需要写少量前端html form代码和拖拽设计BPM定义) 既可独立运行或可依托于Liferay或依托其它门 ...
- Liferay7 BPM门户开发之12:acitiviti和liferay用户权限体系集成
写到第12章才出现Liferay的内容,希望可以厚积薄发. 我们的目标是不使用不维护Activiti的用户组织架构,只维护Liferay的体系,这样的好处是非常明显的,即不用做组织架构的同步工作. 原 ...
- Liferay7 BPM门户开发之38: OSGi模块化Bndtools、Maven、Gradle开发构建入门
前言 OSGi是目前动态模块系统的事实上的工业标准,它适用于任何需要模块化.面向服务.面向组件的应用程序.Eclipse如此庞大和复杂的插件体系,就是基于OSGi.Liferay也是基于OSGi.OS ...
- Liferay7 BPM门户开发之46: 集成Activiti用户、用户组、成员关系同步
在实际的BPM集成开发过程中,Liferay和Activiti这两个异构的系统之间,用户.组的同步需求非常重要,用来实现签收组的概念,比如指定签收组.会签.抢签都需要用到. Activiti可以通过自 ...
随机推荐
- Sentinel统计线程,QPS,RT的方式
一.Sentinel是阿里开源产品,用于流量监控和管理. 二.对于流量控制,可以通过限制线程数和QPS实现限流 1. 资源进入Sentinel的方式 Entry entry = null; try { ...
- trap实现跳板机
第一节 跳板机实现原理(图例) 第2节 涉及到的知识点 命令:trap 拓展知识:进程与信号 trap 语法,作用,使用 [jeson@mage-jump-01 ~/]$ trap -l 1) S ...
- python 文件读写方式
一.普通文件读写方式 1.读取文件信息: with open('/path/to/file', 'r') as f: content = f.read() 2.写入文件中: with open('/U ...
- cmp指令
cmp是比较指令,cmp的功能相当于减法指令,只是不保存结果.cmp指令执行后,将对标志寄存器产生影响.其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果. cmp指令格式: cmp 操作对象 ...
- Sass入门及知识点整理
Sass 快速入门 | SASS 中文网 文档链接:https://www.sasscss.com/getting-started/ 前言 之前整理了一篇关于Less的,现在就来整理一下关于Sass的 ...
- IMU
(1)用IMU来进行预测 读入一个10/20帧的数据集,通过IMU来初步预测出位姿以及显示其路径. Christian Forster, Luca Carlone, Frank Dellaert, D ...
- Java 7 使用TWR(Try-with-resources)完成文件copy
try-with-resources语句是声明了一个或多个资源的try语句块.在java中资源作为一个对象,在程序完成后必须关闭.try-with-resources语句确保每个资源在语句结束时关闭. ...
- Linux 使用 mail 发送邮件
ubuntu 需要安装 mailutils sudo apt-get install mailutils
- 主机性能监控之wmi 获取系统信息及内存性能信息
标 题: 主机性能监控之wmi 获取系统信息及内存性能信息作 者: itdef链 接: http://www.cnblogs.com/itdef/p/3990240.html 欢迎转帖 请保持文本完整 ...
- Django Model模型的实战操作笔记
Model模型的实战操作笔记 1. 创建数据库和表 进入MySQL数据库创建数据库:mytest 进入数据库创建数据表:mytest_users CREATE TABLE `mytest_users` ...