They're often the same, but technically an app server is not limited to HTTP requests, and is often behind a web server and provides "business logic" in the form of web service calls which are used to construct the actual resources requested by the end user. See this for more: http://www.javaworld.com/javaworld/javaqa/2002-08/01-qa-0823-appvswebserver.html
JSP is a Java technology that allows software developers to dynamically generate HTML, XML or other types of documents in response to a Web client request ( http://en.wikipedia.org/wiki/Java_Server_Pages ) hence, can be served by a webserver (tomcat).
JSF is a Java-based Web application framework that simplifies the development of user interfaces for Java EE applications. Out of the box, JSF uses JavaServer Pages for its display technology... ( http://en.wikipedia.org/wiki/Java_Server_Faces ).
That should explain it for you.