分享对门户研究坎坷路程
为了重构公司的门户系统,花了很长一段时间在门户技术研究上。其中的坎坷只有自己知道。下面我就来分享一下各个技术的研究和个人想法:
原先公司门户使用的liferay开源项目进行的二次开发。来适应公司的门户需求。
大部分人给出的Liferay6.2主要优点是
(1)使用第三放的开源项目,如Hibernate等。特别是前台界面部分使用了Struts技术;
(2)支持包括中文在内的多种语言;
(3)支持较多的先进技术,如Web Services、EJB, JMS, SOAP, XML等;
Liferay的缺点是它缺乏一个简单清晰可拓展的架构设计,整个架构比较复杂且庞大;Struts1.1本身并不支持JSR168,所以Liferay 在实现诸如上下文共享等问题上显得十分笨重且没有从根本上解决这些问题;portlet设计也显得比较凌乱。此外,如果你的门户系统准备应用于商业用途,你需要购买License。基于它进行二次开发比较困难。
所以我面临的就是三个选择
1.升级原先的liferay6.2到7.0。
2.寻找更适用的开源门户项目来进行二次开发。
3.用合适的一些语言框架来自己实现开发。
第一步肯定是来搭建liferay7.0的环境了。具体步骤以及一些测试代码就不细说了,没有先人的开发经验,必须去官网找英文文档来看,其中官网的一个坑我必须提一下,就是搭环境编译代码的时候需要配置python环境,然而官网并没有给出任何说明,我傻乎乎的在那一直报错。看了半天的日志才找到需要python环境。我也是醉到了,哎,下面我还是来讲讲我的使用心得:
新版的liferay7.0,采用了各种更新的工具,以及支持ant,maven,gradle三大构建工具。在portlet开发,交互和扩展上面没有太大的问题,最新版的前端使用freemarker区别于JSP。拓展了更多的主题开发,在更改主题的时候有如下问题:
1、前端环境部署反应慢,门户网页至少几分钟的时间才能看到效果,对调试来说是个不容忽视的问题。
2、在环境配置的时候因为有区别于liferay6.2版本。简化了主题的开发,对规则的理解和获取途径难度较大。必须查看官方英文文档,在理解上有较大的偏差。
3、交流了网上很多正在使用liferay开发人员的人员,大多数人还是采用liferay6.2来开发,liferay7.0的相关资料缺乏,6.2版本在主题拓展上很容易产生性能问题,很难做到界面优化。
4、在建立各个portlet的时候和原先版本区别不大,基本没啥问题!
第二步又找了很多的开源项目,不是java写的第一个排除,在开源社区排行榜上去实践,一句话还没liferay好用,文档更少。我又试着去GitHub找找有没有人分享关于门户的代码。还真有:说明还挺详细的。我也搭建过可行的,不过是他们公司的项目,有属于自己规则的。我分享下地址
https://git.oschina.net/xautlx/s2jh4net
第三步在遇到的一些问题和实用性我权衡后,我开始考虑选用一些前端框架来实现门户,首先门户的的三大特点:
A. Personalization (个性化):用户自己定制自己所需页面
B. Single sign on(单点登陆):一处登陆,处处通行
C. Content aggregation(内容聚合):不同来源的信息整合到一个页面中
我们使用liferay就是为了使用门户的C内容聚合,就是liferay的portlet开发。如果能找到能够制作portlet方面的前端框架,完全可以使用该框架来重新开发门户。
jQuery UI Portlet
在用这个之前我找过extjs的portlet。这东西用了下太重了。Extjs对于灵活的我压根不会去喜欢,
jQuery UI Portlet的由来:因为现有的Portlet插件都太难用,而且很多系统样式风格不兼容,一般公司的项目前端都是基于jQuery以及jQuery UI 框架开发的,所以为了更好的保持风格统一才有了jQuery UI Portlet。
主要功能:
1.按照列的方式生成Portlet
2.支持各种回调:创建、读取内容、刷新等
3.支持多种内容获取方式:纯文本、function、ajax、json
4.支持加载Javascript文件,可以为每个portlet配置多个js文件路径
5.支持单视图模式
挺不错的东西。
接下来寻找portlet的制作,和实现portlet之间的相互通信,以及环境的需要:
1)JSR168
Portlet 是部署在容器内用来生成动态内容的 Web 组件,与 servlet 类似,portlet 的整个生命周期从 init 到 destroy 的过程都在 portlet 容器中进行。Java Portlet Specification 对 portlet API、 标准化用户数据、参数设置、portlet 请求以及响应、部署、打包以及安全等方面都做了详细的规定,以此来实现 portlet 之间以及 portlet 与 portlet 容器之间的交互和协作。 Java Portlet Specification 1.0, 即 Java Specification Request(JSR)168 发布于 2003 年 10 月。
2)JSR286
JSR 168 在业界受到广泛支持,且得到开放源码支持。标准和产品的第一个版本存在一定的缺陷,仅支持最基本的用例,在功能上有一些限制。而且 Java Portlet Specification V1.0 也存在这种情况,因此,经过三年之后,大多数支持 Java Portlet Specification V1.0 的门户产品都提供一些附加扩展,以支持更高级的用例,这些附加的扩展造成了各个门户产品的标准不统一,彼此间的交互协作成了不可避免的问题。为了更好地规 范 portlet 开发,以适应业界发展,并提供适应于最高级别用例的标准解决方案,从而为这些高级功能提供互操作性,在 2005 年 11 月开始了 Java Portlet Specification V2.0(称为 JSR 286)的开发,在 2008 年 正式发布。JSR 286 最终草案兼容JSR 168,并完善了 JSR 168 的部分功能,并提供了诸多 JSR 168 所没有的新特性,例如资源服务、事件、portlet 过滤器、共享呈现参数及 portlet 窗口等。与 V1.0 类似,V2.0 基于 J2EE 1.4,因此可让 Portlet 使用 J2EE 1.4 增强(如 JSP 2.0)。下面是该新规范的一些主要功能及特性:
资源服务:一种新的通过 portlet 呈现资源的方式。
事件:通过发送事件和接收事件来实现 portlet 之间的通信。
Portlet 过滤器:与 servlet 过滤器类似,根据 Portlet 请求和响应动态的呈现内容的变换。存在以下四种类型的 portlet 过滤器:
Action 过滤器
Render 过滤器
Resource 过滤器
Event 过滤器
共享呈现参数:除了 portlet 私有的呈现参数之外,新增了可以在 portlet 之间共享的呈现参数。
Portlet 窗口:提供 portlet 窗口 ID 供 portlet 使用。
为实现portlet之间的通讯,找了很多典型的案例,不过这方面的东西是真少,不用google还真找不到,下面这个文章还是很吸引我。
《DWR简化portlet之间的ajax通信》:
http://zqsmm.qiniucdn.com/data/20060906115921/index.html
这是解决portlet之间通信的问题的。
接下来我开始寻找放置portlet的容器:
在Apache的Portals项目中有一个名叫Pluto的子项目很吸引我,它致力于构建一个简单的Portlet Container,让程序员可以Deploy并运行所开发的Portlet。Pluto相对于BEA、IBM等大公司提供的Portal Server而言,尽管显得功能简陋,但是作为Portlet API的一个参考实现还是挺有权威的,其简单性也正好让我们更加关注Portlet的本质。更重要的是,它是开源的,大家都很容易从网上找到它。于是,Pluto就成为我们进行实践的不二之选了。
然后经过项目部署,portlet开发实现。发现Pluto就是一个类似门户的东西。Pluto是最简单的门户,对portlet的支持和扩展性很好,但是对主题方面,和门户的功能方面并有没有提供很好的二次开发,这就是简化版的开源项目了。很多开源项目都是基于这东西来实现的,如EXO platfrom。还是比较灵活的。
其中还有很多开发项目名字记不起来了。Liferay能在开源门户项目中排第一还是有一定道理的。
分享对门户研究坎坷路程相关推荐
- 分享一下我研究SQLSERVER以来收集的笔记
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 分享一下 ...
- 【经验分享】在研究中,你是否踩过这些工程的“坑”?
编者按:或许你曾对着前人留下的天坑怀疑人生,或许你曾疏于注释导致自己也忘了当初为什么这么写,或许你抱有"代码 work 就行了"的侥幸心理--那些年我们做研究时踩到的雷,其实许多都 ...
- 赞美是感情生活的“保鲜剂”:关于赞美分享的fMRI研究
导读 爱可能是一个人经历过的最迷人的感觉.然而,人们对浪漫情侣的大脑中究竟发生了什么知之甚少--这是成年时期最核心和最突出的关系.为了深入了解近乎自然的情侣互动,本研究在两个fMRI扫描仪中同时收集了 ...
- 分享一个整理研究现状的EXCEL表格
做科研写文章要写研究现状,需要写各种某某在几几年做了什么工作,如果平时看文献不做记录的话会比较麻烦 为了方便记录,我自己写了个简单的模板: 暂时没写排序,所以录入的时候只能自己找对应年份,插入行 B1 ...
- 德国百年科研护肤--优色林分享全球创新研究成果
德国百年科研护肤品牌优色林于上海召开首届研讨会,分享震撼全球业界的突破性美白成分的科研成果.全球最大护肤品集团德国拜尔斯道夫公司旗下优色林品牌,今年开始加大对全球战略市场中国的市场投入,以及品牌推广. ...
- 报名 | 首期AI Time PhD:听清北师兄分享前沿研究成果!
科研道路上,让优秀的师兄师姐与优秀的你一同前进! AI Time PhD第一期我们邀请了北京大学的陈震鹏博士,清华大学的丁铭博士,想了解二位高颜值的超级学霸为我们带来何种精彩分享,来现场与大家一起探索 ...
- 计算机视觉研究那些事 |CVPR 2020 论文分享会
本文转载自微软学术合作. 在以下链接查看 CVPR 2020 线上论文分享会全程回放: https://space.bilibili.com/110487933/channel/detail?cid= ...
- 分享经济研究 ——以闲鱼为例
分享经济研究 --以闲鱼为例 一.概述 分享经济是指将社会海量.分散.闲置资源等,进行平台化.协同化的集聚.复用与供需匹配,从而实现经济与社会价值最大化利用的新经济业态. 分享经济强调的两个核心理念是 ...
- Task三个列子的分享
这次要分享的是C#Task任务的几个列子,感觉最实用的是封装的分页任务执行方法,这个方法步奏也是目前在我工作中执行多任务常用的,不知道各位也有这用的情况,那么开始吧. 1.顺序任务执行 View C ...
最新文章
- bootstrap-less源码分析:行和列
- 【复盘】第一次灌鸡汤
- pandas 模块学习
- linuxquot;/quot;分区名称,linux分区,磁盘系统的管理,文件系统制作
- MY_SQLCode
- MFC对话框中的工具栏、状态栏设计小结
- vue项目使用npm run dev 编译到一半不动了
- petshop详解之一:PetShop的系统架构设计
- 机器学习之基于Fisher线性分类器实现多类人脸的识别
- iPhone 12再陷“信号门”:用户称每天需多次重启恢复;蚂蚁集团打新资金退款如期到账;Mutt 2.0 发布|极客头条
- 【推荐算法】协同过滤算法——基于用户 Java实现
- cartographer探秘第五章之 Cartographer 所用到的 C++11 新特性
- 20200720《Flask进阶》——蓝本
- 性能测试LoadRunner
- 浏览器打开网页但找不到服务器ip地址 DNS错误 解决办法
- ubuntu不能访问windows中的文件
- 门徒Disciples体系:致力于成为“DAO世界”中的集大成者。
- 图片择优算法(模糊图片筛选出最清楚的图片) 没有使用第三方库
- 北京利达消防设备调试软件
- 被火龙强奸了100次~~~怨念!
热门文章
- SSD目标检测 原理详解
- 【Windows问题】:在IDE代码补全时解决与Windows下的ctrl+空格切换输入法快捷键冲突问题
- 中英文说明书丨CalBioreagents艾美捷兔单克隆抗小鼠/人Id4抗体
- 一个恒流输出电源传导、辐射超标解决案例
- 北京房租大涨?Python 6个维度,数万条数据帮你揭秘
- 刚入手树莓派(rasberry pi)最基本的配置,最全!(烧录系统+配置ssh+换源+图文保姆级教程)
- cocos-creator学习笔记2(触摸屏幕,鼠标锁定控制节点移动)
- Vipjr:真正的富养女儿是给她更高的眼界和能力
- [RK3568 Android11] 开发之user版本关闭selinux
- chrome版本(chrome版本太旧)