Jsf 2 如何正确地将JSF2.0Web应用程序导出到war中?

Jsf 2 如何正确地将JSF2.0Web应用程序导出到war中?,jsf-2,ejb,glassfish-3,java-ee-6,war,Jsf 2,Ejb,Glassfish 3,Java Ee 6,War,我有一个JSF2.0Web项目,我使用GlassFish3.1.2服务器。在本项目中,除其他事项外,我有: 一个名为AjaxServlet的类,用@javax.servlet.annotation.WebServlet注释 一个名为Session的类,用@javax.ejb.Stateful注释 当我从eclipse将这个项目部署到Glassfish时,一切都运行得很好:在Glassfish的管理控制台中,与应用程序相关联的引擎是[ejb、jpa、web、weld]。但是当我第一次将项目导出

我有一个JSF2.0Web项目,我使用GlassFish3.1.2服务器。在本项目中,除其他事项外,我有:

  • 一个名为AjaxServlet的类,用@javax.servlet.annotation.WebServlet注释
  • 一个名为Session的类,用@javax.ejb.Stateful注释
当我从eclipse将这个项目部署到Glassfish时,一切都运行得很好:在Glassfish的管理控制台中,与应用程序相关联的引擎是[ejb、jpa、web、weld]。但是当我第一次将项目导出为war,然后从管理控制台部署war时,应用程序不起作用:与应用程序相关联的引擎当时只是[web]

如何将应用程序导出到war而不丢失任何信息(所有引擎)?我没有在web.xml中声明Servlet,因为在JSF2.0中,我们不需要它:注释就足够了。有人知道这里发生了什么吗?我很确定这不是Glassfish发行版的问题(Web配置文件与完整平台),因为相同的Glassfish服务器用于上述两种场景


对于那些错误地认为我的问题离题的人,请注意:Jsf是一个用于编程JavaEEWeb应用程序的框架。war是一种打包Jsf应用程序的方法,正如jar是打包java类的方法一样。所以我的问题完全是一个编程主题!把它放在这里是完全合法的。若将JSF应用程序导出到war中不是一个编程问题,那个么将java类编译成.class也不应该是一个编程主题!所以请不要因为这个原因降级

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

这里有一个提示:

右键单击project->导航到属性>Java构建路径>排序和导出,并确保您需要的所有库都将导出


JSF是视图技术,是JEE堆栈的一部分。War和JSF没有直接关系。你的问题更多的是如何将JEE webapp打包成一场战争。这取决于您使用什么工具来管理和构建您的项目(eclipse项目,maven…),我的问题是为什么会有不同?为什么在我使用eclipse部署应用程序时,一切都能正常工作,而在我第一次导出为war然后部署war时,一切都不能正常工作?