我被要求在 portlet 和门户网站上工作。
我想知道portlet 和servlet 之间的区别?
portlet 与 servlet 有何不同/在哪里(可能在功能上)?
我被要求在 portlet 和门户网站上工作。
我想知道portlet 和servlet 之间的区别?
portlet 与 servlet 有何不同/在哪里(可能在功能上)?
从源头增强: Servlet 与 Portlet
相似之处
Servlet 和 Portlet 是基于 Web 的组件,它们使用 Java 来实现它们。
Portlet 由 portlet 容器管理,就像 servlet 由 servlet 容器管理一样。
Portlet 和 Servlet 都可以生成静态和动态内容。
portlet 和 servlet 的生命周期由容器控制
客户端/服务器模型用于 servlet 和 portlet
打包和部署本质上是相同的,WAR/EAR。
Application Session 存在于 Servlet 和 Portlet 容器中。它是在 Portlet 容器中从呈现阶段到操作阶段(或任何较低阶段)共享数据(粗略的 Portlet 间通信)的方式之一。
Servlet 和 Portlet 都使用支持它的类似服务器/VM 环境。虽然,在 portlet 的情况下可能需要一些额外的配置才能使其生效
两者的构建/DI 工具相似——都支持 Ant、Maven、Gradle 等。大多数情况下:) - Liferay 7 改变了一点。
不同之处
Servlet 可以呈现完整的网页,而 Portlet 呈现 html 片段。这些片段由门户聚合成一个完整的网页。
JSR 168 portlet 的内容类型只能是 cHTML、XHTML、WML。它不支持其他内容类型。
不允许 Portlet 生成包含诸如 body、frame、frameset、head、html 或 title 等标签的 HTML 代码。
与 servlet 不同的 Portlet 没有附加 URL,因此不能直接访问。只能通过包含 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 的部署涉及与Servlet 应用程序不同的方法。一些提供者(Liferay/Alfresco/WebSphere)支持热部署 portlet 而无需重新启动服务器,这在 servlet 的情况下是不可能的,而无需使用特殊库(如 OSGi)对应用程序进行模块化。
编辑 (来自评论)
Portlet 容器建立在 Servlet 容器之上。所以最终可以说portlet 在一个Servlet Container 上运行。但是在开发应用程序时,我们将 portlet 容器与 Servlet/Java EE 容器分开查看。
Portlet 是规范门户容器和组件的 JSR-168 标准的一部分。这是与 Web 容器(和 servlet)标准不同的标准。尽管这两个标准之间肯定有很强的相似之处,但它们在容器、API、生命周期、配置、部署等方面有所不同。
portlet 与 servlet 之间的主要区别可能在于,虽然 servlet 始终响应单一类型的操作 - request,但 portlet(由于其生命周期的性质和更强大的容器绑定)必须响应两种类型的操作:render和request。当然还有更多,但是当我学习门户网站开发时,我发现这是两者之间的核心区别。
portlet 和 servlet 都接收一个 http 请求并返回一个响应,通常是一些可以由浏览器呈现的 HTML。Portlet 在“Portal”的上下文中使用,其想法是用户看到的单个页面有很多部分,想想瓦片,每个来自不同的 Portlet。
现在,您可以从普通的服务中获得这种“平铺”效果(参见 Struts + Tiles 了解如何操作的示例),portlet 的额外之处在于,portlet 位于门户提供的更丰富的环境中,提供了额外的 API,以便任何 portlet 显示的内容都可以由个人用户根据他们的偏好进行配置,并且这些 portlet 可以相互通信 - 按下一个按钮,在另一个中发生某些事情。
Servlet 有一个 java 定义(处理 HTTP GET/POST 请求的应用程序),而 portlet 有一个用户界面定义。执行特定功能的组件类似于 windows vista 小部件或这里堆栈溢出中使用的许多组件。它们不一定需要服务器端的 servlet 支持。但是 Portlet 标准是与 java 一起开发的。O'Reilly 有一个很好的教程。
本质上,Servlet 提供通常占据浏览器中整个页面的内容(除非您使用框架),而 portlet 提供由窗口包装的内容。使用 portlet,您可以将多个 portlet 并排放置,并且每个 portlet 都可以提供彼此不同的内容和功能。一个portlet 可以为一种类型的应用程序提供完整的交互,而另一个portlet 可以为另一种类型的应用程序提供内容。门户可以为页面上的所有 portlet 提供一些内务管理功能和安全的单一入口点。至于它们之间的细节(相同点/不同点),请继续阅读。以下是一些相似之处: