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

Struts 1 Java Discussion :

[tomcat][struts]comment acceder fichier chemin relatif ?


Sujet :

Struts 1 Java

  1. #1
    Nouveau membre du Club

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 48
    Points : 31
    Points
    31
    Par défaut [tomcat][struts]comment acceder fichier chemin relatif ?
    dans une de mes classes de travail située dans le repertoire <webapps>/monappli/WEB-INF/classes j essaye d'ouvrir un repertoire qui se situe dans <webapps>/monappli.

    le probleme est que ce repertoire est defini dans ma classe en chemin relatif et non absolut.
    et donc j ai une IOException vu que mon appli ne trouve pas le repertoire.

    quelle est la config pour que mon appli trouve le repertoire ???

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 274
    Points : 307
    Points
    307
    Par défaut
    Si tu veux récupérer un fichier en particulier utilise les classLoader.

  3. #3
    Nouveau membre du Club

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 48
    Points : 31
    Points
    31
    Par défaut
    donc pour plus de precision :

    dans server.xml situe dans <tomcat>/conf, j'ai le context
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Context path="/scanner" reloadable="true" docBase="C:\user\Mes Documents\exemple" workDir="C:\user\Mes Documents\exemple\work" />
    le repertoire que j essaye d'ouvrir pour creer un fichier est comment faire pour recuperer le chemin "docBase" dans ma classe de travail ?

  4. #4
    Nouveau membre du Club

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 48
    Points : 31
    Points
    31
    Par défaut
    bon toujours pas d'idee
    je vous mets le code de FunctionScanner.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ...
    public void detectOS(String IP) throws IOException, InterruptedException{
    		String line=null;
    		String []request={
    				"C:\\VCARRAUD\\Mes Documents\\nmap-3.81\\nmap",
    				"-O","-oX",
    				"C:\\VCARRAUD\\Mes Documents\\nmap-3.81\\xml\\"+IP+".xml",
    				IP};
    		Process p = Runtime.getRuntime().exec(request);
    ...
    cette classe est situe dans <application dir>/WEB-INF/classes
    quand je precise les chemins en absolu de la commande et du fichier xml dans le String [] request, pas de probleme.
    mais ce que je veux c'est mettre les repertoires nmap-3.81/ et xml/ a la racine de mon application <application dir> et preciser les chemins en relatif.
    le probleme est que sur mon serveur d appli tomcat je n y arrive pas

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 31
    Points : 29
    Points
    29
    Par défaut
    regarde du coté de la javadoc des servlet dans l'interface ServletContext

    t'as la dans cette dernière les méthodes getRealPath(String aPath) et getResourceAsStream(String aPath) ta chaine aPath doit commencer par un /
    et ça renvoie comme genre de résultat le chemin absolu depuis la racine de l'arborescence du disque dur ou est installé tomcat.

    Exemple concret:

    tu veux savoir le chemin de la resource fichiers.xml qui se trouve dans le dossier <app dir>/WEB-INF/classes

    aPath = /app dir/WEB-INF/classes/fichiers.xml

    getResourceAsStream te renverra (s'il le trouve) le fichier fichiers.xml et il te restera plus qu'a le lire

    et pour getRealPath ça te renverra comme genre de chemin c:\dossier1\dossier2\Tomcat\webapps\app dir\WEB-INF\classes\

  6. #6
    Nouveau membre du Club

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 48
    Points : 31
    Points
    31
    Par défaut
    oky thanks pour la reponse
    c'est ce que je pensais depuis le debut et j'ai essaye de l'utiliser mais un petit probleme encore
    je donne le 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    public class FormulaireAction2 extends Action {
     
    	public ActionForward execute(ActionMapping mapping, ActionForm form,
    			HttpServletRequest request, HttpServletResponse response)
    			throws IOException,ServletException {
    			//on a un formulaire valide, sinon on ne serait pas arrivé là
    		DynaActionForm formulaire=(DynaActionForm)form;
    		String ip=(String)formulaire.getString("ip");
    		FunctionScanner fs=new FunctionScanner(1000);
    		/*try {
    			fs.detectOS(ip);
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (InterruptedException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}*/
     
    		return mapping.findForward("reponse");
    	}
     
    }
    le probleme est d'obtenir l'objet ServletContext pour utiliser les methodes getRealPath(String aPath) et getResourceAsStream(String aPath).

    dans ma methode execute(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response)
    j'ai essaye de l'obtenir mais rien y fait
    avec l'objet HttpServletRequest il y avait avant une methode getRealpath mais elle est deprecated.
    grrrr
    comment faire pour obtenir un objet ServletContext :

  7. #7
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 31
    Points : 29
    Points
    29
    Par défaut
    tu regardes pas bien la javadoc des servlets

    Voila le p'tit code qui permet de recuperer un object ServletContext a partir de l'objet HttpServletRequest

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ServletContext context = request.getSession().getServletContext();

  8. #8
    Nouveau membre du Club

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 48
    Points : 31
    Points
    31
    Par défaut

    a vrai dire j'ai pas regarde les methodes qui renvoyait un objet HttpSession
    ME ACULPA
    j'ai juste regarde les super classes de HttpRequest,HttpResponse, ServletContext et ServletConfig
    donc merci je vais essaye de ce pas

  9. #9
    Nouveau membre du Club

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 48
    Points : 31
    Points
    31
    Par défaut
    oky c'est good merci zetang et pietra pour votre aide
    a l'avenir je regarderai toutes les possibilites dans la javadoc avant de poster
    j epere que ca aidera d'autre personne la solution
    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
     
    public class FormulaireAction2 extends Action {
     
    	public ActionForward execute(ActionMapping mapping, ActionForm form,
    			HttpServletRequest request, HttpServletResponse response)
    			throws IOException,ServletException {
    			//on a un formulaire valide, sinon on ne serait pas arrivé là
    		DynaActionForm formulaire=(DynaActionForm)form;
    		String ip=(String)formulaire.getString("ip");
    		FunctionScanner fs=new FunctionScanner(1000);
    		try {
    			fs.detectOS(ip,request.getSession().getServletContext().getRealPath("\\"));
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (InterruptedException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return mapping.findForward("reponse");
    	}
     
    }
    j'ai donc changer ma methode detectOS en mettant un second argument qui precise le chemin reel sur ma machine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fs.detectOS(ip,request.getSession().getServletContext().getRealPath("\\"))
    request.getSession().getServletContext().getRealPath("\\")) retourne <web app dir>

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/12/2009, 14h35
  2. Réponses: 1
    Dernier message: 16/11/2007, 15h31
  3. ecriture fichier - chemin relatif
    Par gamel dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 20/07/2006, 16h15
  4. [C#] Comment donner un chemin relatif ?
    Par qwertz dans le forum C#
    Réponses: 2
    Dernier message: 13/07/2006, 11h59
  5. Réponses: 3
    Dernier message: 04/05/2006, 17h15

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