JSP (JavaServer Pages) est une technologie de vue basée sur Java exécutée sur la machine serveur qui vous permet d'écrire du texte de modèle (dans les langages côté client comme HTML, CSS, JavaScript, etc.) et d'interagir avec le code Java principal.

JSP (pages JavaServer)

JSP est une technologie de vue Java exécutée sur un serveur qui vous permet d'écrire du texte de modèle dans des langages côté client tels que html, css, javascript, etc. JSP prend en charge les soi-disant balisesqui sont soutenues par des morceaux de code Java avec lesquels vous peut contrôler le flux de page et / ou la sortie de manière dynamique (par programme). Un taglib bien connu est JSTL. JSP prend également en charge le langage d'expression(el), avec une syntaxe comme ${}qui peut être utilisée pour accéder aux données de backend (en fait, les attributs qui sont disponibles dans les portées de page, de demande, de session et d'application), principalement en combinaison avec des balises d'étiquette.

Cycle de la vie

Lorsqu'un JSP est demandé pour la première fois ou lorsque la webapp démarre, le conteneur de servlet compile le fichier JSP dans une classe étendant HttpServletet l'utiliser pendant la durée de vie de la webapp. Vous pouvez trouver le code source généré dans le répertoire de travail du serveur. Dans, par exemple, Tomcat, il s'agit du répertoire /work. Sur une demande JSP, le conteneur de servlet exécutera la classe JSP compilée et enverra la sortie générée (généralement juste HTML / CSS / JS) via le serveur Web sur le réseau côté client, qui l'affichera à son tour dans le navigateur.

Installation de JSP

Pour exécuter JSP, vous avez besoin de:

  • JDK (JRE n'est suffisant que si le serveur a son propre compilateur).
  • Un conteneur de servlet.
  • Facultativement, un IDE compatible Java EE (éditeur de développement intégré).

La procédure d'installation de JDK ou JRE est décrite ici: https: //docs.oracle.com/javase/9/install/overview-jdk-9-and-jre-9-installation.htm

Il existe plusieurs conteneurs de servlets.

Il existe également des serveurs d'applications Java EE qui, à leur tour, contiennent également un conteneur de servlet à côté d'autres API Java EE telles que JSF, JPA, EJB, etc. Voir aussi Qu'est-ce que Java EE exactement?

L'installation d'un conteneur de servlet consiste généralement à télécharger le fichier zip / gz et à l'extraire à l'emplacement de votre choix.

En règle générale, vous souhaitez également utiliser un IDE tel que Eclipse, IntelliJou Netbeansafin que vous n'ayez pas besoin de compiler et de créer manuellement les fichiers source avec {{X0} }encore et encore. Les IDE décents ont des plugins pour intégrer de manière transparente le conteneur de servlet et importer les API Java EE nécessaires dans le chemin de génération du projet. Voir aussi Comment importer le javax API .servlet dans mon projet Eclipse?

Bonjour le monde

Cet exemple utilise JSTL et EL pour afficher l'IP de l'utilisateur et la date du jour.

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<jsp:useBean id="date" class="java.util.Date" />

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>JSP Hello World</title>
    </head>
    <body>
        <h1>Hello</h1>
        <p>Welcome, user from <c:out value="${pageContext.request.remoteAddr}" />
        <p>It's now <fmt:formatDate value="${date}" pattern="MM/dd/yyyy HH:mm" />
    </body>
</html>

Enregistrez-le sous /hello.jsp et ouvrez-le par http: // localhost: 8080 / contextname / hello.jsp.

Si JSTL ne fonctionne pas (les balises JSTL ne sont pas analysées / exécutées et toujours présentes dans la sortie HTML générée lorsque vous cliquez avec le bouton droit et affichez la source dans le navigateur), alors probablement votre conteneur de servlet ne le prend pas en charge ( comme Tomcat). Vous pouvez l'installer en déposant simplement jstl-1.2.jardans {{X0 }}. Si cela ne fonctionne toujours pas, reportez-vous à la jstlpour plus de détails.

Scriptlets

Vous pouvez également incorporer du code Java brut dans un fichier JSP à l'aide de scriptlets (ces choses <% %>).

<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="java.util.Date" %>

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>JSP Hello World</title>
    </head>
    <body>
        <h1>Hello</h1>
        <p>Welcome, user from <%= request.getRemoteAddr() %>
        <p>It's now <%= new SimpleDateFormat("MM/dd/yyyy HH:mm").format(new Date()) %>
    </body>
</html>

Son utilisation est cependant conforme aux conventions de codage JSPdéconseillées à d'autres fins que rapides prototypage.

Les meilleures pratiques

Il est facile d'écrire du code non maintenable avec JSP, donc certaines meilleures pratiquesa été développé. Une pratique fondamentale consiste à utiliser JSP comme vue dans le modèle de conception du contrôleur de vue de modèle. Ceci est parfois appelé la conception du modèle 2 où les servlets sont utilisés comme contrôleur. Le modèle peut être des JavaBeans, des POJO ou même des entités JPA. Les autres bonnes pratiques incluent l’évitement des scriplets, la création de balises de modèle réutilisables et l’utilisation de JSTL pour éviter de réinventer la roue.

Pré-chargement des données et post-traitement des formulaires

Pour pré-charger des données à afficher dans une JSP et pour post-traiter une soumission de formulaire, vous souhaitez utiliser un servlet. Pour plus de détails, consultez la servlets.

Javascript

Il est important de réaliser que JSP s'exécute sur le serveur Web, produisant une sortie HTML et que JavaScript fait partie de la sortie HTML qui s'exécute uniquement dans le navigateur. Ainsi, JSP et JavaScript ne s'exécutent pas en synchronisation comme vous pouvez vous y attendre du codage. Pour permettre à JavaScript «d'accéder» aux variables JSP, il vous suffit de laisser JSP / JSTL / EL l'imprimer comme s'il s'agissait d'une variable Javascript. De cette façon, toute fonction JavaScript, une fois exécutée dans le navigateur, peut y accéder. L'exemple ci-dessous imprime l'ID de session côté serveur en tant que variable JavaScript à l'aide d'EL:

<script>var jsessionid = '${pageContext.session.id}';</script>

Si vous ouvrez cette page dans un navigateur et effectuez une visualisation de la source, vous verrez quelque chose comme:

<script>var jsessionid = '4C147636FF923CA7EA642F2E10DB95F1';</script>

(notez que ces guillemets simples étaient donc obligatoires pour représenter une valeur de chaîne JavaScript!)

Ensuite, pour permettre à JSP «d'accéder» aux variables JavaScript, vous devez renvoyer la variable JavaScript au serveur à l'aide d'une requête HTTP, car c'est la seule façon d'envoyer des données du navigateur à un serveur Web. Vous pourriez:

  • utilisez le DOM HTML pour manipuler un champ de saisie masqué et remplissez-le avec les données et, si nécessaire, soumettez le formulaire à l'aide de form.submit() pour qu'il soit disponible d'ici request.getParameter().
  • utilisez window.location pour effectuer une "redirection" vers une nouvelle URL avec la variable JavaScript comme paramètre de demande.
  • utilisez XMLHttpRequest pour envoyer une demande asynchrone (ajax) avec la variable JS comme paramètre de demande.
  • laissez JavaScript le définir comme un cookie afin qu'il soit disponible par request.getCookies() dans les demandes suivantes.

Voir aussi Accédez aux variables Java / Servlet / JSP / JSTL / EL dans JavaScript.

Facelets

Depuis Java EE 6, JSP a été remplacé par Faceletscomme technologie d'affichage par défaut pour le Framework Java EE MVC JSF (JavaServer Faces). Depuis le tutoriel Java EE 6, JSP n'est plus traité en détail. Vous devez retourner au tutoriel Java EE 5si vous voulez learn JSP. Voir également https://stackoverflow.com/questions/4845032/wheres-the-official-jsp- tutoriel.

Ressources en ligne

Questions fréquemment posées

Pages d'informations sur les balises associées