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 :

upload de fichier tres long


Sujet :

Servlets/JSP Java

  1. #1
    Membre éclairé

    Inscrit en
    Avril 2005
    Messages
    246
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 246
    Par défaut upload de fichier tres long
    Bonjour,

    Je suis en train de creer une appli qui charge des objets java puis apers les avoir chargés je lance un telechargement de la facon ci dessous
    Cela fonctionne tres bien mais quand je monte 12000 objets l'ecriture du fichier prends une heure et demi(avant le telechargement) et apres une heure (donc avant la fin de l'ecriture dans le fichier)ma page internet affiche
    Internet Explorer ne peut pas afficher cette page Web

    Causes les plus probables :
    Vous n’êtes pas connecté à Internet.
    Le site Web rencontre des problèmes.
    Il se peut que l’adresse contienne une erreur de frappe.

    Essayez la chose suivante :
    Diagnostiquer les problèmes de connexion

    Informations

    Ce problème peut avoir différentes causes, notamment :

    La connexion Internet a été perdue.
    Le site Web est temporairement indisponible.
    Le serveur de noms de domaine (DNS) est inaccessible.
    Le serveur de noms de domaine (DNS) ne contient pas d’entrée pour le domaine du site Web.
    S’il s’agit d’une adresse HTTPS (sécurisée), cliquez sur Outils, sur Options Internet, puis sur Avancées et vérifiez que les protocoles SSL et TLS sont activés dans la section relative à la sécurité.

    Pour les utilisateurs hors connexion

    Vous pouvez encore afficher les flux auxquels vous êtes abonné et certaines pages Web visitées.
    Pour afficher les flux auxquels vous êtes abonné

    Cliquez sur le bouton Centre des favoris , cliquez sur Flux, puis cliquez sur le flux que vous souhaitez afficher.

    Pour afficher les dernières pages Web visitées (peut ne pas fonctionner pour toutes les pages)

    Cliquez sur Outils , puis sur Travailler hors connexion.
    Cliquez sur le bouton Centre des favoris , cliquez sur Historique, puis cliquez sur la page que vous souhaitez afficher.
    Donc quand il ya quelques objets ca fonctionne mais beaucoup ca plante
    D'ou cela provient -il comment faire pour garder la main et empecher le plantage


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     public static void download (File file, javax.servlet.http.HttpServletResponse response) throws Exception {
        InputStream in = new FileInputStream(file);
        response.setContentType("application/download");
        response.setHeader("Content-Disposition","attachment; filename=\"" + file.getName() + "\"");
        javax.servlet.ServletOutputStream out = response.getOutputStream();
     
        int c;
        while ((c=in.read()) != -1)
          out.write( c );
     
        out.close();
        in.close();
      }

  2. #2
    Membre chevronné
    Profil pro
    Développeur Java
    Inscrit en
    Novembre 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2007
    Messages : 301
    Par défaut
    Dans la FAQ, tu as un code permettant de faire le téléchargement depuis une servlet : http://java.developpez.com/faq/javae...GEMENT_FICHIER.

    Le code est bien plus efficace que le tient compte tenu qu'il utilise un buffer. Donc le téléchargement devrait finir plus tôt et donc tu n'auras peut être plus le problème du timeout.

    Dans ton code, tu ne précises pas le contentLenght, c'est peut être ça aussi que le navigateur n'apprécie pas.

  3. #3
    Membre éclairé

    Inscrit en
    Avril 2005
    Messages
    246
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 246
    Par défaut
    Le probleme ne vient pas du telechargement, puisq'avant le debut du telechargment j'ai deja perdue la main!!

  4. #4
    Membre chevronné

    Homme Profil pro
    Développeur J2EE Senior
    Inscrit en
    Mai 2008
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur J2EE Senior
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 419
    Par défaut
    J'ai plus ou moins été dans le même cas.

    La solution que j'ai utilisée va peut être paraitre un peu compliquée, mais bon..

    Tu utilise une servlet qui affiche une page d'attente avec un refresh toutes les 60s. Lors de son premier appel, la servlet lance une Thread qui procède à l'écriture du fichier. Tu crée un mapping de type hashtable avec comme clé le numéro de l'utilisateur et comme cible une String qui contient "not_ready". A la fin de la Thread, tu met une instruction qui va remplacer not_ready par ready.

    Ta servlet fonctionne sur une machine 3 états:

    etat 1 : initialisation.
    => init de la hahtable
    => init de la thread.
    => envoi de la page d'accueil

    etat 2 : si appel de la servlet et que init est faite
    => test si c'est fini
    => si c'est fini, passer à l'état 3
    => sinon revoyer la page d'attente.

    etat 3: lancement du DL



    De cette façon le navigateur aura toujours une page à afficher et ne plantera donc pas.
    Mes cours sur l'écosystème Java EE - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre éclairé

    Inscrit en
    Avril 2005
    Messages
    246
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 246
    Par défaut
    Ca m'a lair tres interessant ce que tu proposes, aurais tu du code a me montrer pour lancer des threads en jsp?

    Merci

  6. #6
    Membre chevronné

    Homme Profil pro
    Développeur J2EE Senior
    Inscrit en
    Mai 2008
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur J2EE Senior
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 419
    Par défaut
    Bonjour

    Je n'y connais rien en JSP, je n'utilise que des servlets. Pour la thread, c'est une classe java qui se présente de la façon suivante :

    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
    public class MonThread extends Thread{
     
    /*
    les variables de la classes sont tout ce dont ta méthode qui écrit le fichier a besoin pour fonctionner, plus la hashtable et l'identifiant de ton utilisateur. Admettons que tu écrive dans le fichier avec une méthode 
    ecrireFichier(type parameter1, type parameter2, type parameter3)
    */
    public Integer JobID;
    public Map<Integer, UserInfo> requestCache;
    public type parameter1;
    public type parameter2;
    public type parameter3;
     
    public MonThread( Map<Integer, UserInfo> requestCache,Integer JobID,type parameter1, type parameter2, type parameter3)
        {
            this.JobID=JobID;
            this.requestCache=requestCache;
            this.parameter1=parameter1;
            this.parameter2=parameter2;
            this.parameter3=parameter3;
        }
    public void run()
    {
    requestCache.put(JobID,"Thread en cours");
    ecrireFichier(parameter1, parameter2, parameter3);
    requestCache.put(JobID,"Thread terminée");
    }
    }
    ensuite dans ton code principal, à l'endroit où tu appelais la méthode ecrireFichier, lors de l'initialisation (cf mon message précédent) tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MonThread monThread= new Monthread(requestCache,JobID,parameter1, parameter2, parameter3);
    monThread.start();
    Mes cours sur l'écosystème Java EE - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. fichier tres long
    Par arthurembo dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 30/04/2009, 11h16
  2. [Coldfusion] Java File Reader sur un tres long fichier
    Par dehian dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 10/12/2007, 10h03
  3. Java File Reader sur un tres long fichier avec coldfusion
    Par dehian dans le forum Coldfusion
    Réponses: 0
    Dernier message: 07/12/2007, 17h43
  4. [Upload] Temps d'upload d'un fichier trop long
    Par tylerphp dans le forum Langage
    Réponses: 4
    Dernier message: 13/12/2006, 11h59
  5. Upload de fichiers
    Par GDVL dans le forum ASP
    Réponses: 4
    Dernier message: 03/06/2004, 12h44

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