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 :

Redirect, Forward aucun ne marche?!


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Par défaut Redirect, Forward aucun ne marche?!
    Salut a tous,

    J'ai developpe 2 servlets et 1 JSP qui communique entre elles.
    La 1ere servlet (AGSenderServlet) appelle la 2eme servlet (AGReceiverServlet) pour lui envoyer un fichier.
    Ensuite, une fois le fichier recu, la 2eme servlet appelle la page JSP.

    Tout marche bien sauf le dernier appel pour la JSP. Rien ne se passe en fait. Pas d'erreur ou d'exception. Le code de la JSP n'est meme pas parcouru.

    Voici mes 2 servlets:
    - AGSenderServlet »

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    import java.io.File;
    import java.io.IOException;
     
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
    import org.apache.commons.httpclient.HttpClient;
    import org.apache.commons.httpclient.methods.PostMethod;
    import org.apache.commons.httpclient.methods.multipart.FilePart;
    import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
    import org.apache.commons.httpclient.methods.multipart.Part;
    import org.apache.commons.httpclient.params.HttpMethodParams;
     
    //This servlet sends a file to another server
    public class AGSenderServlet extends HttpServlet {
    	public void doGet(HttpServletRequest request,
                HttpServletResponse response)
    	throws ServletException, IOException {
    		String filename = request.getParameter("filename");
    		String ext = request.getParameter("ext");
    		String serverName = request.getParameter("serverName");
    		String port = request.getParameter("port");
    		String path = null;
    		String uri = "http://"+serverName+":"+port+"/AGReceiverServlet";
     
    		//System.out.println(this.getServletContext().getRealPath("/"));
    		File file = new File((this.getServletContext().getRealPath("/sync/out"))+"\\"+filename+'.'+ext);
    		System.out.println("Test = "+file.getAbsolutePath());
    		PostMethod post = new PostMethod(uri);
            Part[] parts = new Part[] {
            	//new StringPart("hostname", hostname),
                new FilePart(file.getName(), file) // File you want to upload
            };
            post.setRequestEntity(new MultipartRequestEntity(parts, post.getParams()));
            //MultipartRequestEntity multipart = new MultipartRequestEntity(parts, post.getParams());
     
            // Now perform the POST and check for errors
            HttpClient http = new HttpClient();
            post.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, 
            		new DefaultHttpMethodRetryHandler(3, false));
     
            int status = http.executeMethod(post);
     
            //if (status != HttpStatus.SC_OK) {
            //    throw new IOException("Received HTTP status code " + status);
            //}		
    	}
     
    	public void doPost(HttpServletRequest request,
                HttpServletResponse response)
    	throws ServletException, IOException {
    			doGet(request, response);
    	}
    }
    - AGReceiverServlet »

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    import java.io.File;
    import java.io.IOException;
    import java.util.Iterator;
    import java.util.List;
     
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    import org.apache.commons.fileupload.FileItem;
    import org.apache.commons.fileupload.FileUploadException;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;
    import org.apache.commons.io.FilenameUtils;
     
    //This servlet receives a file from another server
    public class AGReceiverServlet extends HttpServlet {
    	public void doGet(HttpServletRequest request,
                HttpServletResponse response)
    	throws ServletException, IOException {
    	    // Create a factory for disk-based file items
    		DiskFileItemFactory factory = new DiskFileItemFactory();
     
    	    // Create a new file upload handler
    		ServletFileUpload upload = new ServletFileUpload(factory);
    		String realPath = this.getServletContext().getRealPath("sync/in");
    		List items = null;
    				try {
    					items = upload.parseRequest(request);
    				} catch (FileUploadException e) {
    					e.printStackTrace();
    				}
    				// Process the uploaded items
    				Iterator iter = items.iterator();
    				try {
    					String fileName = "blabla";
    					while (iter.hasNext()) {
    						FileItem item = (FileItem) iter.next();
    						// Process a file upload
    						if (!item.isFormField()) {					
    							fileName = item.getName();
    							long sizeInBytes = item.getSize();
    							//Write to File
    							if (fileName != null) {
    						        fileName = FilenameUtils.getName(fileName);
    						    }
    							File uploadedFile = new File(realPath);
    							if (!uploadedFile.exists())
    								uploadedFile.mkdirs();
    							System.out.println("PATH = "+realPath+"/"+fileName);
    							uploadedFile = new File(realPath+"/"+fileName);
     
    							item.write(uploadedFile);
    						}
    					}
    					System.out.println("http://"+request.getServerName()+':'+request.getServerPort()+"/upTool/filereceived.jsp?filename="+fileName);
    					String redirectURL = "http://"+request.getServerName()+':'+request.getServerPort()+"/upTool/filereceived.jsp?filename="+fileName;
    					response.sendRedirect(redirectURL);
    					//response.sendRedirect("http://www.google.com");
     
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
     
    	}
     
    	public void doPost(HttpServletRequest request,
                HttpServletResponse response)
    	throws ServletException, IOException {
    			doGet(request, response);
    	}
    }
    J'ai poste mon probleme sur le forum Java mais y a qu'une personne qui m'a repondu et je comprend pas vraiment ce qu'il a voulu m'explique. Apparemment ca viendrait de la reponse envoyee par response.sendRedirect(redirectURL); de ma 2eme servlet qui n'est bien interprete par ma 1ere servlet
    J'ai essaye d'utiliser la fonction forward du dispatcher mais ca me donne le meme resultat.
    Voici la conversation: http://forums.sun.com/thread.jspa?me...47964#11047964

  2. #2
    Expert éminent
    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 : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Ta "sender" agit en fait comme un client HTTP. Elle va envoyer une nouvelle requete à ta deuxième servlet. La deuxième servlet va traiter la requete et envoyer un code "redirect" vers la JSP. Une fois ça fait, ta première servlet ne va rien faire. Elle se contente de retourner. Tu dois donc

    1) dire à la méthode http de suivre les instructions de redirect, via

    postMethod.setfollowRedirects(true);

    2) te décider à retourner quelque chose à l'utilisateur final, au minimum en copiant la réponse que t'as recue de la deuxième servlet.

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Par défaut
    Le probleme c'est que j'ai l'impression que la JSP n'est pas parcouru. J'ai des println dans la JSP et ils ne sont pas affiches dans la console de Tomcat alors que ceux des 2 servlets oui.

    En fait j'ai pas vraiment besoin de retourner un resultat au client car en pratique cela sera une tache planifiee qui lancera la servlet.

  4. #4
    Expert éminent
    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 : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par MinsK Voir le message
    Le probleme c'est que j'ai l'impression que la JSP n'est pas parcouru.
    Voir mon point numéro 1 (faut lire)

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Par défaut
    Ah ok! Moi je pensais que ca "lancait" (triggered en anglais) quand meme la page sans recevoir le resultat. Je pensais en fait que le seveur parcourait le code de la page sans que le resultat parvienne au client.

    Bon beh je vais tester ton code.

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Par défaut
    Apparemment Tomcat n'apprecie pas cette methode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    java.lang.IllegalArgumentException: Entity enclosing requests cannot be redirected without user intervention
    	org.apache.commons.httpclient.methods.EntityEnclosingMethod.setFollowRedirects(EntityEnclosingMethod.java:221)
    	AGSenderServlet.doGet(AGSenderServlet.java:38)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    La ligne 38 correspond au setfollowRedirects(true);

    Sur le forum de Java un utilisateur m'avait dit d'utliliser le code presente sur cette page:http://hc.apache.org/httpclient-3.x/redirects.html
    Mais je vois pas trop comment je peux recuperer la "location" vers la JSP

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 23/03/2011, 11h36
  2. Réponses: 6
    Dernier message: 16/04/2009, 16h30
  3. Le .forward : comment ça marche
    Par Eusebius dans le forum Réseau
    Réponses: 2
    Dernier message: 28/07/2006, 21h50
  4. Redirection de port routeur (forward)
    Par Fabouney dans le forum Hardware
    Réponses: 6
    Dernier message: 29/09/2005, 08h29
  5. Redirection 404 marche pas en local
    Par le mage tophinus dans le forum Apache
    Réponses: 8
    Dernier message: 10/06/2005, 08h12

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