我可以仅使用应用程序服务器(Tomcat、JBoss 等)创建 Java 门户 (JSR 168/286) 吗?

Can I create a Java Portal (JSR 168/286) using only an application server (Tomcat, JBoss, etc)?

我想使用 Java 规范创建一个轻量级门户。我希望能够在不同的应用程序服务器(在本例中为 WebSphere,Tomcat 和 JBoss)中部署相同的门户项目。

我已经检查过像 Liferay 这样的产品,但是 我想创建自己的框架和界面,并且只是嵌入 Java Portlets,而不是使用 Liferay 的完整框架和界面。

使用 IBM WebSphere(不是 WebSphere Portal),我遵循了以下指南:

"Exploiting the WebSphere Application Server V6.1 portlet container: Part 1: Introducing the portlet container"

我设法创建了一个简单的 JSP 嵌入两个简单的 portlet。每个 portlet 项目都是与产品无关的(与 Liferay 或 Apache Pluto 项目相反,它们包括特定于产品的配置文件)。这就是我想做的。

问题是,如果我尝试 运行 Tomcat 或 JBoss 中的相同项目,它们将无法正常工作。正如我之前所说,这些项目没有任何 IBM 或 WebSphere 特定的配置文件。

那么,我的问题是:

  1. 有没有一种方法可以使用 Java Portlet 项目而无需添加 特定于供应商的文件或代码,并将它们添加到任何应用程序服务器?
  2. 在哪里可以找到指南 创建与应用程序服务器无关的 portlet 和门户?
  3. 是不是 WebSphere 有一个 Portlet 容器但其他服务器 不?
  1. Is there a way to use Java Portlet projects without having to add vendor-specific files or code, and add them to any application server?

没有。 tomcat、jboss 等是 Servlet 容器,对于 运行 portlet,您需要 Portlet 容器,它实际上由 Liferay 等门户提供。

  1. Where can I find the guidelines to create application-server-agnostic portlets and portals?

JSR specification gives you the guide-lines. Here is a good link 为之。我再次重复 Portlet,就像 Servlet 需要 Servlet 容器一样,它们需要 Portlet 容器。但是,当您已经拥有功能齐全的 Portlet 容器(如 Liferay、IBM 等)时,这将是重新发明轮子,这些容器是根据具有许多附加功能的规范创建的。 Liferay 是一个 portlet 容器,它 运行 在大多数应用程序服务器上,如果您创建一个 portlet 而不使用任何特定于供应商的 API 那么它应该 运行 在所有不同的Liferay、IBM 等门户网站,只需添加一些配置文件即可获得额外的用户体验和功能。

  1. Is it the case that WebSphere has a portlet container but the other servers don't?

是的。 :-) 至少您链接到的文章清楚地提到它有一个 portlet 容器:

This article series examines the JSR 168 portlet container available in IBM WebSphere Application Server V6.1 and differentiates its use from WebSphere Portal.

希望这对您有所帮助并助您一臂之力。

WebSphere 提供 Portlet container 开箱即用,因为这不是 Java EE 规范所要求的,其他服务器可能需要添加第三方容器和其他配置来为 portlet 提供服务。 对于基本的 portlet,您将不需要任何特定于供应商的代码或描述符来 运行 它们在 WebSphere 中,就像您测试的那样。

您还可以查看 WebSphere Liberty,它是一个轻量级服务器,也支持 portlet 容器,但功能不如完整的 WebSphere - Developing portlets in Liberty