Portlet和Servlet有什么区别?


96

我被要求在portlet和门户网站上工作。

我想知道portlet和servlet之间的区别吗?

Portlet与Servlet有何不同之处(可能在功能上)?

Answers:


65

Portlet是JSR-168标准的一部分,该标准规范门户容器和组件。这与Web容器(和Servlet)的标准不同。尽管这两个标准之间肯定有很强的相似之处,但是它们在容器,API,生命周期,配置,部署等方面有所不同。

portlet与servlet之间的主要区别可能是,尽管servlet总是响应单一类型的动作请求,但portlet(由于其生命周期的本质和更强的容器绑定)必须响应两种类型的动作:renderrequest。当然还有更多内容,但是当我研究门户开发时,我发现这是两者之间的核心区别。


1
更新:Portlet 1是JSR 168,Portlet 2是 JSR 286,Portlet 3是JSR 362
罗勒·布尔克

137

从源代码增强 Servlet与Portlet

相似点

  1. Servlet和Portlet是基于Web的组件,使用Java来实现。

  2. Portlet由Portlet容器管理,就像Servlet由Servlet容器管理一样。

  3. 静态和动态内容都可以由Portlet和Servlet生成。

  4. Portlet和Servlet的生命周期由容器控制

  5. 客户机/服务器模型用于servlet和portlet

  6. 打包和部署实质上是相同的,WAR / EAR。

  7. Servlet和Portlet容器中都存在Application Session。这是在portlet容器中从呈现阶段到操作阶段(或任何较低阶段)共享数据(粗间Portlet通信)的一种方法。

  8. Servlet和Portlet都使用支持它的类似服务器/ VM环境。虽然,在portlet的情况下可能需要一些其他配置才能使其打勾

  9. 两者的构建/ DI工具都相似-都支持Ant,Maven,Gradle等。大多数情况下:)-Liferay 7对此有所改变。


差异性

  1. Servlet可以呈现完整的网页,而Portlet可以呈现html片段。这些片段由门户网站聚合到完整的网页中。

  2. JSR 168 Portlet的内容类型只能是cHTML,XHTML,WML。它不支持其他内容类型。

  3. Portlet不允许生成包含诸如正文,框架,框架集,标题,html或标题之类的标签的HTML代码。

  4. Portlet与Servlet不同,它没有附加URL,因此无法直接访问。仅通过包含portlet的门户页面进行访问。

  5. 可以为Portlet提供控件以操纵其窗口状态或Portlet模式。

  6. 单个portlet的多个实例可以放置在同一页面上。

  7. Portlet支持持久性配置和定制,概要文件信息。

  8. Portlet可以具有两种请求类型。渲染请求和动作请求。

  9. Portlet在会话中有两个作用域;跨portlet进行通信的应用程序范围和内部portlet进行通信的portlet范围。

  10. Portlet无法设置响应的字符集编码,也不能设置HTTP响应头。

  11. Portlet无权访问请求URL。因此,它无法访问附加到URL的查询参数。Portlet无法设置cookie。

  12. Portlet API的典型的方法是doView()doEdit()doHelp()processAction()而那些的servlet的是service()doPost()doGet()

  13. 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)

  14. Portlet的部署涉及 Servlet应用程序不同的方法。一些提供程序(Liferay / Alfresco / WebSphere)支持Portlet的热部署,而无需重新启动服务器,而对于servlet,如果不使用OSGi之类的特殊库对应用程序进行模块化,则无法实现。


编辑 (来自评论)

Portlet容器建立在Servlet容器上。因此最终可以说Portlet在Servlet容器上运行。但是在开发应用程序时,我们将Portlet容器与Servlet / Java EE容器分开查看。


那么,门户网站应用程序在servlet / JEE容器中运行并分别与portlet容器对话吗?据我了解,客户端的机器(浏览器)不了解一个或多个portlet容器,除了页面的外观是通过JavaScript和部分页面刷新来处理的。
安迪

2
Portlet容器建立在Servlet容器上。您可以说Portlet容器是具有许多“功能”的高级Servlet容器。但是,坦率地说,是的。在开发应用程序时,我们将Portlet容器与Servlet / JEE容器分开查看。
Ashok Goli

4
想到这一点的最简单方法是,Servlet呈现整个网页,而Portlet呈现网页的特定矩形部分(子部分)。例如,新闻页面右侧的广告栏可以呈现为portlet。但是您不会将单个编辑字段实现为Portlet,因为这太细了。基本上,如果您将网页分解为主要区域,那么将其作为portlet的不错选择。

@ClayFerguson“ portlet呈现网页的特定矩形部分(子部分)”,因此它就像框架或<div> ...
Tom Brito

@TomBrito-部分正确。就像框架或div一样,它们具有自己的生命周期,并且可以与其他框架或div共享数据。
Ashok Goli

8

Portlet和Servlet都接收一个http请求并返回一个响应,通常是一些可以由浏览器呈现的HTML。在“门户”的上下文中使用portlet,其思想是用户看到的单个页面包含许多部分,例如图块,每个部分都来自不同的portlet。

现在,您可以从普通服务器获得“平铺”效果(有关示例,请参见Struts + Tiles)。来自portlet的额外好处是,portlet位于Portal提供的更丰富的环境中,提供了额外的API,以便每个用户可以根据自己的喜好配置任何portlet所显示的内容,并且ports可以彼此通信-按下一个按钮,另一个则发生了事情。


6

Servlet具有Java定义(处理HTTP GET / POST请求的应用程序),而Portlet具有用户界面定义。执行类似于Windows Vista窗口小部件的特定功能的组件或此处stackoverflow中使用的许多组件。它们不一定必须由服务器端的servlet支持。但是Portlet标准是与Java一起开发的。O'Reilly有一个不错的教程


4

本质上,Servlet提供的内容通常会占用浏览器中的整个页面(除非您使用的是框架),而Portlet提供的内容是由窗口包装的。使用Portlet,您可以将多个Portlet并排放置,并且每个Portlet可以提供彼此不同的内容和功能。一个Portlet可以为一种类型的应用程序提供完整的交互,而另一个Portlet可以为另一种类型的应用程序提供内容。该门户网站可以提供一些内部整理功能,并确保页面上所有portlet的安全单入口。至于它们之间的细节(相似/不同),请继续阅读。这里有一些相似之处:

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.