portlet
介绍
由于世界仍在Java的掌控之中,因此我们经常定义所谓的基于组件的平台 。 我在2000年拥有OpenUSS(开放大学支持系统)的经验。 当时我有一个想法,就是开发一个可以使用组件体系结构和J2EE技术( OpenUSS Component Architecture )进行扩展的平台。 一段时间后,我们看到了门户和Portlet技术的诞生。 每个人都试图构建可轻松安装在基于Java的门户服务器中的portlet。 您还记得所有这些门户网站,例如Apache Jetspeed,Liferay,JBoss Portal,IBM Webshepe Portal等吗?
在门户浪潮之后,出现了OpenSocial小工具 ,该小工具不仅为Java指定,而且通常可用于不同的技术实现。 它使用完全独立于Java的HTML , JavaScript和REST 。 Apache Shindig是OpenSocial小工具容器的开源实现。 OpenSocial小工具还是iGoogle,Orkut,MySpace,XING和StudiVZ的主要技术。 使用OpenSocial,您可以通过两种不同的方式集成Web应用程序 。
如今,您仍然拥有诸如Portal,Portlet和OpenSocial小工具之类的技术,但是它们不再具有吸引力。 iGoogle已死, 没有人愿意在新的Web应用程序中使用门户和Portlet技术 。 如今,所有重要的Web应用程序都不再使用这些门户,Portlet和小工具。 这些技术的增长肯定会降为零 。
平台
如今, 平台通常由两个元素组成:
- 适用于网络浏览器的Web应用程序 :今天,它仍然是使用最多的应用程序。 笔记本电脑,台式机,平板电脑和智能手机用户使用这种类型的应用程序。
- 本机应用程序的平板电脑,智能手机和穿戴式:只有在少数情况下,你仍然需要台式机应用程序和笔记本电脑作为web应用是用于该用途的情况一天比一天好。 当今,针对智能手机,平板电脑和可穿戴设备的最具针对性的平台是Android和iOS 。
让我们详细看一下这两个元素。
网络应用
如上所述,我们不再需要那些门户,portlet和小工具。 我们是否还在寻找基于组件的平台? 我们是否仍然需要遵循以下要求,而这些要求通常是通过使用门户网站,Portlet和小工具来解决的 ?
- 汇总内容和应用
- 跨应用程序集成
- 提供统一的用户界面
- 支持统一的Web应用程序开发平台
- 个性化内容和服务
- 部署用于发布动态页面的框架
答案是肯定的,但主要重点转移到了不同领域 。 Web应用程序开发的新趋势是所谓的渐进式Web应用程序 (PWA)。 今天更重要的是集中精力于用户体验,而不是Web应用程序本身 。 以下是渐进式Web应用程序的定义 (摘自Google Developers Code Lab):
- 渐进式–适用于每个用户,无论浏览器选择如何。
- 响应式–适合任何外形:台式机,手机和平板电脑。
- 独立的连接性–增强了服务人员的能力,使其可以离线或在低质量的网络上工作。
- 类似于本机应用程序–通过应用程序风格的交互和导航,用户感觉就像一个应用程序。
- 新鲜-由于服务人员的更新过程,始终保持最新。
- 安全-通过HTTPS提供服务,以防止监听并确保内容不被篡改。
- 可发现–由于W3C清单和服务工作者注册范围而可识别为“应用程序”,从而使搜索引擎可以找到它。
- 可重新参与–通过推送通知等功能使重新参与变得容易。
- 可安装–允许用户在主屏幕上“保留”他们认为最有用的应用,而无需麻烦应用商店。
- 可链接–通过URL轻松共享,不需要复杂的安装。
因此,主要重点从 :
- 门户网站,它被定义portlet和小工具 ,使企业的寿命(交付的门户网站,门户,小工具)和开发人员 (其中写门户网站,门户,小工具), 更易于
- 渐进式Web应用程序 ,使用户感到高兴。
这并不意味着使用渐进式Web应用程序我们就无法交付上述要求。 让我们详细了解所有需求点。
(1)汇总内容和应用程序,并跨应用程序进行集成
使用渐进式Web应用程序,情况看起来会有所不同。 您将不会使用Portlet进行这样的集成。 相反,它将使用相同的工具栏将许多Web应用程序集成在一起,并且每个Web应用程序都像独立应用程序一样工作。 这是一个比较。
在Portal和Portlet集成中,每个Portlet都可以作为单独的Web应用最大化。
在Google将其关闭之前,我是iGoogle(来自Google的OpenSocial Gadgets解决方案)的愉快用户。 一开始我以为我需要像netvibes一样寻找替代品。 最后,我一点都不会错过。 如果我需要获取信息,则最需要全屏模式的信息 。 因此,最后,我总是需要一个整体的Web应用程序, 而不仅是一个小Portlet 。在渐进式Web Apps集成中,每个图标都定义了一个Web应用程序,它将作为独立的Web应用程序单独打开,以遵循Native的规则。 类似于应用程序 。
(2)提供统一的用户界面
两种类型都可以支持统一的用户界面。 渐进式Web应用程序使用常见的UI模型,例如Google Material Design或Bootstrap 。 Portal,Portlet和小工具大多具有使用Portal Container中的外观的机制。
(3)支持统一的Web应用开发平台
这是渐进式Web应用发挥作用的地方。 只要该Web应用程序使用HTML , JavaScript,CSS和REST ,就可以在不同的技术堆栈(如Java,PHP,JavaScript等)中实现。 由于在这样的渐进式Web应用程序中没有任何“门户容器”,因此您可以垂直使用所选的技术堆栈 。 而门户和Portlet部署是基于门户容器的 。 因此,如果将Tomcat用作容器,则必须将Portlet部署在该容器中。 当然,您可以拨打远程服务电话,但这不是标准情况。
(4)个性化内容和服务
这是Portlet展示其强大特性的地方。 您可以根据需要关闭和打开portlet。 如果您在上方看到Google工具栏,则还可以个性化内容。 因此,在这种情况下,渐进式Web应用程序可以通过其Web应用程序的个性化设计执行相同的操作。
(5)部署发布动态页面的框架
这也可能与这两种类型和趋势去微服务 。
总结来说,您仍然可以使用Progressive Web Apps满足上述要求。 此外,您可以使用标准的Web组件构建基于组件的Web应用程序。 可以在此处看到渐进式Web应用程序的一些实际使用案例:
- Flipkart:Flipkart上的渐进式Web应用程序
- 柏林航空:柏林航空的渐进式Web应用程序
本机应用
如果没有照顾最常用的客户端(手机和平板电脑)的平台策略,那就是失败。 以下是当今客户端设备及其操作系统的类型:
- 装有Windows,Linux和MacOS的台式机和笔记本电脑 :在大多数情况下,您只需要带有Web应用程序的Web浏览器(Firefox,Internet Explorer,Edge,Chrome和Safari)。 无需为每个操作系统构建本机应用程序,只需使用Progressive Web Apps 。 以下是一些事实:
- Google停止了Picasa客户端应用的开发,并使用Google相册将所有内容移至网络 。
- 装有Android和iOS的平板电脑 :目前,您需要为Android和iOS构建本机应用程序。 但是在许多情况下,带有渐进式Web应用程序的Web应用程序可能是解决方案,因为Web应用程序可以执行与本机应用程序几乎相同的功能,尤其是随着HTML5的到来。
- 具有Android和iOS的手机 :如目前在平板电脑区域中一样,您需要为Android和iOS构建本机应用程序。 由于屏幕大小,我们可能需要开发本机应用程序。 但是渐进式Web应用每天都在做得更好(请参见下面的图片以及上面的Flipkart和Air Berlin的两个示例)。
- 配备Android Wear,Android Auto,Android TV,watchOS,Apple CarPlay和tvOS的可穿戴设备, 小工具, 汽车和 电视 :这是您必须编写本机应用程序的区域,因为较小的设备将无法运行网络浏览器。
Java实现技术
为不同的目标系统开发应用程序非常昂贵。 渐进式Web应用程序的想法很棒,因为它使您无需为每个操作系统编写本机应用程序。 但仍然在某些情况下(至少在当前情况下),我们需要构建本机应用程序。 为此目的并节省资源,有所谓的“ 混合应用程序开发” 。 有很多带有HTML用户界面的混合应用程序框架 。
这种技术的问题在于HTML UI并不是真正的原生。 因此,存在第二种类型的混合应用程序 ,即具有本机UI的混合应用程序框架 。 在这种情况下,您仍将在每个操作系统中使用本机UI,并使用例如相同的编程语言来覆盖其余内容。 由于Java仍然是排名第一的编程语言 ,因此明智的做法是将平台策略基于Java。
下图显示了运行时渐进式Web应用程序 , 具有HTML UI的混合应用程序和本机UI之间的比较。
Java为我们提供什么样的工具和产品来实现上述技术?
(1)基础
- 用于微服务架构的 Spring Boot和Spring Cloud 。 这些开源产品确实很成熟,可以立即投入生产且易于使用。
(2)基于渐进式Web应用程序的Web应用程序
- 对于这种类型的Web应用程序,Java领域没有很多替代品。 像JSF或Grails这样的框架并不是真正能够实现此功能的,因为您需要必须在浏览器端运行JavaScript。 使用纯Java而不是通过AngularJS之类的框架在JavaScript中增加复杂性可能会更好。 为此,您可以选择以下产品:
- GWT –这仍然是从Java到JavaScript的最佳开源转译器。
- GWT是该类别中最成熟的产品 ,而Google在许多 产品中都使用GWT 。 GWT可以与以下UI框架集成:
- 引导程序( GWTBootstrap3 ),
- 这里有一系列最佳实践,介绍了如何使用GWT来实现Progressive Web Apps 。因此,您可以立即使用GWT用Java完全编写Progressive Web Apps。
(3)具有HTML UI的本机应用程序
- 在Android和iOS的外观上使用mGWT和mGWT PhoneGap :使用相同的Java,GWT和PhoneGap / Apache Cordova技术,您可以使用HTML UI编写本机应用程序。 您可能应该使用Progressive Web Apps技术,而不是使用该技术,因为HTML UI看起来并不是本机的。 渐进式Web应用程序是相同的,您可以为Web和移动设备编写一次。
(4)具有本机UI的本机应用程序
- 在Android中,您可以仅使用Java来实现本机UI,不需要任何特殊的解决方法。
- 在iOS中,您需要使用Objective-C来实现本机UI。 使用诸如J2ObjC (Java到Objective-C的编译器)之类的开源产品将极大地帮助重用Java代码。
- 像Google Inbox这样的产品使用GWT和J2ObjC在同一时间跨操作系统(Web,Android和iOS)提供相同的功能。
平台策略
那么,我们今天如何定义平台策略? 以下是我的总结:
(1)基础
- 如果您使用Java作为编程语言的Spring引导和Spring云为您的microService archtiecture实现。 但是最后,您可以使用不同的实现技术,例如Java,.NET和其他。 在下一点中使用这些标准很重要。
(2)服务器端和业务逻辑
- 使用RESTful和JSON进行mircoservices之间的通信。
- 在此平台策略中,必须使用OpenId Connect和OAuth 2进行身份验证和单点登录,以便您能够将所有微服务与所有不同的实现技术集成在一起。
(3)用户界面
- Portal和Portlet已死 。 将渐进式Web应用程序用于任何可能的应用程序。 如果您需要集成许多Progressive Web Apps,则只需使用集成或工具栏,就像Google对其产品所做的操作一样(请参见上面的Google+图片)。
- 如果需要本机应用程序,请使用本机UI而不是HTML UI的混合应用程序框架来构建它们。
- 以下是一些开源产品 ,它们使您在使用Java中的Native UI构建Progressive Web Apps和Native Apps时更加轻松: GWT和J2ObjC 。 考虑使用它们可以提高生产率和上市时间。
当今的平台策略不需要将每个单独的实现都基于相同的语言,即使您的团队中很少有人强调相同的语言,并且Java仍然是可用的顶级编程语言。 本文结尾的下一张图片显示了基于Java的技术平台的最新实现技术。
翻译自: https://www.javacodegeeks.com/2016/09/platform-strategy-portlets-opensocial-gadgets-progressive-web-apps-state-art.html
portlet