0

我有一个 JSF 2.0 Web 项目,我使用 Glassfish 3.1.2 服务器。在这个项目中,我除其他外还有:

  • 一个名为 AjaxServlet 的类,用 @javax.servlet.annotation.WebServlet 注释
  • 一个名为 Session 的类,用 @javax.ejb.Stateful 注释

当我从 Eclipse 将这个项目部署到 Glassfish 时,一切都运行良好:在 Glassfish 的管理控制台中,与应用程序关联的引擎是 [ejb, jpa, web, Weld]。但是当我第一次将项目导出为战争时,然后从管理控制台部署战争时,应用程序不起作用:与应用程序关联的引擎只有 [web]。

如何在不丢失任何信息(所有引擎)的情况下将应用程序导出到战争?我没有在 web.xml 中声明我的 Servlet,因为在 JSF 2.0 中,我们不需要它:注释就足够了。有谁知道这里发生了什么?我很确定这不是 Glassfish 发行版(Web Profile Vs Full Platform)的问题,因为相同的 Glassfish 服务器用于上述 2 个场景。

请注意那些错误地认为我的问题离题的人:Jsf 是一个用于编写 Java EE Web 应用程序的框架。war 是一种打包 Jsf 应用程序的方式,就像 jar 是一种打包 java 类的方式一样。所以我的问题完全是一个编程话题!在 StackOverflow 中使用它是完全合法的。如果将 JSF 应用程序导出到 war 不是编程问题,那么将 java 类编译成 .class 也不应该是编程话题!所以请不要因为这个原因降级!

4

1 回答 1

1

您必须了解eclipse 环境glassfish 环境之间的区别。并非所有在 eclipse 中可用的库都可能包含在您的外部环境中。有些情况下程序在 Eclipse 中编译,但不是从控制台运行时。

这里有一个提示:

右键单击项目 -> 导航到Properties > Java Build Path > Order and Export,并确保您需要的所有库都将被导出。

于 2013-02-22T11:17:07.853 回答