Portlet 和 servlet 之间有什么区别?

2022-08-31 10:16:50

我被要求在 Portlet 和门户上工作。

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

Portlet 与 servlet 有何不同(可能在功能上)?


答案 1

从源代码增强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 容器中。它是在 Portlet 容器中从渲染阶段到操作阶段(或任何较低阶段)共享数据(粗略的 Portlet 间通信)的方法之一。

  8. Servlet 和 Portlet 都使用支持它的类似服务器/虚拟机环境。虽然,在 Portlet 的情况下可能需要一些额外的配置来使其滴答作响

  9. 构建/ DI工具对于两者都是相似的 - Ant,Maven,Gradle等都受支持。主要是:) - 这在Liferay 7中发生了一些变化。


不同之处

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

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

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

  4. 与 servlet 不同的 Portlet 没有附加 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 的典型方法是 、 和 servlet 的方法是 、 、 。doView()doEdit()doHelp()processAction()service()doPost()doGet()

  13. Servlet Specification - 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,这在不使用特殊库(如 OSGi)对应用程序进行模块化的情况下是不可能实现的。


编辑(来自评论)

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


答案 2

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

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


推荐