javaee:td1

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
javaee:td1 [2013/11/05 00:21] jcheronjavaee:td1 [2019/08/31 14:21] (Version actuelle) – modification externe 127.0.0.1
Ligne 1: Ligne 1:
-====== TD n°1, éléments de correction ======+====== TD n°1 Java EE, éléments de correction ======
 ===== Exercice 1 ===== ===== Exercice 1 =====
 Corrigé dans l'énoncé Corrigé dans l'énoncé
Ligne 85: Ligne 85:
 Gestion des informations temporaires, sessions et cookies\\ Gestion des informations temporaires, sessions et cookies\\
 JSP et servlets, mise en place d’un contrôleur JSP et servlets, mise en place d’un contrôleur
 +
 +|< 100% 20% - - - >|
 +^Package ^Classe/fichier ^Description^
 +|<html><div class="folder">net.td.metier</div></html> |<html><div class="class">Link</div></html> |Représente un lien Internet |
 +|<html><div class="folder">net.td.utils</div></html> |<html><div class="class">Gateway</div></html> |Classe passerelle entre métier et la Session |
 +|::: |<html><div class="class">Gui</div></html> |Classe technique destinée à l'affichage |
 +|<html><div class="folder">net.td.controller</div></html> |<html><div class="class">SLink</div></html> |Contrôleur de l'application |
 +|<html><div class="folder">WEB-INF/</div></html> |<html><div class="class">*.jsp</div></html> |Vues de l'application |
 +
 +__**Documentation :**__
 +
 +  * [[http://api.kobject.net/doc-td2/|Documentation des classes]]
 +
 +<html><div class="todo">Vues à implémenter :
 +<ul>
 +<li><b>listLinks.jsp</b> : Affichage de la liste des liens</li>
 +<li><b>error.jsp</b> : Affichage d'un message d'erreur récupéré dans l'attribut <b>errorMessage</b> de la requête</li>
 +<li>Implémenter ensuite la suite du TD2 : gestion des cookies</li>
 +</div></html>
 +==== Classe métier :Link ====
 +
 +<sxh java;title:net.td.metier.Link>
 +package net.td.metier;
 +
 +public class Link {
 + private String nom;
 + private String adresse;
 + public Link() {
 + this("","http://");
 + }
 + public Link(String nom, String adresse) {
 + super();
 + this.nom = nom;
 + this.adresse = adresse;
 + }
 + public String getNom() {
 + return nom;
 + }
 + public void setNom(String nom) {
 + this.nom = nom;
 + }
 + public String getAdresse() {
 + return adresse;
 + }
 + public void setAdresse(String adresse) {
 + this.adresse = adresse;
 + }
 + public boolean isValid(){
 + if(adresse==null ||"".equals(adresse))
 + return false;
 + Pattern p=Pattern.compile("^(http|https|ftp){1}(://){1}.+?$");
 + Matcher m=p.matcher(adresse);
 + return m.matches();
 + }
 + @Override
 + public String toString() {
 + return "Link [nom=" + nom + ", adresse=" + adresse + "]";
 + }
 + public void copyFrom(Link aLink){
 + nom=aLink.getNom();
 + adresse=aLink.getAdresse();
 + }
 +}
 +</sxh>
 +
 +
 +==== Classes techniques ====
 +=== Gateway : Passerelle persistance/métier ===
 +
 +<sxh java;title:net.td.utils.Gateway>
 +package net.td.utils;
 +
 +public class Gateway {
 +
 +
 + /**
 + * Retourne la liste des liens contenue dans la session
 + * Si la liste n'existe pas encore en Session, celle-ci est créée
 + * @param request Requête Http
 + * @return Liste des liens
 + */
 + public static ArrayList<Link> getLinks(HttpServletRequest request){
 + ArrayList<Link> result;
 + if(request.getSession().getAttribute("links")!=null){
 + result=(ArrayList<Link>) request.getSession().getAttribute("links");
 + }else
 + {
 + result=new ArrayList<Link>();
 + request.getSession().setAttribute("links", result);
 + }
 + return result;
 + }
 + /**
 + * Retourne un lien à partir du paramètre id passé dans la requête
 + * @param request
 + * @return
 + */
 + public static Link getLink(HttpServletRequest request){
 + Link result=null;
 + if(request.getParameter("id")!=null){
 + try{
 + int id=Integer.valueOf(request.getParameter("id"));
 + result=getLinks(request).get(id);
 + }catch(Exception e){
 + result=null;
 + }
 + }
 + return result;
 + }
 +
 + /**
 + * Mise à jour ou ajout à partir des paramètres de request du lien aLink 
 + * @param aLink
 + * @param request
 + */
 + public static void updateLink(Link aLink,HttpServletRequest request){
 + ArrayList<Link> links=getLinks(request);
 + Link theLink=getLink(request);
 + if(theLink!=null){
 + theLink.copyFrom(aLink);
 + }else{
 + links.add(aLink);
 + }
 + }
 +
 +}
 +</sxh>
 +=== Gui : Interfaces ===
 +
 +<sxh java;title:net.td.utils.Gui>
 +package net.td.utils;
 +
 +public class Gui {
 + /**
 + * Retourne un lien au format HTML
 + * @param aLink
 + * @param index
 + * @return
 + */
 + public static String showLink(Link aLink,int index){
 + String result="<div><a href='"+aLink.getAdresse()+"' target='openLink'>"+aLink.getNom()+"</a>&nbsp;<a href='update.do?id="+index+"'>...</a></div>";
 + return result;
 + }
 +
 + /**
 + * Retourne une liste de lien au format HTML
 + * @param links
 + * @return
 + */
 + public static String ShowLinks(ArrayList<Link> links){
 + String result="";
 + for(int i=0;i<links.size();i++){
 + result+=showLink(links.get(i),i);
 + }
 + return result;
 + }
 +}
 +</sxh>
  
 ==== Vues ==== ==== Vues ====
Ligne 127: Ligne 285:
 </sxh> </sxh>
  
 +==== Contrôleur ====
  
 +Le contrôleur gère :
 +  * La logique applicative (réponses aux requêtes, redirections, chargement des vues)
 +  * Le contrôle des données
  
 +<sxh java;title:net.td.controller.SLink>
 +package net.td.controller;
 +
 +/**
 + * Servlet implementation class SLink
 + */
 +@WebServlet({ "/SLink", "*.do" })
 +public class SLink extends HttpServlet {
 + private static final long serialVersionUID = 1L;
 +
 + /**
 + * Retourne l'action sollicitée par la requête
 + * @param request
 + * @return
 + */
 + private String getAction(HttpServletRequest request){
 + String result="";
 + String[] parts=request.getRequestURI().split("/");
 + if(parts.length>0)
 + result=parts[parts.length-1];
 + return result;
 + }
 +
 +    /**
 +     * Charge une vue (jsp située dans le dossier protégé WEB-INF)
 +     * @param viewName
 +     * @param request
 +     * @param response
 +     * @throws ServletException
 +     * @throws IOException
 +     */
 + private void loadView(String viewName,HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{
 +    request.getRequestDispatcher("WEB-INF/"+viewName+".jsp").forward(request, response);
 +    System.out.println("redirection vers WEB-INF/"+viewName+".jsp");
 +    }
 +    /**
 +     * @see HttpServlet#HttpServlet()
 +     */
 +    public SLink() {
 +        super();
 +    }
 +
 + /**
 + * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 + */
 + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 + PrintWriter out=response.getWriter();
 + String action=getAction(request);
 + switch (action) {
 + case "list.do":
 + loadView("listLinks", request, response);
 + break;
 + case "update.do":
 + loadView("frmLink", request, response);
 + break;
 + default:
 + System.out.println("Aucune action du nom de "+action+"(GET) à effectuer");
 + break;
 + }
 + }
 +
 + /**
 + * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 + */
 + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 + String action=getAction(request);
 + switch (action) {
 + case "delete.do":
 + break;
 + case "update.do":
 + updateLink(request, response);
 + break;
 + default:
 + System.out.println("Aucune action du nom de "+action+"(POST) à effectuer");
 + break;
 + }
 + }
 +
 + /**
 + * Procédure de contrôle de la mise à jour/ajout d'un lien
 + * @param request
 + * @param response
 + * @throws ServletException
 + * @throws IOException
 + */
 + private void updateLink(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
 + Link aLink=new Link();
 + if(request.getParameter("nom")!=null && request.getParameter("adresse")!=null){
 + aLink.setNom(request.getParameter("nom"));
 + aLink.setAdresse(request.getParameter("adresse"));
 + if(aLink.isValid()){
 + Gateway.updateLink(aLink, request);
 + loadView("listLinks", request, response);
 + }else{
 + request.setAttribute("errorMessage", "Impossible de mettre à jour "+aLink);
 + loadView("error", request, response);
 + }
 + }
 + }
 +
 +}
 +</sxh>
  • javaee/td1.1383607304.txt.gz
  • Dernière modification : il y a 6 ans
  • (modification externe)