我已经开始学习JSF,我想知道在我们开始使用JSF的类路径中包含的JAR是什么。是jsf-api
还是jsf-impl
?还是两者都要包括?如果两者都是,那为什么它们不合并呢?
我假设您使用的不是真正的Java EE应用服务器,如WildFly、TomEE、Payara等,而是像Tomcat这样的准系统JSP/Servlet容器,它确实没有随JSF一起发货,因此您必须手动安装它。否则,所有这些关于jar的麻烦都是不必要的。
是jsf-api还是jsf-impl?还是两者都要包括?
你两者都需要。jsf-api.jar
包含API,它几乎只存在抽象类和接口。它是您在代码中导入和使用的javax.faces.*
类型。jsf-impl.jar
包含了实现,这是真正存在的辛勤工作的代码。实现是通过API中的工厂在内部加载的。它是您而不是应该在代码中直接导入和使用的com.sun.faces.*
类。如果您这样做,那么您将无法切换到不同的JSF实现,例如MyFaces。
如果两者都是,为什么它们不合并呢?
存在一个合并的JAR, javax.faces.jar
。您可以选择这一个,而不是两个松散的jar。
参见:
- 我们的JSF wiki页面
- JSF实现和组件库
- Mojarra和MyFaces的区别 用最简单的术语来说,什么是工厂?
- 如何通过Maven正确安装和配置JSF库?