First off, make sure you're not making the mistake that everyone makes. That mistake is confusing the
resource name with the
URL name.
The URL is what the client uses to reference things. The resource name is the actual name of the resource file in the WAR. The distinction is critical in JSF, since if you supply a url such as "host:/context/myPage.jsf" and you have your web.xml URL handlers set up the same way that I (and a lot of other people) do, the container will pick up on the "*.jsf" URL
pattern, route the URL to the FacesServlet, and the FacesServlet will dissect the URL and convert it to the resource name "myPage.xhtml".
If you use the ".jsp" extension and your mappings are not set up properly, the Facelets code won't translate properly and the Facelets templating process will not be applied. Since Facelets was originally a separate subsystem prior to JSF2, Facelets has its own configuration options that work in conjunction with the FacesServlet processing.
The secret of how to be miserable is to constantly expect things are going to happen the way that they are "supposed" to happen.
You can have faith, which carries the understanding that you may be disappointed. Then there's being a willfully-blind idiot, which virtually guarantees it.