I hate to contradict you, Gregg, but JSP JSPs are not "real" JSPs!
JSF is a Model/View/Controller system where the ".jsp" or ".xhtml" files are View prototypes.
In a normal JSP, the JSP is compiled to produce a
servlet and the tags are enlisted in the execution of that servlet. Also, the URL is implicitly mapped to that servlet. In JSF, a URL mapping in web.xml routes JSF URLs to the FacesServlet. The FacesServlet is responsible for getting the View Prototype compiled into internal JSF constructs. This is one of the prime reasons that logic-oriented JSTL and scriptlets give so many problems when used in JSF View definitions.
It is perfectly legal to mix JSPs, Servlets, and even other frameworks such as
Struts into a JSF application. In some cases, that's even preferable, since, for example, it's easier for a custom servlet to create a PDF than to badger the JSF framework to do so, since JSF is normally trying to render HTML, not PostScript. The difference between a JSP and a ".jsp" that's actually a JSF View prototype is strictly in whether or not the URL that makes the request matches the
pattern that maps URLs to go to the FacesServlet. If it matches, it's JSF. If it doesn't, it's processed as a traditional JSP. If the JSP has JSF tags but is executed as though it were a traditional JSP, unhappiness results, as many of us have discovered to our sorrow. For one thing, the FacesContext won't have been constructed.