Premiers pas avec JSF

Premiers pas avec JSF

Java Server Faces (JSF) est un framework Java / J2ee basé sur des composants permettant le développement d’applications Web.

Pour présenter cet outil, nous allons mettre en place un simple Hello World.

Bien sûr, il ne s’agit que d’un exemple afin d’avoir un point de départ pour une application plus évoluée.

Environnement

Nous travaillerons sous Eclipse et déploierons l’application sous Tomcat.

Voici la configuration utilisée pour ce tutoriel :

  • Eclipse 3.5 Galileo
  • Tomcat 6.0.20
  • JDK Sun 1.6
  • JSF 1.2

Création du projet

Pour démarrer, il faut créer un projet Web Dynamique (Dynamic Web Project) sous Eclipse.

Nous le nommerons PremiersPasAvecJSF.

Dans la vue Navigator, le projet se présent comme ci-dessous :

PremiersPasAvecJSF
 |- .settings/
 |- build/
 |- src/
 |- WebContent/
 |   |- META-INF/
 |   |- WEB-INF/
 |   |   |- lib/
 |   |   |- web.xml
 |- .classpath
 |- .project

Préparation

Nous allons maintenant mettre en place les librairies nécessaires au projet.

Pour cela, nous aurons besoin de télécharger les fichiers JAR nécessaires sur le site du projet : https://javaserverfaces.dev.java.net/.

Nous utiliserons jsf-api.jar et jsf-impl.jar ; pour cela, copier ces 2 fichiers dans le répertoire lib du projet.

Il est possible qu’une exception soit levée au moment de l’exécution si votre serveur ne dispose pas des librairies JSTL.

Si c’est le cas, vous pourrez télécharger les JAR à cette adresse : https://jstl.dev.java.net/.

Il vous suffira alors de copier ces fichiers dans le répertoire lib.

Configuration

Il faut tout d’abord mettre en place la configuration dans le fichier web.xml afin que les requêtes soient interprétées par la servlet JSF FacesServlet.

Pour cela, nous déclarons dans un premier la servlet :

<servlet>
  <display-name>JSF Servlet</display-name>
  <servlet-name>faces</servlet-name>
  <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>

Ensuite, nous déclarons le mapping afin d’indiquer que toute requête se terminant par jsf sera gérée par la servlet :

<servlet-mapping>
  <servlet-name>faces</servlet-name>
  <url-pattern>*.jsf</url-pattern>
</servlet-mapping>

Mise en place de la JSP

Nous allons maintenant écrire la page (JSP) permettant d’afficher notre texte.

Pour cela, nous créons un fichier hello.jsp dans le répertoire WebContent du projet.

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<f:view>
  <h:outputText value="Hello World avec JSF!" />
</f:view>

Vous pouvez remarquer que nous utilisons 2 types d’éléments :

  • f:view : conteneur de tous les éléments JSF
  • h:outputText : permet d’afficher du texte

JSF met à disposition 2 librairies de tags :

  • core : tags définissant les éléments indépendant du rendu (HTML ou autre)
  • html : tags définissant les éléments HTML

Vous pourrez trouvez plus de détails sur ce site : http://java.sun.com/javaee/javaserverfaces/2.0/docs/pdldocs/facelets/index.html.

Test

Vous pouvez maintenant déployer le projet dans votre serveur (ici, Tomcat 6) et tester en utilisant l’url http://localhost:8080/PremiersPasAvecJSF/hello.jsf.

En effet, pour appeler la JSP que nous avons créées, il suffit d’appeler cette JSP en remplaçant l’extension (jsp) par jsf.

Vous devez alors voir une page affichant Hello World avec JSF!.

Sécurité

Ouvrons une petite parenthèse sur la sécurité et, en particulier, sur l’accès direct aux JSP.

En effet, comme nous avons placé les JSP dans le répertoire WebContent du projet, elles sont directement accessibles par l’utilisateur.

Pour remédier à cela, il suffit d’interdire l’appel direct aux JSP dans le fichier web.xml.

<security-constraint>
  <web-resource-collection>
    <web-resource-name>no-jsp-access</web-resource-name>
    <url-pattern>*.jsp</url-pattern>
  </web-resource-collection>
  <auth-constraint>
    <description>No direct access to JSP</description>
  </auth-constraint>
</security-constraint>

web.xml

Pour finir, voici le fichier web.xml complet tu projet.

<?xml version="1.0" encoding="UTF-8"?>
<web-app
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    id="WebApp_ID"
    version="2.5">
  <display-name>PremiersPasAvecJSF</display-name>

  <servlet>
    <display-name>JSF Servlet</display-name>
    <servlet-name>faces</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>faces</servlet-name>
    <url-pattern>*.jsf</url-pattern>
  </servlet-mapping>

  <security-constraint>
    <web-resource-collection>
      <web-resource-name>no-jsp-access</web-resource-name>
      <url-pattern>*.jsp</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <description>No direct access to JSP</description>
    </auth-constraint>
  </security-constraint>
</web-app>

Liens utiles