Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
helloworld:web:java:jsp [2016/11/06 12:58] – Ajout de l'exemple MVC servlet + JSP root | helloworld:web:java:jsp [2020/05/11 00:25] (Version actuelle) – Suppression de la taille par défaut pour les images root |
---|
Une page ''JSP'' utilise du code ''HTML'' dans lequel est mis du code ''Java''. Le code généré par les appels aux fonctions ''JSP'' est du ''HTML 4.01''. | Une page ''JSP'' utilise du code ''HTML'' dans lequel est mis du code ''Java''. Le code généré par les appels aux fonctions ''JSP'' est du ''HTML 4.01''. |
| |
<note>Tous les exemples ci-dessous utilisent le [[helloworld:design_pattern:bean:java|BeanPersonne]].</note> | <WRAP center round info 60%> |
| Tous les exemples ci-dessous utilisent le [[helloworld:design_pattern:bean:java|BeanPersonne]]. |
| </WRAP> |
| |
=====Cycle de vie===== | =====Cycle de vie===== |
{{:helloworld:web:java:jsp:cycle_de_vie.png?300|Cycle de vie}} | {{:helloworld:web:java:jsp:cycle_de_vie.png|Cycle de vie}} |
[[https://openclassrooms.com/courses/creez-votre-application-web-avec-java-ee/servlet-avec-vue|Source]] {{:helloworld:web:java:jsp:servlet_avec_vue.htm.maff|Archive}} | [[https://openclassrooms.com/en/courses/626954-creez-votre-application-web-avec-java-ee/619743-servlet-avec-vue|Servlet avec vue…]] {{ :helloworld:web:java:jsp:servlet_avec_vue_-_creez_votre_application_web_avec_java_ee_-_openclassrooms_2020-04-26_9_30_02_pm_.html |Archive du 03/10/2017 le 26/04/2020}} |
| |
| Sous Eclipse, les ''.jsp'' sont transformés en ''.java'' dans le dossier (ici avec [[helloworld:web:java:jsp_jstl_el|JSTL]]) ''workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/work/Catalina/localhost/jstl/org/apache/jsp/''. |
=====Création du projet===== | =====Création du projet===== |
Nécessite un projet de type [[ide:eclipse:howto:projet|Dynamic Web Project]]. | Nécessite un projet de type [[ide:eclipse:projet|Dynamic Web Project]]. |
| |
{{:helloworld:web:java:jsp:web-module.gif?442|Architecture du projet}} | {{:helloworld:web:java:jsp:web-module.gif|Architecture du projet}} |
| |
[[http://docs.oracle.com/javaee/5/tutorial/doc/bnadx.html|Source]], {{ :helloworld:web:java:javaeetutorial5.pdf |Archive}} | [[http://docs.oracle.com/javaee/5/tutorial/doc/bnadx.html|The Java EE 5 Tutorial]], {{ lang:java:javaeetutorial5.pdf |Archive}} |
| |
| =====Syntaxe===== |
| ''<%-- --%>'' : commentaire JSP; |
| |
| ''<%! %>'' : déclaration d’une variable; |
| |
| ''<% %>'' : inclusion de code Java quelconque; |
| |
| ''<%= %>'' : affichage d'un variable. |
| |
| ''<%@ %>'' : directives. |
| * ''%%<%@ page language="java"%>%%'' : langage Java, |
| * ''%%<%@ page contentType="text/html;%>%%'' : Contenu HTML, |
| * ''%%<%@ page pageEncoding="UTF-8"%>%%'' : Encodage UTF-8, |
| * ''%%<%@ page import="java.util.List, com.llgc.Liste6"%>%%'' : import de package Java, |
| * ''%%<%@ taglib uri="WEB-INF/tagperso.tld" prefix="tag"%>%%'' : déclaration d'une tag librairie, |
| * ''%%<%@ include file="header.jsp" %>%%'' : inclusion d'un fichier. |
| |
| ''${ }'' : évaluation d'une expression en Java, remplace ''<%= %>''. |
| |
| |
| =====Confidentialité===== |
| * ''page'' : la page JSP qui a créé la donnée, |
| * ''request'' : la donnée est transmissible par des ''forward'' ou à d'autres ''JSP'' grâce à la servlet, |
| * ''session'' : variable session, communication entre servlet, |
| * ''application'' : tout le monde, communication entre les clients. |
| |
| {{:helloworld:web:java:jsp:session-request-and-page-scope.jpg|Diagramme de portée}} |
| |
| <del>[[http://sourcecodemania.com/j2ee-jsp-basics/|J2EE JSP Basics]]</del> {{ :helloworld:web:java:jsp:j2ee_jsp_basics_java_programming_sourcecodemania.com_2020-04-26_9_34_51_pm_.html |Archive du 2012 le 26/04/2020}} |
| |
| * Les variables accessibles à une page JSP en fonction des portées sont ''pageScope'', ''requestScope'', ''sessionScope'' et ''applicationScope''. |
| |
| =====Variables implicites pour toutes les pages JSP===== |
| |
| * ''pageContext'' : Information sur l'environnement serveur [[https://www.tutorialspoint.com/jsp/jsp_implicit_objects.htm|JSP - Implicit Objects]] {{ :helloworld:web:java:jsp:jsp_-_implicit_objects_-_tutorialspoint_2020-04-26_9_50_47_pm_.html |Archive du 2010 le 26/04/2020}}. |
| * ''pageContext.request'' : This is the HttpServletRequest object associated with the request. |
| * ''pageContext.response'' : This is the HttpServletResponse object associated with the response to the client. |
| * ''pageContext.out'' : This is the PrintWriter object used to send output to the client. |
| * ''pageContext.session'' : This is the HttpSession object associated with the request. |
| * ''pageContext.application'' : This is the ServletContext object associated with application context. |
| * ''pageContext.config'' : This is the ServletConfig object associated with the page. |
| * ''pageContext.pageContext'' : This encapsulates use of server-specific features like higher performance JspWriters. |
| * ''pageContext.page'' : This is simply a synonym for this, and is used to call the methods defined by the translated servlet class. |
| * ''pageContext.exception'' : The Exception object allows the exception data to be accessed by designated JSP. |
| |
| * ''param'' : Les paramètres de la requête HTTP s'il n'y a qu'une seule valeur, |
| |
| * ''paramValues'' : Les paramètres de la requête HTTP s'il y a plusieurs valeurs, |
| |
| * ''header'' : Les paramètres de l'en-tête HTTP s'il n'y a qu'une seule valeur, |
| |
| * ''headerValues'' : Les paramètres de l'en-tête HTTP s'il y a plusieurs valeurs, |
| |
| * ''cookie'' : Les cookies, |
| |
| * ''initParam'' : Le fichier ''web.xml'', |
| |
| [[https://docs.oracle.com/cd/E19575-01/819-3669/bnaij/index.html|Implicit Objects]], {{ lang:java:javaeetutorial5.pdf |Archive, page 161}} |
| |
=====Exemple 0 - Page non dynamique===== | =====Exemple 0 - Page non dynamique===== |
| |
Rendu du formulaire : | Rendu du formulaire : |
{{:helloworld:web:java:jsp:rendu_ex3-1.png?312|Rendu du formulaire}} | {{:helloworld:web:java:jsp:rendu_ex3-1.png|Rendu du formulaire}} |
| |
Rendu de la réponse : | Rendu de la réponse : |
{{:helloworld:web:java:jsp:rendu_ex3-2.png?312|Rendu de la réponse}} | {{:helloworld:web:java:jsp:rendu_ex3-2.png|Rendu de la réponse}} |
| |
| |
=====Exemple 3b - JSP + Servlet===== | =====Exemple 3b - JSP + Servlet===== |
Mettre le code Java dans la page JSP peut être acceptable pour de petits projets mais pas plus ([[http://www.oracle.com/technetwork/articles/java/servlets-jsp-140445.html|Source]], {{ :helloworld:web:java:jsp:servlets_and_jsp_pages_best_practices.html.maff |Archive}}). | Mettre le code Java dans la page JSP peut être acceptable pour de petits projets mais pas plus ([[http://www.oracle.com/technetwork/articles/java/servlets-jsp-140445.html|Servlets and JSP Pages Best Practices]] {{ :helloworld:web:java:jsp:servlets_and_jsp_pages_best_practices_2020-04-27_10_54_33_am_.html |Archive du 03/2003 le 27/04/2020}} |
| |
<file xml convinput.jsp> | <file xml convinput.jsp> |
</file> | </file> |
| |
<note>''requestScope.temperature'' existe grâce à ''request.setAttribute("temperature", temp);'' | <WRAP center round info 60%> |
| ''requestScope.temperature'' existe grâce à ''%%request.setAttribute("temperature", temp);%%'' |
| |
''temperature.celsius'' va automatiquement chercher la méthode ''getCelsuis''. Il est donc impératif de correctement nommer ses méthodes dans les classes Java. | ''temperature.celsius'' va automatiquement chercher la méthode ''getCelsuis'' (''isCelsuis'' si la méthode renvoie un boolean). Il est donc impératif de correctement nommer ses méthodes dans les classes Java. |
</note> | </WRAP> |
| |
<file java Temperature.java> | <file java Temperature.java> |
| |
Rendu du formulaire : | Rendu du formulaire : |
{{:helloworld:web:java:jsp:rendu_3b-1.png?634|Rendu du formulaire}} | {{:helloworld:web:java:jsp:rendu_3b-1.png|Rendu du formulaire}} |
| |
Rendu de la réponse : | Rendu de la réponse : |
{{:helloworld:web:java:jsp:rendu_3b-2.png?484|Rendu de la réponse}} | {{:helloworld:web:java:jsp:rendu_3b-2.png|Rendu de la réponse}} |
| |
=====Exemple 3c - avec validation des données===== | =====Exemple 3c - avec validation des données===== |