作为一个曾经从事过开发Java portlets的人(包括我目前的工作),我认为你不应该使用它们。
问题在于:
如果你只是想使用所选择的门户网站的预先存在的功能,那么请使用门户网站。
如果你使用 portlets 只是为了构建一个小型、轻便、主要用于只读的基于 Web 的仪表板,以便快速查看不同的信息,那么这是可以的。
但如果你(或更可能是组织结构图上层的某个人)认为 portlets 是将许多不同的 Web 应用程序放在一个页面上并使它们“正常工作”的方法,则会遇到很多问题。Portlets 是高度限制的、自包含的功能区块,而不是页面上的微型 Web 应用程序。
每个基于 portlet 的工作都犯了这个错误,而且没有什么好办法。作为一个 portlet 开发者,以下是一些你通常在常规 Web 应用程序中做的事情,在 portlets 中无法可靠地执行的一些小清单:
生成指向其他页面的 URL。你需要使用供应商特定的方法来实现,因为 Portlet API 仅允许你生成针对生成它们的 portlet 的 URL。
读取和设置 HTTP 标头或设置 HTTP 响应代码(因此不能进行重定向或 HTTP 缓存,因为你不拥有将放置在 portlet 上的页面)。
必须对生成的页面中的所有标识符进行命名空间处理。这意味着 HTML id 属性和 JavaScript 函数名称。由于命名空间必须在运行时确定以确保唯一性,因此你不能让这些 JavaScript 函数驻留在一个单独的浏览器可缓存文件中,它们必须在 portlet 的响应正文中。
Portlets 的感觉就像是它们是为 90 年代中后期(AJAX 前)的 Web 开发状态而设计的。但是它们不适合今天的 Web 开发环境(AJAX、单页面富 Web 应用程序等),这些环境假定您完全控制请求/响应周期。