portlet 和 servlet 有啥区别?
Posted
技术标签:
【中文标题】portlet 和 servlet 有啥区别?【英文标题】:what is the difference between a portlet and a servlet?portlet 和 servlet 有什么区别? 【发布时间】:2010-12-01 14:51:41 【问题描述】:我被要求从事 Portlet 和门户网站的工作。
我想知道 portlet 和 servlet 的区别?
portlet 与 servlet 有何不同/在哪里(可能在功能上)?
【问题讨论】:
【参考方案1】:来源增强:Servlets Vs Portlets
相似之处
Servlet 和 Portlet 是基于 Web 的组件,它们使用 Java 他们的实施。
Portlet 由 Portlet 容器管理,就像 Servlet 一样 由 servlet 容器管理。
静态和动态内容都可以由 Portlet 生成,并且 小服务程序。
portlet 和 servlet 的生命周期由容器控制
客户端/服务器模型同时用于 servlet 和 portlet
打包和部署本质上是一样的,WAR/EARs。
应用程序会话存在于 Servlet 和 Portlet 容器中。它是 Portlet 容器中从呈现阶段到操作阶段(或任何较低阶段)共享数据(粗略的 Portlet 间通信)的一种方式。
Servlet 和 Portlet 都使用支持它的类似服务器/VM 环境。虽然,在使用 portlet 的情况下,可能需要一些额外的配置才能使其生效
两者的构建/DI 工具相似 - Ant、Maven、Gradle 等都受支持。大多数情况下:) - Liferay 7 改变了一点。
不同之处
Servlet 可以呈现完整的网页,而 Portlet 呈现 html 碎片。这些片段由门户聚合成一个 完整的网页。
JSR 168 portlet 的内容类型只能是 cHTML、XHTML、WML。它 不支持其他内容类型。
Portlet 不允许生成包含以下标签的 HTML 代码 作为正文、框架、框架集、头部、html 或标题。
与 servlet 不同的 Portlet 没有附加 URL,因此它 不能直接访问。只能通过门户页面访问 包含 portlet。
可以为 Portlet 提供控件来操作其窗口状态 或 portlet 模式。
单个 portlet 的多个实例可以放在同一个 portlet 上 页面。
Portlet 支持持久配置和自定义、配置文件 信息。
Portlet 可以有两种类型的请求,即。渲染请求和动作 请求。
Portlet 在会话中有两个范围;适用范围 跨 portlet 和内部 portlet 的 portlet 范围的通信 交流。
Portlet 不能设置响应的字符集编码,也不能 它设置 HTTP 响应标头。
Portlet 无权访问请求 URL。所以它无法访问 附加到 URL 的查询参数。 Portlet 无法设置 cookie。
Portlet API 的典型方法是
doView()
、doEdit()
、doHelp()
和processAction()
而 servlet 是service()
,doPost()
,doGet()
.Servlet 规范 - JSR 369(Servlet 4.0)、JSR 340(Servlet 3.1)、JSR 315(Servlet 3.0)、JSR 154(Servlet 2.5 & 2.4)。 Portlet 规范 - JSR 168(Portlet Spec v1.0)、JSR 286(Portlet Spec v2.0)、JSR 362(Portlet Spec v3.0)
Portlet 的部署涉及different approach,而不是 Servlet 应用程序。一些 Providers (Liferay/Alfresco/WebSphere) 支持 portlet 的热部署,而无需重新启动服务器,这在 servlet 的情况下是不可能的,而无需使用特殊的库(如 OSGi)对应用程序进行模块化。
编辑 (来自 cmets)
Portlet 容器建立在 Servlet 容器之上。所以最终可以说portlet 在一个Servlet Container 上运行。但是在开发应用程序时,我们会单独查看一个与 Servlet/Java EE 容器分开的 portlet 容器。
【讨论】:
那么,门户应用程序在 servlet/JEE 容器中运行并分别与 portlet 容器通信?据我所知,客户端的机器(浏览器)不知道 portlet 容器或 portlet,除了通过 javascript 和部分页面刷新处理的页面外观。 Portlet 容器建立在 Servlet 容器之上。您可以说 Portlet 容器是具有许多“功能”的高级 Servlet 容器。但要直截了当地回答你的问题,是的。在开发应用程序时,我们将一个 portlet 容器与 Servlet/JEE 容器分开查看。 最简单的想法是 servlet 呈现整个网页,而 portlet 呈现网页的特定矩形部分(子部分)。例如,新闻页面右侧的广告栏可以呈现为 portlet。但是您不会将单个编辑字段实现为 portlet,因为这太细化了。基本上,如果你将一个网页分解成它的主要部分区域,那么这些都是很好的候选者,可以制作成 portlet。 @ClayFerguson “portlet 呈现网页的特定矩形部分(子部分)”,所以它就像一个框架,或者一个 ... @TomBrito - 部分正确。它就像一个框架或一个 div,它们有自己的生命周期,可以与其他框架或 div 共享数据。【参考方案2】:Portlet 是规范门户容器和组件的 JSR-168 标准的一部分。这是与 Web 容器(和 servlet)标准不同的标准。虽然这两个标准之间肯定有很强的相似之处,但它们在容器、API、生命周期、配置、部署等方面有所不同。
portlet 与 servlet 之间的主要区别可能在于,虽然 servlet 始终响应单一类型的操作 - 请求,但 portlet(由于其生命周期的性质和更强大的容器绑定)必须响应到两种类型的操作:render 和 request。当然还有更多,但我在研究门户网站开发时发现这是两者之间的核心区别。
【讨论】:
更新:Portlet 1 是JSR 168,Portlet 2 是JSR 286,Portlet 3 是JSR 362。【参考方案3】:portlet 和 servlet 都接收一个 http 请求并返回一个响应,通常是一些可以由浏览器呈现的 HTML。 Portlet 在“Portal”的上下文中使用,其想法是用户看到的单个页面有很多部分,比如图块,每个部分都来自不同的 Portlet。
现在,您可以从普通服务中获得“平铺”效果(有关如何使用的示例,请参见 Struts + Tiles),portlet 的额外之处在于,portlet 位于 Portal 提供的更丰富的环境中,额外的 API 是这样一来,任何 portlet 显示的内容都可以由各个用户根据自己的喜好进行配置,并且 portlet 可以相互通信 - 一个按钮按下,另一个按钮就会发生。
【讨论】:
【参考方案4】:Servlet 有一个 java 定义(处理 HTTP GET/POST 请求的应用程序),而 portlet 有一个用户界面定义。执行特定功能的组件类似于 windows vista 小部件或这里堆栈溢出中使用的许多组件。它们不一定需要服务器端的 servlet 支持。但是 Portlet 标准是与 java 一起开发的。 O'Reilly 有一个很好的tutorial。
【讨论】:
【参考方案5】:本质上,Servlet 提供通常占据浏览器中整个页面的内容(除非您使用框架),而 portlet 提供由窗口包装的内容。使用 portlet,您可以将多个 portlet 并排放置,并且每个 portlet 都可以提供彼此不同的内容和功能。一个portlet 可以为一种类型的应用程序提供完整的交互,而另一个portlet 可以为另一种类型的应用程序提供内容。门户可以为页面上的所有 portlet 提供一些内务管理功能和安全的单一入口点。至于它们之间的细节(相同点/不同点),请继续阅读。以下是一些相似之处: Servlet 和 Portlet 是基于 Web 的组件,它们利用 Java 实现其 Portlet 由类似于 Servlet 容器的 Portlet 容器管理这两个组件都生成内容,可以是静态的或动态的
【讨论】:
以上是关于portlet 和 servlet 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章