JSF和图书馆Unclarity

时间:2013-08-12 19:11:44

标签: java eclipse jsf

在花了一些时间用于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技术时的先决条件是什么:)

谢谢。

1 个答案:

答案 0 :(得分:8)

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

<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: Sometimes I see the URL is .jsf and sometimes .xhtml. Why?

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

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

如果应用程序服务器不是符合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,但需要最少的JSP / EL 2.1,它与Servlet 2.5密切相关,因此它毕竟需要Servlet 2.5。如果您将Facelets 1.x中的JSP 2.1替换为默认视图技术,那么您可以在Servlet 2.4上使用JSF 1.2。它至少需要Java 1.5。
  •   
  • 默认情况下使用的JSF 2.0 Facelets 2.x需要最少的EL 2.1,它与Servlet 2.5密切相关,因此它需要在所有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.