"index.jsp" does not match your servlet filter
pattern. Therefore, the request didn't get routed to the FacesServlet and the container attempted to compile index.jsp and execute it as a plain old
JSP. However, since the index.jsp resource referenced JSF resources, it needed a FacesContext.
The FacesContext is created by the FacesServlet to handle the current request. Once the request has been processed, the FacesContext is destroyed. There will be no FacesContext until another request goes through the FacesServlet, at which time the cycle repeats.
It's important to understand the difference between URLs and resources. I'm using Facelets, so my View definition resources have names suffixed with ".xhtml".
Because of the filters I have set in web.xml, a "mypage.jsf" URL will be routed to the FacesServlet, which has been primed to locate resources by ripping the ".jsf" off the URL and replacing it with ".xhtml". So the "mypage.xhtml" resource will be used by the FacesServlet to render the view requested by "myfaces.jsf".