【发布时间】:2015-07-17 08:30:59
【问题描述】:
我已经开始学习 JSF,我想知道在我们的类路径中包含什么 JAR 以开始使用 JSF。是jsf-api 还是jsf-impl?或者我们必须同时包含两者?如果两者都是,那么为什么它们不合并?
【问题讨论】:
-
应用服务器提供 JSF 实现。如果您碰巧使用了一个,则不需要添加其他内容,除非默认版本不是您需要的。
我已经开始学习 JSF,我想知道在我们的类路径中包含什么 JAR 以开始使用 JSF。是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。
【讨论】: