我有一个 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 也不应该是编程话题!所以请不要因为这个原因降级!