This week's book giveaway is in the OO, Patterns, UML and Refactoring forum. We're giving away four copies of Refactoring for Software Design Smells: Managing Technical Debt and have Girish Suryanarayana, Ganesh Samarthyam & Tushar Sharma on-line! See this thread for details.
I think you're confusing resource names with URLs. They look a lot alike, but their functionality is totally different.
A resource (path)name is the directory/filename path for a resource such as an xhtml file within a WAR.
A URL is an Uniform Resource Locator, and what it really is is a more-or-less random string obeying certain formatting rules (which, alas, look a lot like filename paths), that is parsed and used to dispatch work in a webapp server.
In the case of JSF, the URL generally either contains the sub-path "/faces/" or ends with ".jsf". The web.xml has a corresponding pattern-match rule that routes URLs that match to the FacesServlet.
Unlike old-style JSPs, JSF View Definitions (xhtml files) are not compiled into servlets. Instead, the FacesServlet compiles them into a 2-dimensional tree-shaped data structure and uses that structure (component tree) as a reference for processing the JSF lifecycle. JSF is a Model/View/Controller implementation, and the FacesServlet is the primary Controller.
Therefore, if you want proper JSF processing, the URL should not end with ".xhtml", it must end with ".jsf", so that the FacesServlet will see it.
So how does a ".jsf" locate a ".xhtml"? Simple. The FacesServlet parses the URL to get the resource path string, substitutes, ".xhtml" for ".jsf", then opens the xhtml resource and digests the View Definition in that resource.
Customer surveys are for companies who didn't pay proper attention to begin with.
Facelets View mappings is not related to the formation of the URL. It's the rule that says how a URL is to be remapped into a Facelets resource. In other words, "http://myserver.com:8080/xyz/abc.jsf" will be remapped to the resource path "/xyz/abc.xhtml".
If I changed the view mapping from "*.xhtml" to "*.glork", then the file defining the view would have to be named xyz/abc.glork, instead.
The ".xhtml" should NEVER be part of any URL unless you remap the standard conventions to be effectively inside-out. The URL should be "index.jsf", not "index.xhtml". If it isn't, like I said, the FacesServlet won't process it.