有时我看到JSF URL是*.jsf,有时是*.xhtml,有时是/ faces/*.为什么?

Tha*_*ham 57 jsf web.xml facelets url-pattern

一直试着学习JSF,有时候我看到的URL *.jsf有时是*.xhtml或者/faces/*.请问有人填写我的知识吗?当我使用Facelet创建JSF时,文件扩展名是.xhtml,所以.jsfURL扩展来自哪里?

Bal*_*usC 99

所述.jsf扩展是在FacesServletIS在JSF 1.2期间经常在映射上web.xml.

<servlet-mapping>
    <servlet-name>facesServlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

.xhtml扩展是的实际的Facelets文件作为你身体放置在你的web应用,例如在web内容Webapp/WebContent/page.xhtml.

如果您使用.jsf扩展名调用此页面,例如,http://localhost:8080/webapp/page.jsf那么FacesServlet将调用它,找到该page.xhtml文件并解析/呈现其JSF​​组件.如果FacesServlet未调用,则最终用户将最终获得原始XHTML源代码(可以通过右键单击View Source查看).

有时使用*.faces扩展或文件/faces/*夹映射.但这是从JSF 1.0/1.1时代开始的.你可以自由选择和使用你想要FacesServlet听的任何地图,即使这是一个无所谓的说法*.xyz.实际的页面本身应该始终具有.xhtml扩展名,但是这是由以下configureable <context-param>web.xml:

<context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.xml</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)

这将更FacesServlet改为定位page.xml(默认)的instad 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>
Run Code Online (Sandbox Code Playgroud)

这样,您无需配置某些安全限制来隐藏原始源文件,以防止最终用户.jsf在URL中更改为.xhtml浏览器地址栏时的情况.只有工具(IDE和插件)和学习资源仍然需要赶上从倡导举动*.jsf*.xhtml.根据JSF 2.3,FacesServlet默认情况下将自动注册*.xhtml(旁边/faces/*,*.faces*.jsf).这被移植到Mojarra 2.2.11.

也可以看看:

  • 当servletcontainer启动时,它会解析web.xml,加载所有servlet,记住映射,然后在每个请求中检查url是否与servlet映射匹配,然后调用servlet.另请参阅[此答案](http://stackoverflow.com/questions/2183974/difference-each-instance-of-servlet-and-each-thread-of-servlet-in-servlets/2184147#2184147)例. (10认同)

归档时间:

查看次数:

40187 次

最近记录:

7 年,6 月 前