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 :

Comment acceder aux fichiers dans war en java?


Sujet :

Servlets/JSP Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Comment acceder aux fichiers dans war en java?
    Bonjour,

    J'ai longuement cherché sur le net, mais je ne suis pas tombé sur comment il

    faut faire pour acceder à un fichier se trouvant dans war.

    En fait je dois faire une application web sous netbeans qui génére un fichier

    jasper contenant la liste des produits dont les critère ont selectionnés dans

    la jsp.

    Concrètement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Map mapJasper = new HashMap<String, Object>();
             //option n° 1
     
            //FileInputStream in = new FileInputStream("C:\\Documents and Settings\\Moi\\Bureau\\JasperWeb\\src\\java\\g31263\\Controller\\report1.jasper");
            // ceci donne  in != null
     
            //option n° 2
            InputStream in = getClassLoader().getResourceAsStream("/WEB-INF/classes/g31263/Controller/report1.jasper");
            // ceci donne in == null
     
            //option n° 3
            //InputStream in = getClass().getResourceAsStream("/WEB-INF/classes/g31263/Controller/report1.jasper");
            // ceci donne in == null
    J'ai essayé toutes les combinaisons possibles.

    Je voulais savoir si le fait de travailler avec glassfish y est pour quelque chose.

    Merci d'avance de tout aide.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    méthode getResource sur l'objet ServletContext. Les méthode getResource/getResourceAsStream du classloader sont limités au classloader. Un war c'est plus que des classes

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Merci,

    Je me suis renseigné au sujet de SevrletContext.

    J'ai essayé le bout de code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    InputStream in = ServletContext.class.getResourceAsStream("/WEB-INF/classes/g31263/Controller/report1.jasper");
    J'ai toujours null pour la variable "in". C'est ma 1ère question.

    Je voulais savoir par ailleurs quel est le chemin que je dois passer en paramètre. Pourquoi je demande celà, en fait pour la raison suivante

    En fait j'ai fait une application simple qui génére un Jasper et j'ai utilisé ceci comme code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    InputStream in = getClass().getResourceAsStream("/JasperSuite/report1.jasper");
    En fait le package dans lequel se trouve ce fichier est Jaspersuite alors que mon projet s'appelle JasperSuite.
    C'est ma 2ème question.

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    il faut utiliser la méthode getRessource se trouvant Sur servletContext, la tu utilise le classloader. Comme déjà dit, le classloader, ce n'est pas tout le war.

  5. #5
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    j'ai trouvé pour obtenir le le fichier dans war de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ServletContext sv = getServletContext();
            InputStream in = sv.getResourceAsStream("/WEB-INF/classes/g31263/Controller/report1.jasper");
    Mais maintenant j'ai un autre problème, çad que j'ai un message d'erreur quand je réessaie de faire CLEAN and BUILD pour le projet.

    C:\Documents and Settings\Moi\Bureau\JasperWeb\nbproject\
    build-impl.xml:959: Unable to delete file
    C:\Documents and Settings\Moi\Bureau\JasperWeb\build\web\WEB-INF\lib\com-jaspersoft-ireport.jar
    BUILD FAILED (total time: 35 seconds)
    ceci est surement dû à un problème interne de jasperreport ou glassfish, ou bien c'est moi qui mal fait qch?

  6. #6
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    Bonjour,

    As-tu pensé à fermer le fichier?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ServletContext sv = getServletContext();
    InputStream in = sv.getResourceAsStream("/WEB-INF/classes/g31263/Controller/report1.jasper");
    {
      // Traitement
    }
    in.close
    pour être un peu plus propre:
    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
     
    final ServletContext sv = getServletContext();
    InputStream in = null;
    try {
      in = sv.getResourceAsStream("/WEB-INF/classes/g31263/Controller/report1.jasper");
      // Traitement
    }
    catch(IOException ioe) {
      System.err.println("Erreur durant traitememnet de report1.japser " + ioe);
    }
    finally {
      if (in != null) {
        try {
          in.close();
          in = null;
        }
        catch(IOException ioe) {
          System.err.println("Erreur durant fermeture de report1.japser" + ioe);
        }
      }
    }

  7. #7
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Merci jowo, mais le problème persiste malheureuseument, malgré les changements.

  8. #8
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    Arrêtes-tu le serveur avant de faire le BUILD ou CLEAN?

  9. #9
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Bonsoir,

    Oui, je le désactive à chaque fois que j'ai besoin de procéder à la recompilation.

    Mais je souhaitais qu'il soit possible d'enregistrer le rapport.

    Càd qu'il y ait une fenêtre qui propose d'enregistrer le rapport généré.

    J'ai suivi le tutoriel proposé sur developpez.com

    Mais il y a qch que je ne saisi pas

    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
     
    Map mapJasper = new HashMap<String, Object>()
            final ServletContext sv = getServletContext();
            InputStream in = sv.getResourceAsStream("/WEB-INF/classes/g31263/Controller/report1.jasper");
            JasperPrint jasperPrint = JasperFillManager.fillReport(in, mapJasper, connection);
     
            byte[] bytes = JasperExportManager.exportReportToPdf(jasperPrint);
            FacesContext context = FacesContext.getCurrentInstance();
            //response = (HttpServletResponse) context.getExternalContext().getResponse();
            /***********************************************************************
             * Pour afficher une boîte de dialogue pour enregistrer le fichier sous
             * le nom rapport.pdf
             **********************************************************************/
            response.addHeader("Content-disposition",
                    "attachment;filename=rapport.pdf");
            response.setContentLength(bytes.length);
            response.getOutputStream().write(bytes);
            response.setContentType("application/pdf");
            context.responseComplete();
    J'ai un message qui me propose d'enregistrer mon pdf, mais il ne contient rien ce pdf, on ne sait même pas l'ouvrir.

    Merci

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/08/2009, 09h04
  2. Réponses: 4
    Dernier message: 12/03/2008, 14h18
  3. Réponses: 5
    Dernier message: 30/04/2007, 19h03
  4. Comment acceder aux variables d'environnement en JAVA ?
    Par Battosaiii dans le forum Langage
    Réponses: 2
    Dernier message: 09/11/2006, 19h47
  5. Réponses: 4
    Dernier message: 23/08/2006, 16h31

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