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 :

Trouver fichier dans le classpath [JSP]


Sujet :

Servlets/JSP Java

  1. #1
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Par défaut Trouver fichier dans le classpath [JSP]
    Bonjour,
    Je déploie une application sous forme de WAR. L'une de mes jsp veut lire les informations contenues dans :

    META-INF/MANIFEST.MF

    Le contexte est donc /console/init.jsp

    J'ai tenté avec des /, sans les /, avec ., des .. et j'obtiens pas ce foutu fichier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    java.net.URL url = this.getClass().getResource("META-INF/MANIFEST.MF");
    		if (url == null )
    		    url = this.getClass().getResource("./META-INF/MANIFEST.MF");
    			if (url == null )
    			    url = this.getClass().getResource("../META-INF/MANIFEST.MF");
    				if (url == null )
    				    url = this.getClass().getResource("/META-INF/MANIFEST.MF");
    		if (url != null )
    		    sfile = url.getFile();
    Le mieux que j'obtienne c'est cette ligne là qui me le renvoie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.getClass().getResource("/META-INF/MANIFEST.MF");
    /C:/Java/Tomcat_5.0.27/work/Catalina/localhost/console/loader/META-INF/MANIFEST.MF

    Mais ce fichier n'existe pas même si ca ne le gène pas de le lire. Pourquoi tente t'il de le lire dans work/console/loader/META-INF et pas dans webapps/console/META-INF ?
    Et comment faire pour lire le bon ?

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Par défaut
    Essaie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.getClass().getResourceAsStream("/META-INF/MANIFEST.MF");

  3. #3
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Par défaut
    Nope, ca ne marche pas plus. D'ailleurs ca ne m'étonne pas, d'après moi ca ne fait que renvoyer un flux sur le même fichier renvoyé par getResource.

    Pas d'autres idées ?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 92
    Par défaut
    Salut,

    Je n'ai pas testé le code suivant, mais instinctivement j'aurais écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getServletContext().getResource("/META-INF/MANIFEST.MF");

  5. #5
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Par défaut
    Ca a l'air effectivement un peu mieux.

    Avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    		java.net.URL url = this.getServletContext().getResource("/META-INF/MANIFEST.MF");
    		if (url != null )
    		    sfile = url.getFile();
    //	    InputStream is  = this.getServletContext().getResourceAsStream("/META-INF/MANIFEST.MF");
    	    Manifest manifest = new Manifest(new FileInputStream(sfile));
    	    Attributes attr = manifest.getMainAttributes();
    	    version = (String)attr.get(Attributes.Name.SPECIFICATION_VERSION );
    	}
    	catch (IOException e)
    	{
    		// en cas d'erreur de lecture du manifest, on positionne a 1.0.0
    		version = "1.0.0";
    	}
    J'obtiens version = 1.0.0
    et sFile = /localhost/console/META-INF/MANIFEST.MF

    Donc il semble bien réussir a trouver l'url du fichier mais j'obtiens une IOException ici : Manifest manifest = new Manifest(new FileInputStream(sfile));
    Si j'utilise la ligne commentée pour utiliser le flux, il semble y arriver mais ma version devient null donc il trouve pas le SPECIFICATION_VERSION du manifest.
    (Pourtant il y est).

  6. #6
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Par défaut
    C'est ce genre de chose qui me fait sourire quand je fais du java ^^

    J'ai fait ceci :

    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
        InputStream is  = this.getServletContext().getResourceAsStream("/META-INF/MANIFEST.MF");
     
    		// En faire un flux de données (DataInputStream)
    		java.io.DataInputStream dis = new java.io.DataInputStream(is);
     
    		// Lire le fichier jusqu'à la fin
    		buffer = new StringBuffer();
    		String ligne = dis.readLine();
    		buffer.append(ligne).append("<br/>");
    		while (ligne != null)
    		{
    			ligne = dis.readLine();
    			buffer.append(ligne).append("<br/>");
    		}	    
     
    	    Manifest manifest = new Manifest(is);
    	    Attributes attr = manifest.getMainAttributes();
    	    version = (String)attr.get(Attributes.Name.SPECIFICATION_VERSION );
    	    if ( version == null )
    		    version = (String)attr.get(Attributes.Name.IMPLEMENTATION_VERSION );
    	    if ( version == null )
    		    version = (String)attr.get(Attributes.Name.MANIFEST_VERSION );

    En résumé, j'ai directement lu le stream dans un stringbuffer pour afficher le contenu du Manifest. C'est exactement celui que j'ai dans mon répertoire (ouf). Entre autre, j'ai bien mon Specification-Version: 1.10.4-SNAPSHOT
    Par contre tous les getAttributes de l'objet Manifest renvoient null.
    Conclusion, faut pas utiliser les objets de java.util ? ^^

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 92
    Par défaut
    Ton problème de classpath semble résolu, penses au bouton .

    Je n'ai jamais manipulé la classe Manifest. Je ne peux pas trop t'aider. En revanche, à la lecture de ton dernier code source, je te propose de supprimer les lignes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    		// En faire un flux de données (DataInputStream)
    		java.io.DataInputStream dis = new java.io.DataInputStream(is);
     
    		// Lire le fichier jusqu'à la fin
    		buffer = new StringBuffer();
    		String ligne = dis.readLine();
    		buffer.append(ligne).append("<br/>");
    		while (ligne != null)
    		{
    			ligne = dis.readLine();
    			buffer.append(ligne).append("<br/>");
    		}

  8. #8
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Par défaut
    Voici en fait le code final, sans l'objet Manifest qui ne fonctionne 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
    20
    21
    22
    23
    24
    25
    	public void jspInit()  {
    		try
    		{
    		    InputStream is  = this.getServletContext().getResourceAsStream("/META-INF/MANIFEST.MF");
     
    		    // NOTE : Oui, il existe un objet Manifest dans java.util mais après de multiples essais, 
    		    // celui ci n'a jamais été capable de récupérer les informations du Manifest
    			// En faire un flux de données (DataInputStream)
    			java.io.DataInputStream dis = new java.io.DataInputStream(is);
    			// Lire le fichier jusqu'à la fin
    			String ligne = dis.readLine();
    			while (ligne != null)
    			{
    			    if ( ligne.startsWith("Implementation-Version:") )
    		           {
    		       		version = ligne.replaceAll("Implementation-Version:","");
    		           }
    				ligne = dis.readLine();
    			}	    
    		}
    		catch (IOException e)
    		{
    		    // NOTHING TO DO, la version sera 1.0.0 si le fichier n'est pas trouvé ou mal lu
    		}
    	}

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] macro Lien Hypertexte pour trouver fichier dans dossiers
    Par thimote dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/02/2013, 11h12
  2. Trouver fichier dans un JAR
    Par pjmorce dans le forum Tomcat et TomEE
    Réponses: 0
    Dernier message: 18/08/2010, 11h07
  3. modifier un fichier dans le classpath
    Par al3alwa dans le forum Langage
    Réponses: 3
    Dernier message: 15/04/2009, 22h30
  4. trouver fichier dans arborescence
    Par ricololo dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 26/02/2009, 20h20
  5. Rechercher un fichier dans le classpath
    Par erwan.bodere dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 03/08/2007, 14h41

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