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 :

Appel d'une méthode java par le biais d'un lien


Sujet :

Servlets/JSP Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 90
    Points : 54
    Points
    54
    Par défaut Appel d'une méthode java par le biais d'un lien
    Bonjour,

    Je développe un site en JSP et je souhaiterai mettre en place la génération d'un fichier d'export du résultat d'une recherche dans un annuaire.

    La méthode de génération du fichier existe déjà (et fonctionne), et je souhaiterai pouvoir donc appeler cette méthode par le biais d'un lien.

    Ainsi, l'utilisateur effectue sa recherche, voit la liste de résultat sur son navigateur, et par le biais d'un lien il peut exporter le résultat de sa recherche sous forme de fichier texte.

    Le problème, c'est que je ne sais pas trop comment m'y prendre pour faire l'appel à ma méthode java par le biais de mon lien sur mon site. De plus, je ne sais pas comment faire dans ma méthode pour que, une fois le fichier généré par ma méthode java sur le serveur, celui-ci soit envoyé à l'utilisateur par le biais du navigateur.

    Je vous remercie par avance d'éclairer ma lanterne!

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Le plus simple est d'écrire une servlet qui envoie le fichier. T'aura plus que, sur ta page de résultat, à faire un lien vers la servlet. La sevlet pourra très bien prendre le résultat de la "méthode" et l'envoyer avec quelques header informant le navigateur qu'il s'agit d'un fichier texte.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 90
    Points : 54
    Points
    54
    Par défaut
    Merci pour ta réponse tchize

    Il ne me reste plus qu'à trouver une FAQ pour bien développer ma servlet car je n'ai pas encore vraiment eu l'occasion d'en développer une :p

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    C'est pas bien dur, tu surcharge la méthode doPost ou doGet et t'y fait le travail

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 90
    Points : 54
    Points
    54
    Par défaut
    Ok Tchize merci pour cette info je testerai ca quand j'aurais le code exact devant les yeux durant la semaine

    Merci pour ton aide

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 90
    Points : 54
    Points
    54
    Par défaut
    Me revoilà

    En faites la page html affichée contient les liens en dur. Cette page est sous forme de xsl, et nous avons les liens href dedans avec le lien en dur vers les fichiers.

    Tchize aurais tu un petit tuto concernant les servlets pour que je parte sur un bon socle car je ne suis pas sûr de la bonne façon de procéder...

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 90
    Points : 54
    Points
    54
    Par défaut
    Bon j'ai commencé à développer ma servlet, et donc je me suis attelé à développer la méthode doGet().

    Voici mon 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
    25
     
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     
    		String type = request.getParameter("type");
    		Recherche rechercheToExport = (Recherche) request.getSession().getAttribute(Property.SESSION_RECHERCHE);
     
     
    		if ("csv".equals(type)) {
    			rechercheToExport.createCSVFile();
    			String csv = Property.getAbsolutePath(Property.PROJECT_FILE, Property.EXPORT_CSV_ZIP).replace("//", "/");
    			File f = new File(csv);
    			response.setContentType("multipart/zip"); 
     
     
    			response.setHeader("Content-Disposition", "attachment; filename=\"" + f.getName().trim() + "\";"); 
     
    			response.setContentLength((int)f.length()); 
    		} else if ("ldif".equals(type)){
    			rechercheToExport.createLDIFFile();
                            //a faire
    		} else {
    			//arg1.
    		}
    		//getServletContext().getRequestDispatcher("/jsp/recherche.jsp").forward(request, response);
    	}
    Les méthodes createCSVFile() et createLDIFFile() génèrent dans mon appli web chacun un fichier zip, l'un contenant un fichier au format csv, l'autre au format ldif.

    Lorsque je teste l'appli web, je fais une recherche, puis je clique sur le lien d'export au format csv (vu que c'est le seul export que j'ai développé pour le moment lol). Problème: je n'arrive pas à récupérer le fichier! Il fait 0 octets! Pourtant si je regarde ds mon workspace, le fichier d'export lui est bien existant et correctement généré...

    J'ai laissé en commentaire une ligne que j'avais mise aussi avant, je ne sais pas si elle me servira vraiment.

    Aidez moi svp!

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if ("csv".equals(type)) {
    			rechercheToExport.createCSVFile();
    			String csv = Property.getAbsolutePath(Property.PROJECT_FILE, Property.EXPORT_CSV_ZIP).replace("//", "/");
    			File f = new File(csv);
    			response.setContentType("multipart/zip"); 
     
     
    			response.setHeader("Content-Disposition", "attachment; filename=\"" + f.getName().trim() + "\";"); 
     
    			response.setContentLength((int)f.length()); 
    		}
    C'est bien beau çà, mais à part des headers, tu renvoie pas grand chose à ton client

    C'est pas dans in fichier qu'il faut écrire ton csv, c'est dans response.getOutputStream() ^^

    J'ajoute à çà que, faire tout tes exports dans le même fichier, bonjour la cata quand 2 users demanderont simultanément un csv, ou qu'un user fait un "double click" sur le lien (deux fois la génération en parallèle). Faut un peut penser multithread quand on bosse en web

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 90
    Points : 54
    Points
    54
    Par défaut
    Salut et merci pour ta réponse,

    entre temps j'avais trouvé pour le GetOutputStream dans la FAQ Java du site

    Sinon je suis conscient du problème d'unicité du fichier généré mais il n'y a qu'un ou 2 utilisateurs qui utilisent cette application. Une solution simple, je pense, serai peut etre de générer un fichier avec la date dans le nom du fichier ou y a t il plus propre?

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    générer directement dans le outputStream sans passer par un fichier. De toutes facon, ta méthode de génération faire probablement un truc du style 'new FileWriter(file) ou new FileOutputStream(file)', donc le fichier est pas nécessaire, revois ton code pour travailler sur un outputstream quelconque

Discussions similaires

  1. l'appel d'une méthode Java
    Par jessjess dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 09/11/2011, 20h29
  2. Appel d'une classe Java par une page HTML
    Par kqman dans le forum Général Java
    Réponses: 7
    Dernier message: 06/04/2011, 14h58
  3. Appeler systématiquement une méthode JAVA
    Par soucine dans le forum JSF
    Réponses: 6
    Dernier message: 17/08/2009, 17h56
  4. [JNI] appel d'une méthode java depuis le code natif
    Par myryad dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 19/05/2009, 11h23
  5. Réponses: 6
    Dernier message: 24/03/2009, 16h17

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