2

在使用 servlet 和 JSP 一段时间后,现在我正在尝试学习一些有关 JSF 的知识。我已经学习了基础知识,做了几个简单的例子,对“工作流程”有一个基本的想法,但我仍然不明白 javax.faces.webapp.FacesServlet 是什么。

<servlet>
  <servlet-name>Faces Servlet</servlet-name>
  <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
  </servlet>
<servlet-mapping>
  <servlet-name>Faces Servlet</servlet-name>
  <url-pattern>*.jsf</url-pattern>
  </servlet-mapping>

我知道“Faces Servlet”只是 XML 的“内部”名称,并且它与一个类绑定,在本例中为:javax.faces.webapp.FacesServlet。但是这门课到底在哪里?!我正在使用 Eclipse,创建了一个新的动态项目,GlassFish 4.0 作为服务器,JSF 2.0 作为配置(未选择库),我也没有导入任何 jar。它怎么能工作?当我尝试用 JBoss 运行相同的东西时,我必须导入一个 javax.faces-2.2.2.jar 文件。

好的,该库可能已经包含在 GlassFish 中,因为它可以工作,但是......如果我尝试在另一台服务器上部署我的应用程序,我会遇到任何问题吗?像 JBoss 或 Websphere。

简而言之:使用 JSF 技术的先决条件是什么 :)

谢谢你。

4

1 回答 1

8

javax.faces.webapp.FacesServlet是一个实现Servlet接口的类。为了在您的应用程序中被识别,您应该在 web.xml 中将其添加为<servlet>. 这基本上是在这个配置中完成的:

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

现在,我们可以使用Faces Servlet名称在 web.xml 文件中引用这个类。接下来要做的是定义将由该 servlet 处理的 URL。这是在此配置中完成的:

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
</servlet-mapping>

因此,任何以jsf后缀结尾的应用服务器的 GET 或 POST 请求都将由 Faces Servlet 处理。您可以将其他 URL 模式用于 servlet 映射。在这里可以更好地解释:JSF Facelets:有时我看到 URL 是 .jsf,有时是 .xhtml。为什么?

如果我尝试在另一台服务器上部署我的应用程序,我会遇到任何问题吗?喜欢 JBoss 还是 Websphere?

如果应用程序服务器是符合 Java EE 5 的服务器,那么您将可以通过使用 JSF 1.2 形式的 Mojarra 实现来访问此 servlet。对于符合 Java EE 6 的服务器,这将在 JSF 2.x 中的 Mojarra 实现中(查看应用程序服务器的注释以了解确切的版本)。目前,使用 GlassFish 4,您可以获得用于 JSF 2.2 的 Mojarra。

如果应用程序服务器不是符合 Java EE 的服务器,例如 Tomcat,您必须在 Web 应用程序的 WEB-INF/lib 文件夹中手动添加库。要添加哪些库?取决于 JSF 版本及其要求(进一步阅读)。

使用 JSF 技术的先决条件是什么?

这在StackOverflow JSF wiki中有介绍。取自那里:

最低要求

  • JSF 1.0 和 1.1 至少需要 Servlet 2.4 / JSP 2.0 和 Java 1.4。
  • JSF 1.2 在 Servlet 2.4 上工作,但至少需要与 Servlet 2.5 齐头并进的 JSP/EL 2.1,所以它毕竟需要 Servlet 2.5。如果您将 JSP 2.1 替换为 Facelets 1.x 作为默认视图技术,那么您可以在 Servlet 2.4 上使用 JSF 1.2。它至少需要 Java 1.5。
  • 默认情况下使用 Facelets 2.x 的 JSF 2.0 至少需要与 Servlet 2.5 齐头并进的 EL 2.1,因此它毕竟需要 Servlet 2.5。如果您提供自己的 EL 2.1 API/impl,那么理论上您可以在 Servlet 2.4 上运行 JSF 2.0。它至少需要 Java 1.5。
  • JSF 2.1 使用了一些 Servlet 3.0 特定的特性,但向后兼容 Servlet 2.5。这些 Servlet 3.0 特性是可选的。
  • JSF 2.2 至少需要 Servlet 3.0,因为新的文件上传组件在内部使用标准 Servlet 3.0 API,而不需要第三方库。它至少需要 Java 1.6。

Servlet 2.4 容器的示例有 Tomcat 5.5.x、JBoss AS 4.x 和 Sun Java Application Server。

Servlet 2.5 容器的示例有 Tomcat 6.0.x、JBoss AS 5.x 和 GlassFish 2.x。

Servlet 3.0 容器的示例有 Tomcat 7.0.x、JBoss AS 6.x 和 7.x 以及 GlassFish 3.x。

Servlet 3.1 容器的示例有 Tomcat 8.0.x、WildFly 8.x 和 GlassFish 4.x。

于 2013-08-12T19:20:31.393 回答