Si vous avez apprécié cette traduction,
merci de me soutenir:
Accueil Docs Forum

Utiliser les JSPs

Bien que nous pourrions générer le HTML de notre interface utilisateur directement depuis le code de la servlet Java™, ce serait difficile de le maintenir dès qu'il deviendrait plus complexe. Il est préferable d'utiliser un système de modèle, avec l'interface utilisateur conçue et implémentée dans des fichiers séparés avec des emplacements réservés et une logique propre pour insérer des données fournis par l'application. Il y a beaucoup de systèmes de modèle disponibles pour Java, tous fonctionneront sur App Engine.

Pour ce tutoriel, nous utiliserons les JavaServer Pages (JSPs) pour implémenter l'interface utilisateur pour le livre d'or. Les JSPs font partie du standard des servlets. App Engine compile les fichiers JSP dans la structure WAR automatiquement, et les associe aux URLs spécifiées.

Bonjour, JSP!

Notre application de livre d'or écrit des chaînes de caractères dans un flux de sortie, mais ce pourrait aussi bien être écrit via des JSPs. Commençons par porter la dernière version de l'exemple à une JSP.

Dans le répertoire war/, créez un fichier nommé guestbook.jsp avec le contenu suivant:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="com.google.appengine.api.users.User" %>
<%@ page import="com.google.appengine.api.users.UserService" %>
<%@ page import="com.google.appengine.api.users.UserServiceFactory" %>

<html>
<body>

<%
UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();
if (user != null) {
%>
<p>Hello, <%= user.getNickname() %>! (You can
<a href="<%= userService.createLogoutURL(request.getRequestURI()) %>">sign out</a>.)</p>
<%
} else {
%>
<p>Hello!
<a href="<%= userService.createLoginURL(request.getRequestURI()) %>">Sign in</a>
to include your name with greetings you post.</p>
<%
}
%>

</body>
</html>

Par défaut, n'importe quel fichier dans le répertoire war/ ou un sous-répertoire (autre que WEB-INF/) dont le nom finit par .jsp est automatiquement lié à une URL. Cette URL est le chemin vers le fichier .jsp, incluant le nom du fichier. Ainsi, ce JSP sera lié automatiquement à l'URL /guestbook.jsp.

Pour l'application du livre d'or, nous voulons que ce fichier soit la page d'accueil, affichée quand quelqu'un accède à l'URL /. Une méthode facile pour faire cela est de déclarer dans le fichier web.xml que guestbook.jsp est la servlet de bienvenue ("welcome") pour ce chemin.

Editez war/WEB-INF/web.xml et remplacez l'élément actuel <welcome-file> dans <welcome-file-list>. Assurez-vous de supprimer index.html de la liste, puisque les fichiers statiques sont prioritaires sur les JSPs et les servlets.

    <welcome-file-list>
<welcome-file>guestbook.jsp</welcome-file>
</welcome-file-list>

Astuce: Si vous utilisez Eclipse, l'éditeur peut ouvrir ce fichier en mode "Conception". Pour éditer ce fichier au format XML, sélectionner l'onglet "Source" en bas de la fenêtre.

Arrêter puis démarrer le serveur de développement. Visitez l'URL suivante:

L'application affiche le contenu de guestbook.jsp, incluant le nom de l'utilisateur si celui-ci est connecté.

Quand vous chargez une JSP pour la première fois, le serveur de développement la convertit en code source Java, puis compile le code source Java en code binaires Java (bytecode). Le source Java et les classes compilées sont sauvegardées vers un répertoire temporaire. Le serveur de développement regénère et compile les JSPs automatiquement si les fichiers JSPs originaux sont modifiés.

Quand vous chargez votre application sur App Engine, le SDK compile tous les JSPs en code binaire, et transfère seulement le code binaire. Quand votre application s'exécute sur App Engine, elle utilise les classes des JSP compilés.

Le formulaire du livre d'or

Notre application de livre d'or nécessitera un formulaire web afin que l'utilisateur puisse poster un nouveau message, ainsi qu'une méthode pour traiter ce formulaire. Le HTML du formulaire ira dans la JSP. La destination du formulaire sera une nouvelle URL, /sign, qui sera traitée par une nouvelle servlet, SignGuestbookServlet. SignGuestbookServlet traitera le formulaire, puis redirigera le navigateur de l'utilisateur vers /guestbook.jsp. Pour l'instant, la nouvelle servlet écrira le message dans les logs.

Editez guestbook.jsp, et insérez les lignes suivantes juste au dessus du tag fermant </body>:

  ...

<form action="/sign" method="post">
<div><textarea name="content" rows="3" cols="60"></textarea></div>
<div><input type="submit" value="Post Greeting" /></div>
</form>


</body>
</html>

Créez une nouvelle classe nommée SignGuestbookServlet dans le package guestbook. (Utilisateurs Non-Eclipse: créez le fichier SignGuestbookServlet.java dans le répertoire src/guestbook/.) Donnez le contenu suivant au fichier source:

package guestbook;

import java.io.IOException;
import java.util.logging.Logger;
import javax.servlet.http.*;
import com.google.appengine.api.users.User;
import com.google.appengine.api.users.UserService;
import com.google.appengine.api.users.UserServiceFactory;

public class SignGuestbookServlet extends HttpServlet {
   
private static final Logger log = Logger.getLogger(SignGuestbookServlet.class.getName());

   
public void doPost(HttpServletRequest req, HttpServletResponse resp)
               
throws IOException {
       
UserService userService = UserServiceFactory.getUserService();
       
User user = userService.getCurrentUser();

       
String content = req.getParameter("content");
       
if (content == null) {
            content
= "(No greeting)";
       
}
       
if (user != null) {
            log
.info("Greeting posted by user " + user.getNickname() + ": " + content);
       
} else {
            log
.info("Greeting posted anonymously: " + content);
       
}
        resp
.sendRedirect("/guestbook.jsp");
   
}
}

Editez war/WEB-INF/web.xml et ajoutez les lignes suivates pour déclarer la servlet SignGuestbookServlet et liez-la à l'URL /sign:

<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5">
...

<servlet>
<servlet-name>sign</servlet-name>
<servlet-class>guestbook.SignGuestbookServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>sign</servlet-name>
<url-pattern>/sign</url-pattern>
</servlet-mapping>


...
</web-app>

Cette nouvelle servlet utilise la classe java.util.logging.Logger pour écrire le message dans les logs. Vous pouvez controler le comportement de cette classe en utilisant le fichier logging.properties, et la propriété système spécifiée dans le fichier appengine-web.xml. Si vous utilisez Eclipse, votre application a été créée avec une version par défaut de ce fichier dans le répertoire src/ et les propriétés systèmes ont été spécifiées comme il faut.

Si vous n'utilisez pas Eclipse, vous devez configuré le fichier du loggueur manuellement. Copiez le fichier exemple du SDK appengine-java-sdk/config/user/logging.properties vers le répertoire de votre application war/WEB-INF/. Puis éditez le fichier war/WEB-INF/appengine-web.xml comme indiqué:

<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
...

<system-properties>
<property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
</system-properties>


</appengine-web-app>

La servlet écrit les messages de logs en utilisant le niveau de log INFO (en utilisant log.info()). Le niveau de log par défaut est WARNING, qui supprime les messages INFO de la sortie. Pour modifier le niveau de log de toutes les classes dans le package guestbook, editez le fichier logging.properties et ajoutez une entrée pour guestbook.level, comme indiqué:

.level = WARNING
guestbook.level = INFO

...

Astuce: Quand vos messages de logs applicatif utilisent l'API java.util.logging.Logger en tournant sur App Engine, App Engine enregistre les messages et vous permet de les consulter en ligne via la Console d'Adeministration, et vous permet de les télécharger en utilisant l'outil AppCfg. La Console d'Adeministration ("Admin Console") vous permet de consulter les messages par niveaux de logs.

Recompilez le projet et redémarrer le serveur, puis testez http://localhost:8080/. Le formulaire s'affiche. Entrez quelques textes dans le formulaire, et envoyer. Le navigateur envoie le formulaire à l'application, puis revient sur un formulaire vide. Le message que vous avez posté est loggé sur la console par le serveur.

Suite...

Nous avons une interface utilisateur qui demande un message au visiteur. Nous avons maintenant besoin d'une façon d'enregistrer ces messages, et les montrer aux autres visiteurs. Pour cela, nous utiliserons la base de données "App Engine datastore".

Continuer vers Utiliser le Datastore avec JDO.


Téléchargements

Pour débuter


Java


Google Groupes
S'abonner au groupe
GAE en français
Email: