一直在尝试学习JSF,有时我看到的URL 是*.jsf
有时是*.xhtml
或/faces/*
。有人可以补充我的知识吗?当我使用 Facelet 创建 JSF 时,文件扩展名为.xhtml
,那么.jsf
URL 扩展来自哪里?
1 回答
.jsf
扩展是在FacesServlet
JSF 1.2 期间经常映射到web.xml
.
<servlet-mapping>
<servlet-name>facesServlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
.xhtml
扩展名是实际Facelets 文件的扩展名,因为您实际放置在 web 应用程序的 web 内容中,例如Webapp/WebContent/page.xhtml
.
如果您使用.jsf
扩展名调用此页面,例如http://localhost:8080/webapp/page.jsf
,FacesServlet
将调用该页面,定位page.xhtml
文件并解析/呈现其 JSF 组件。如果FacesServlet
没有调用,那么最终用户最终会得到原始的 XHTML 源代码(可以通过右键单击查看源代码来查看)。
有时会使用*.faces
扩展名或/faces/*
文件夹映射。但这是从 JSF 1.0/1.1 时代开始的。您可以自由选择和使用任何您FacesServlet
想听的映射,即使它是无话可说的*.xyz
。实际页面本身应始终具有.xhtml
扩展名,但这可以通过以下内容<context-param>
进行配置web.xml
:
<context-param>
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
<param-value>.xml</param-value>
</context-param>
这将改变FacesServlet
to locate page.xml
instad of (default) page.xhtml
。
最近,在 JSF/Facelets 2.0*.xhtml
中使用了映射。在 JSF/Facelets 1.x 中,不可能使用与物理文件相同的映射扩展名。这将导致无限循环。但由于 JSF/Facelets 2.0 是可能的,这允许您通过http://localhost:8080/webapp/page.xhtml
.
<servlet-mapping>
<servlet-name>facesServlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
这样,您无需配置一些安全限制来隐藏原始源文件,以应对最终用户.jsf
在 URL 中更改为.xhtml
浏览器地址栏中的情况。只有工具(IDE 和插件)和学习资源仍然需要赶上提倡的*.jsf
从*.xhtml
. 根据 JSF 2.3,FacesServlet
默认情况下也会自动注册(在和*.xhtml
旁边/faces/*
)。这是向后移植到 Mojarra 2.2.11。*.faces
*.jsf