A JSF application is just like any other Java Web application. It runs in a servlet container, and it typically contains:
Java Beans that hold data and application-specific functionality
Server-side classes, such as database access beans
In addition to these common items, a JSF application also has:
A custom tag library for rendering UI components on a page. This is called the component tag library, and it is provided by the JSF implementation. The component tag library eliminates the need to hardcode UI components in any specific markup language, such as HTML. This results in completely reusable UI components.
A custom tag library for representing event handlers, validators and other actions. ...