portlet_平台策略:从Portlet到OpenSocial小工具再到渐进式Web应用程序:最新技术

portlet

介绍

由于世界仍在Java的掌控之中,因此我们经常定义所谓的基于组件的平台 。 我在2000年拥有OpenUSS(开放大学支持系统)的经验。 当时我有一个想法,就是开发一个可以使用组件体系结构和J2EE技术​​( OpenUSS Component Architecture )进行扩展的平台。 一段时间后,我们看到了门户和Portlet技术的诞生。 每个人都试图构建可轻松安装在基于Java的门户服务器中的portlet。 您还记得所有这些门户网站,例如Apache Jetspeed,Liferay,JBoss Portal,IBM Webshepe Portal等吗?

在门户浪潮之后,出现了OpenSocial小工具 ,该小工具不仅为Java指定,而且通常可用于不同的技术实现。 它使用完全独立于Java的HTMLJavaScriptREST 。 Apache Shindig是OpenSocial小工具容器的开源实现。 OpenSocial小工具还是iGoogle,Orkut,MySpace,XING和StudiVZ的主要技术。 使用OpenSocial,您可以通过两种不同的方式集成Web应用程序 。

如今,您仍然拥有诸如Portal,Portlet和OpenSocial小工具之类的技术,但是它们不再具有吸引力。 iGoogle已死, 没有人愿意在新的Web应用程序中使用门户和Portlet技术 。 如今,所有重要的Web应用程序都不再使用这些门户,Portlet和小工具。 这些技术的增长肯定会降为零 。

平台

如今, 平台通常由两个元素组成:

  • 适用于网络浏览器的Web应用程序 :今天,它仍然是使用最多的应用程序。 笔记本电脑,台式机,平板电脑和智能手机用户使用这种类型的应用程序。
  • 本机应用程序的平板电脑,智能手机和穿戴式:只有在少数情况下,你仍然需要台式机应用程序和笔记本电脑作为web应用是用于该用途的情况一天比一天好。 当今,针对智能手机,平板电脑和可穿戴设备的最具针对性的平台是AndroidiOS

让我们详细看一下这两个元素。

网络应用

如上所述,我们不再需要那些门户,portlet和小工具。 我们是否还在寻找基于组件的平台? 我们是否仍然需要遵循以下要求,而这些要求通常是通过使用门户网站,Portlet和小工具来解决的 ?

  • 汇总内容和应用
  • 跨应用程序集成
  • 提供统一的用户界面
  • 支持统一的Web应用程序开发平台
  • 个性化内容和服务
  • 部署用于发布动态页面的框架

答案是肯定的,但主要重点转移到了不同​​领域 。 Web应用程序开发的新趋势是所谓的渐进式Web应用程序 (PWA)。 今天更重要的是集中精力于用户体验,而不是Web应用程序本身 。 以下是渐进式Web应用程序的定义 (摘自Google Developers Code Lab):

  • 渐进式–适用于每个用户,无论浏览器选择如何。
  • 响应式–适合任何外形:台式机,手机和平板电脑。
  • 独立的连接性–增强了服务人员的能力,使其可以离线或在低质量的网络上工作。
  • 类似于本机应用程序–通过应用程序风格的交互和导航,用户感觉就像一个应用程序。
  • 新鲜-由于服务人员的更新过程,始终保持最新。
  • 安全-通过HTTPS提供服务,以防止监听并确保内容不被篡改。
  • 可发现–由于W3C清单和服务工作者注册范围而可识别为“应用程序”,从而使搜索引擎可以找到它。
  • 可重新参与–通过推送通知等功能使重新参与变得容易。
  • 可安装–允许用户在主屏幕上“保留”他们认为最有用的应用,而无需麻烦应用商店。
  • 可链接–通过URL轻松共享,不需要复杂的安装。

因此,主要重点

  • 门户网站,它被定义portlet和小工具 ,使企业的寿命(交付的门户网站,门户,小工具)和开发人员 (其中写门户网站,门户,小工具), 易于
  • 渐进式Web应用程序 ,使用户感到高兴。

这并不意味着使用渐进式Web应用程序我们就无法交付上述要求。 让我们详细了解所有需求点。
 

(1)汇总内容和应用程序,并跨应用程序进行集成

使用渐进式Web应用程序,情况看起来会有所不同。 您将不会使用Portlet进行这样的集成。 相反,它将使用相同的工具栏将许多Web应用程序集成在一起,并且每个Web应用程序都像独立应用程序一样工作。 这是一个比较。

集成门户

门户和Portlet集成:带有门户和Portlet的netvibes

在Portal和Portlet集成中,每个Portlet都可以作为单独的Web应用最大化。

渐进式

与Google Web Apps进行渐进式Web Apps集成:Google+,收件箱,搜索等。

在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应用程序使用HTMLJavaScript,CSSREST ,就可以在不同的技术堆栈(如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的可穿戴设备, 小工具, 汽车和 电视 :这是您必须编写本机应用程序的区域,因为较小的设备将无法运行网络浏览器。
天气

具有材质设计的渐进式Web应用程序

Java实现技术

为不同的目标系统开发应用程序非常昂贵。 渐进式Web应用程序的想法很棒,因为它使您无需为每个操作系统编写本机应用程序。 但仍然在某些情况下(至少在当前情况下),我们需要构建本机应用程序。 为此目的并节省资源,有所谓的“ 混合应用程序开发” 。 有很多带有HTML用户界面的混合应用程序框架 。

这种技术的问题在于HTML UI并不是真正的原生。 因此,存在第二种类型的混合应用程序 ,即具有本机UI的混合应用程序框架 。 在这种情况下,您仍将在每个操作系统中使用本机UI,并使用例如相同的编程语言来覆盖其余内容。 由于Java仍然是排名第一的编程语言 ,因此明智的做法是将平台策略基于Java。

平台比较专家

比较渐进式Web应用程序–具有HTML UI的混合应用程序–具有本机UI的混合应用程序

下图显示了运行时渐进式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)服务器端和业务逻辑

  • 使用RESTfulJSON进行mircoservices之间的通信。
  • 在此平台策略中,必须使用OpenId ConnectOAuth 2进行身份验证和单点登录,以便您能够将所有微服务与所有不同的实现技术集成在一起。

(3)用户界面

  • Portal和Portlet已死 。 将渐进式Web应用程序用于任何可能的应用程序。 如果您需要集成许多Progressive Web Apps,则只需使用集成或工具栏,就像Google对其产品所做的操作一样(请参见上面的Google+图片)。
  • 如果需要本机应用程序,请使用本机UI而不是HTML UI的混合应用程序框架来构建它们。
  • 以下是一些开源产品 ,它们使您在使用Java中的Native UI构建Progressive Web Apps和Native Apps时更加轻松: GWTJ2ObjC 。 考虑使用它们可以提高生产率和上市时间。

当今的平台策略不需要将每个单独的实现都基于相同的语言,即使您的团队中很少有人强调相同的语言,并且Java仍然是可用的顶级编程语言。 本文结尾的下一张图片显示了基于Java的技术平台的最新实现技术。

平台策略

基于Java的平台实现技术


翻译自: https://www.javacodegeeks.com/2016/09/platform-strategy-portlets-opensocial-gadgets-progressive-web-apps-state-art.html

portlet

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/335464.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

keil5函数 默认返回值_C++ 函数的定义

“ C对于函数的基本用法”01—函数的定义//函数声明:[返回值类型] [函数名称] (参数列表)int Function(int a, int b);//函数定义int Function(int a, int b){ //函数体 return a b;}02—函数的默认参数定义函数时可以在参数列表中为形参指定默认值int Function2…

已经创建了AWS EC2实例,Linux系统默认没有root用户,那么如何创建root用户并更改为root用户登录呢?

文章目录1. 如何创建ROOT及设置密码2.更改登陆方式,采用ROOT用户登陆a. 编辑EC2实例的ssh登录方式b. 再编辑authorized_keys文件,将ssh-rsa 前面的文字全部删除,确保ssh-rsa没有任何文字,包括空格。3. 重新登陆对于刚创建AWS EC2实…

输入一个正整数求所有素数因子_一起来聊聊素数的两个性质

素数(prime number),又称质数,有无限个。定义:在大于1的自然数中,除了1和它本身以外不再有其他因数。来介绍两个简单的性质:质数的个数是无穷的。欧几里得的《几何原本》曾有一经典证明,用的是反证法。当然…

基于docker微服务架构_使用基于微服务的流架构更好地进行大规模的复杂事件处理(第1部分)...

基于docker微服务架构基于微服务的流架构与开源规则引擎相结合,使实时业务规则变得容易 这篇文章旨在详细介绍我将OSS业务规则引擎与Kafka风格的现代流消息传递系统集成在一起的项目。 该项目的目标(即众所周知的复杂事件处理(CEP&#xff0…

php怎样下载网上的文件,php怎样实现文件下载

用head() 和 fread()函数把文件直接输出到浏览器。具体代码&#xff1a;<?php $file_name "down";$file_name "down.zip"; //下载文件名$file_dir "./down/"; //下载文件存放目录//检查文件是否存在if (! file_exists ( $file_dir . $fil…

Windows 系统下,移动硬盘无法识别怎么修复?

方案1&#xff1a;移动硬盘没有驱动器号 有时移动硬盘插入计算机&#xff0c;但无法在我的计算机上显示。此时&#xff0c;可能只是因为移动硬盘没有驱动器号。 右键单击此计算机&#xff08;计算机&#xff09;&#xff0c;然后单击[管理]将其打开。 点击左边的[磁盘管理]&a…

欢乐鼠标自动点击器_使用ESP32 DIY蓝牙自动点击器,滑屏器

前言因为爱薅羊毛&#xff0c;然后正好最近免费车一趟接一趟&#xff0c;咪咕开完&#xff0c;京东开&#xff0c;京东开完掌阅开&#xff0c;下一个不知道是谁&#xff0c;&#xff0c;&#xff0c;&#xff0c;可我又不是什么很有耐心的人&#xff0c;虽然我喜欢看书&#xf…

java单词按字典排序_最终Java日志字典:开发人员最常记录的单词是什么?

java单词按字典排序最终的记录字典&#xff0c;或者&#xff1a;我们记录的最常见单词是什么&#xff1f; 日志文件是调试应用程序的最常用方法&#xff0c;当解决错误时&#xff0c;它们肯定可以引导我们朝正确的方向发展。 但是&#xff0c;大多数日志文件每天都会增加一百万…

winscp使用密钥登录远程linux系统

说明&#xff1a; WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端。同时putty也是一个开源连接ssh的windows客户端&#xff0c;本文介绍puttyWinSCP密钥对登录linux服务器。 1. 创建密钥对 安装openssl yum –y install openssl #openssl一般服务器都会预装 创建密…

php api 实例maccms,苹果cmsV10API接口说明

api接口仅供提供数据&#xff0c;可以直接在苹果CMS后台联盟采集中加入-并提供给他人采集。联盟资源分配唯一标识ID&#xff0c;用来区别绑定分类&#xff0c;这个ID一般由苹果CMS官方提供&#xff0c;不可随意修改设置&#xff0c;否则造成入库分类错乱。视频接口同时支持老板…

dml语句包括哪些_聊聊MySQL基本操作DDL,DML,DQL,DCL

本篇文章来回顾一下MySQL的基本操作之DDL&#xff0c;DML&#xff0c;DQL&#xff0c;DCL&#xff0c;每种操作都有各自不同的语法&#xff0c;常用的操作汇总如下。一、DDL-数据定义语言作用&#xff1a;数据定义语言主要用来定义数据库中的各类对象&#xff0c;包括用户、库、…

Windows 系统下使用 putty 客户端通过 SSH 远程连接 AWS 服务器

找到在购买亚马逊的AWS服务器时保存的密钥文件&#xff08;假设为abc.pem&#xff09;。 打开PuTTYgen&#xff0c;如下图&#xff0c;点击图中1处的“load”,找到abc.pem文件所在的位置&#xff0c;并选择abc.pem&#xff0c;确定&#xff1b; 然后&#xff0c;选择图中2处…

ip integrator_使用Oracle Data Integrator(和Kafka / MapR流)完善Lambda体系结构

ip integrator“ Lambda体系结构是一种数据处理体系结构&#xff0c;旨在通过利用批处理和流处理方法来处理大量数据。 这种体系结构方法尝试通过使用批处理提供批处理数据的全面而准确的视图&#xff0c;同时使用实时流处理提供在线数据的视图来平衡延迟 &#xff0c; 吞吐量和…

php 如何获取函数类型,PHP如何使用gettype()函数判断变量的类型?

gettype()函数是PHP中的一个内置函数&#xff0c;用于获取变量的类型&#xff1b;它可用于检查现有变量的类型。下面本篇文章就来给大家介绍一下gettype()函数&#xff0c;希望对大家有所帮助。【视频教程推荐&#xff1a;PHP教程】基本语法string gettype ( $var )参数&#x…

qfile 创建文件_Qt之二进制文件读写

点击上方“Qt学视觉”&#xff0c;选择“星标”公众号重磅干货&#xff0c;第一时间送达想要学习的同学们还请认真阅读每篇文章&#xff0c;相信你一定会有所收获除了文本文件之外&#xff0c;其他需要按照一定的格式定义读写的文件都称为二进制文件&#xff0c;每种格式的二进…

iis开启php验证码,php结合GD库实现中文验证码的简单方法

前言上一次写了一个常见的验证码&#xff0c;现在玩一下中文的验证码&#xff0c;顺便升级一下写的代码流程基本差不多先看GD库开启了没生成中文5位验证码开始画图画干扰素生成图形完事生成中文验证码//小小心机$hanzi "如果觉得写得还可以的话互相关注报团取暖交流经验来…

数据结构设计_合并多种疾病,如何设计数据结构?

如果一个患者合并多种疾病或应用多种药物&#xff0c;如何设计数据结构&#xff1f;例如病史&#xff0c;建议设计成多选题。如果未患病&#xff0c;只需点一次“全无”&#xff0c;操作简单。如果选了全无&#xff0c;其他选框系统自动关闭&#xff0c;就不能再后面的选项了&a…

java ee的小程序_用微服务和容器替换旧版Java EE应用程序服务器

java ee的小程序Lightbend最近对2000多个JVM开发人员进行了一项调查&#xff0c;结果刚刚发布。 开展该调查的目的是发现&#xff1a;发展趋势与IT基础架构趋势之间的相关性&#xff0c;处于数字化转型前沿的组织如何使他们的应用程序现代化以及当今对新兴开发人员技术最为关注…

Linux系统下如何安装JDK?

一、首先下载linux版本jdk 点击进入jdk官网 根据自己的需求&#xff0c;下载不同版本的jdk 2.将下载好的jdk压缩包&#xff0c;通过ftp上传到linux系统的当前用户下&#xff0c;我当前登录的用户为root用户 3.将上传后的jdk&#xff0c;解压到/usr/local/目录下&#xff0c…

django settings 定义的变量不存在_使用Django部署机器学习模型(1)

介绍机器学习(ML)应用的需求正在不断增长。许多资料显示了如何训练ML算法。然而&#xff0c;ML算法分为两个阶段:训练阶段——在这个阶段&#xff0c;基于历史数据训练ML算法&#xff0c;推理阶段——ML算法被用于计算对未知结果的新数据的预测。商业利益就处于推理阶段&#x…