IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Servlets/JSP Java Discussion :

[Servlet] Page d'attente


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 889
    Par défaut [Servlet] Page d'attente
    Bonjour

    Je sais que j'avais posé une question à ce sujet il y a bien longtemps maintenant, mais je me rends compte que la solution que j'ai adopté n'est certainement pas la meilleure.
    Voici ce que j'ai fait.
    Tout part évidemment d'une JSP contenant un formulaire. J'envoie ce formulaire à une servlet. Cette servlet appelle un thread qui fait une opération sur base des paramètres reçus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    @SuppressWarnings("unchecked")
        protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException, MessagingException, InterruptedException {
            ProcessThread pt = new ProcessThread(request.getParameterMap());
            pt.start();
            while(pt.isAlive()){
                Thread.sleep(500);
            }
            TreeMap<String, Integer>errors = pt.getErrors();
            if(shouldRedirect(errors.values())){
                redirect(request, response, "errorVector", errors, "submitJob.jsp");
                return;
            }
            else{
                this.attributes = pt.getAttributes();
                redirect(request, response, "preselect.jsp");
            }
        }
    Or, ce que je voudrais, c'est afficher dans cette servlet un texte d'attente.
    Est-ce possible ?
    Il y a bien les balises meta redirect, mais je ne vois pas trop comment les placer.

    Merci d'avance de votre aide.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Tu ne peux pas le faire de cette manière, car tant que ton thread n'est pas fini, tu n'as pas renvoyé la réponse au navigateur client.

  3. #3
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 889
    Par défaut
    Bonjour fr1man

    Merci de ta réponse. Mais dans ce cas, quelle solution alternative dois-je prendre ?

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Je pense qu'il faudrait lancer une requête asynchrone (AJAX) à partir de la page qui appelle ta servlet de traitement.
    Tu pourrais afficher un message d'attente (via une div par exemple) et la cacher à la fin de ton traitement)

  5. #5
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 889
    Par défaut
    Hello

    Pas mal, mais, j'oubliais de le mentionner:
    1) Je ne connais pas Ajax (mauvais argument car au moins j'apprendrais )
    2) Je souhaite ne pas trop dépendre de JavaScript (certains de mes clients n'ont pas JavaScript d'activé sur leur browser).
    Merci en tout cas de ta suggestion.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Sans Javascript, tu vas avoir du mal.
    En tout cas, je ne sais pas faire sans.

  7. #7
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par GLDavid Voir le message
    1) Je ne connais pas Ajax (mauvais argument car au moins j'apprendrais )
    2) Je souhaite ne pas trop dépendre de JavaScript (certains de mes clients n'ont pas JavaScript d'activé sur leur browser).
    Et Ajax c'est du JavaScript...



    Une solution serait de passer par les balises META qui permettent de rafraichir la page.
    Dans la servlet on met la référence de notre thread en session, et on gère deux cas :
    • Le thread n'existe pas (premier appel). On le crée et on le met en session avant de le démarrer.
    • Le thread existe déjà en session, et on récupère son instance.


    Ensuite le traitement est le même :
    • Si le thread n'est pas terminé, on renvoi un page d'attente avec un meta pour raffraichir automatiquement.
    • Si le thread est terminé on récupère son résultat et on renvoi la réponse


    Par exemple prenons ce thread qui simule un traitement lent en dormant 10 secondes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    class Task extends Thread {
     
    	private volatile String result = null;
     
    	@Override
    	public void run() {
    		try {
    			Thread.sleep(10000); // 10 secondes
    		} catch (InterruptedException e) {
    			throw new RuntimeException(e);
    		}
    		this.result = "Hello World !";
    	}
     
    	public String getResult() {
    		return this.result;
    	}
    }

    La servlet pourrait ressembler à ceci (note : j'écris directement le code HTML dans la servlet pour simplifier, mais il faudrait bien entendu utiliser des JSP pour la présentation ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    public class TestServlet extends HttpServlet {
     
    	@Override
    	protected void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		// On récupère la session :
    		final HttpSession session = request.getSession();
    		// On récupère la tâche :
    		Task task = (Task) session.getAttribute("task");
    		if (task==null) {
    			// Si elle n'existe pas on la crée et on la lance :
    			task = new Task();
    			session.setAttribute("task", task);
    			task.start();
    		}
     
    		final PrintWriter out = response.getWriter();
    		try {
    			// Si le thread est toujours vivant :
    			if (task.isAlive()) {
    				// On affiche une page de raffraichissement par META
    				out.println("<html>");
    				out.println("<head>");
    				out.println("<meta http-equiv='refresh' content='2'/>"); // toutes les 2 secondes
    				out.println("</head>");
    				out.println("<body>");
    				out.println("<h1>En attente...</h1>");
    				out.println("</body>");
    				out.println("</html>");
    			} else {
    				// Sinon on supprime la tâche de la session
    				session.removeAttribute("task");
     
    				// Et on renvoit le résultat :
    				out.println("<html>");
    				out.println("<body>");
    				out.println("<h1>" + task.getResult() + "</h1>");
    				out.println("</body>");
    				out.println("</html>");
    			}
    		} finally {
    			out.close();
    		}
    	}
     
    }
    a++

Discussions similaires

  1. Une petite page d'attente!!!
    Par stoyak dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 06/03/2006, 10h50
  2. [Système] Creer une page d'attente....
    Par Paulux1 dans le forum Langage
    Réponses: 2
    Dernier message: 02/03/2006, 16h56
  3. [Struts] Page d'attente
    Par remika dans le forum Struts 1
    Réponses: 4
    Dernier message: 17/02/2006, 16h34
  4. [STRUTS] Page d'attente
    Par remods dans le forum Struts 1
    Réponses: 1
    Dernier message: 19/10/2005, 13h10
  5. [JSP]Servlet / page html
    Par ana2sb dans le forum Servlets/JSP
    Réponses: 17
    Dernier message: 10/08/2004, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo