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