[英]What is the difference between creating JSF pages with .jsp or .xhtml or .jsf extension
我看到一些示例创建扩展名为.jsp
的JSF页面,其他示例使用.xhtml
扩展创建它们,其他示例选择.jsf
。 我只是想知道在使用JSF页面时上述扩展之间的区别是什么,以及如何选择适当的扩展名?
JSP是一种旧的视图技术,并与JSF 1.x结合使用。 Facelets(由一些人过度概括为XHTML )是JSP的继承者,并于2009年底作为JSF 2.x的默认视图技术引入。当您看到JSP时,您可能正在阅读过时的书籍,教程或针对JSF 1的资源。X。 在使用JSF 2.x进行开发时,通常应该忽略它们,然后转向针对JSF 2.x的资源,否则您可能最终会感到困惑,因为Facelets上的JSF 2.x中的许多内容都有所不同。
*.jsf
只是web.xml
FacesServlet
映射的广泛使用的URL模式之一。 其他的是*.faces
和/faces/*
,但这些都来自JSF 1.0 / 1.1时代。 它们都不代表具体的文件扩展名/路径,而只是一个虚拟文件扩展名/路径,并且只能在URL中指定http://example.com/contextname/page.jsf 。 如果您熟悉基本Servlet ,那么您应该知道当请求URL与servlet的URL模式匹配时,servletcontainer将调用servlet。 因此,当请求URL与*.jsf
匹配时,将以这种方式调用FacesServlet
。 使用JSP时,它实际上会执行page.jsp
。 使用Facelets时,实际上会编译page.xhtml
。
从JSF 2.x开始,您还可以使用*.xhtml
作为URL模式。 这样,您在指定URL时就不必感到困惑。 在使用Facelets 1.x的JSF 1.x中使用*.xhtml
作为URL模式是不可能的,因为FacesServlet
将在每次调用自身的无限循环中运行。 使用的另外一个优点*.xhtml
是,终端用户将无法看到原始JSF的源代码,只要最终用户有意改变来自例如在浏览器地址栏中的URL扩展.jsf
到.xhtml
。 不可能使用*.jsp
作为URL模式,因为这样已经使用该URL模式的容器的内置JspServlet
将被覆盖,然后FacesServlet
将无法再以JSP为基础。
.jsp
文件通常用于使用JavaServer Pages定义的JSF视图。 .xhtml
文件通常用于使用Facelets定义的JSF视图。
这可以通过配置更改(例如,请参阅javax.faces.DEFAULT_SUFFIX
和javax.faces.FACELETS_SUFFIX
配置参数。)
其他扩展映射( *.jsf
, *.faces
)倾向于用于通过FacesServlet
处理请求。 这是JSF运行时将处理的视图的逻辑映射。 如何处理映射在web.xml
定义(不必使用扩展来完成;经常使用/faces/*
映射。
从规格:
Servlet映射
基于将URL模式(如Java Servlet规范中所定义)与选择此Web应用程序的上下文路径之后的请求URL部分进行匹配,对Web应用程序的所有请求都映射到特定的servlet。 JSF实现必须支持定义
<servlet-mapping>
Web应用程序,该应用程序将任何有效的url-pattern映射到FacesServlet。 可以使用前缀或扩展映射。 使用前缀映射时,建议使用以下映射,但不是必需的:<servlet-mapping> <servlet-name> faces-servlet-name </servlet-name> <url-pattern>/faces/*</url-pattern> </servlet-mapping>
使用扩展映射时,建议使用以下映射,但不是必需的:
<servlet-mapping> <servlet-name> faces-servlet-name </servlet-name> <url-pattern>*.faces</url-pattern> </servlet-mapping>
除了FacesServlet之外,JSF实现还可以支持其他方式来调用JavaServer Faces请求处理生命周期,但依赖这些机制的应用程序将无法移植。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.