1. La servlet FacesServlet
La servlet FacesServlet est une implémentation de l'interface javax.servlet.Servlet. Elle sert de contrôleur central par lequel passent toutes les requêtes de toute application web développée avec JSF. Par exemple, lorsque l'utilisateur clique sur un bouton, cela provoque l'envoi d'une requête au serveur via le protocole HTTP; la requête est interceptée par la Servlet "javax.faces.webapp.FacesServlet" qui l'examine et se charge de l'exécution des différentes actions qu'elle porte.
En coulisse donc, la Servlet FacesServlet prend les requêtes entrantes et donne le contrôle de ces dernières à l'objet Lifecycle (c'est une classe abstraite du package "javax.faces.lifecycle"). La servlet FacesServlet via sa méthode "service (...)" (voir le fonctionnement des Servlet) crée un objet "javax.faces.context.FacesContext" qui contient les informations des différents états de chaque requête qu'elle reçoit. L'objet "Lifecycle" utilise l'objet FacesContext en passant par six étapes (décrites au chapitre précédent) successives avant de retourner la réponse.
Comme la Servlet FacesServlet fait partie de l'implémentation de la technologie JSF on n'a pas accès à son code mais on peut influer sur son comportement en passant soit par les annotations soit par les descripteurs de déploiement (voir /WEB-INF/faces-config. xml).
Avant JSF 2.0, le seul choix possible pour se servir de la Servelt FacesServlet était le fichier de configuration. Désormais, à partir de JSF2.0 on peut le faire avec les beans gérés, les convertisseurs, les moteurs de rendu et les validateurs. L'utilisation des annotations permettent de se passer des fichiers de configuration XML et de les rendre facultatifs.
Comme on l'a dit ci-dessus, Cette classe est une Servlet et elle doit implémenter les méthodes de l'interface Servlet. C'est via la méthode service (ServletRequest req, ServletResponse resp) que la Servlet FacesServlet va acquérir une instance de la classe FacesContext (voir détails complète de la calsse FacesServlet).
2. La classe FacesContext
Dans JSF on a défini la classe abstraite "javax.faces.context.FacesContext" pour représenter les informations contextuelles associées au traitement d'une requête et à la production de la réponse correspondante. Cette classe permet d'interagir avec l'interface utilisateur et le reste de l'environnement JSF. Pour utiliser l'environnement JSF, on doit se servir de l'objet implicite facesContext dans les pages web (les objets implicites sont développés ultérieurement), soit obtenir une référence dans les beans gérés (Managed beans) à l'aide de la méthode statique getCurrentInstance(); celle-ci renverra une instance de FacesContext pour le thread courant et on pourra alors invoquer les méthodes adéquates associées à l'information qu'on veut traitée.