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

  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

  7. #7
    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
    arrien à voir avec tomcat. Faudra juste suivre le redirect "à la main". Si ton status code est un redirect, faudra regarder dans le method les header renvoyé, repérer celui du redirect et faire une nouvelle requete vers la redireciton.

    Un redirect, contrairement à un forward, nécessite 2 requetes http, c'est pour ça que le JSP n'est pas parcouru directement au sortir de la deuxième servlet.

  8. #8
    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
    Oui c'est un status "Redirect": code 302.

    Ce que je comprend pas c'est que j'ai essaye de faire un forward dans ma seconde servlet mais ca a pas marche non-plus.
    Je comprend pas aussi pourquoi je peux pas appeler la JSP directement a partir de ma seconde servlet sans avoir a passer par la 1ere

    Surtout que ma seconde servlet et ma JSP seront sur le meme serveur.

    Sinon, j'ai trouve une combine en faisant un redirect dans ma 1ere servlet.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int status = http.executeMethod(post);
    uri = "http://"+serverName+":"+port+"/upTool/filereceived.jsp?filename="+filename+'.'+ext;
     response.sendRedirect(uri);

  9. #9
    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
    Ce que je comprend pas c'est que j'ai essaye de faire un forward dans ma seconde servlet
    Ca c'est un autre problème. Comme on a ni ton code ni le message d'erreur, peux rien dire là dessus

    Je comprend pas aussi pourquoi on je peux pas appeler la JSP directement a partir de ma seconde servlet sans avoir a passer par la 1ere

    Surtout que ma seconde servlet et ma JSP seront sur le meme serveur.
    Parce tu utiliser un "REDIRECT" dans le code de ta servlet. Et un redirect c'est une simple instruction qui dit au client (ici servlet numéro 1) "Maintenant, c'est là que tu dois aller". Ca consiste donc à demander au client de faire une nouvelle requete (en l'occurence pour la JSP). Si tu veux tout faire depuis servlet numéro 2 il faut faire un forward et pas un redirect.

  10. #10
    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
    Bon donc j'ai enleve mon redirect dans la 1ere servlet et j'ai change le redirect dans la 2eme servlet par un forward.
    Voila le code des 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
    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";
     
    		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()));
     
     
            // Now perform the POST and check for errors
            HttpClient http = new HttpClient();
     
     
            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
    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();
    					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;
     
    			RequestDispatcher dispatcher = request.getRequestDispatcher(redirectURL);
    			dispatcher.forward(request, response);
     
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
     
    	}
     
    	public void doPost(HttpServletRequest request,
                HttpServletResponse response)
    	throws ServletException, IOException {
    			doGet(request, response);
    	}
    }
    Quand je lance la 1ere servlet, la seconde est appele mais la JSP toujours pas.
    A moins que le fait d'appeler la JSP a partir de la 2eme servlet n'affiche aucun println (j'ai des println un peu partout) dans la console de Tomcat?!

  11. #11
    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
    RequestDispatcher dispatcher = request.getRequestDispatcher(redirectURL);

    getRequestDispatcher prend une url relative à ta webapp, puisque tout se fait en interne! Avec ton code tu devrais d'ailleurs voir la belle exception dans les log de ton conteneur!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RequestDispatcher dispatcher = request.getRequestDispatcher("/filereceived.jsp");
    request.setAttribute("filename",".......");
    dispatcher.forward(request,response)
    Bien sur il faudra adapter ta JSP pour qu'elle aille chercher attribute dans le request scope et non pas dans les paramètres de la requete.

  12. #12
    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
    J'ai fait les changement mais rien n'a change

    Voici le nouveau code pour forwarder vers la JSP:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    String redirectURL = (this.getServletContext().getRealPath("sync"))+"\\filereceived.jsp";
    System.out.println(redirectURL);
    RequestDispatcher dispatcher = request.getRequestDispatcher(redirectURL);
    request.setAttribute("filename",fileName);
    dispatcher.forward(request, response);
    System.out.println("********** Test Servlet 2.4 *********");
    J'ai utilise l'adresse absolue pour etre sur qu'il n'y ait pas d'erreur.

    Voici ce que j'obtiens dans la console de Tomcat:
    Debug class loaded with class org.apache.commons.logging.LogFactory
    Debug log initialized
    15-Sep-2010 10:06:25 org.apache.coyote.http11.Http11Protocol init
    INFO: Initializing Coyote HTTP/1.1 on http-8080
    15-Sep-2010 10:06:25 org.apache.catalina.startup.Catalina load
    INFO: Initialization processed in 882 ms
    15-Sep-2010 10:06:25 org.apache.catalina.core.StandardService start
    INFO: Starting service Catalina
    15-Sep-2010 10:06:25 org.apache.catalina.core.StandardEngine start
    INFO: Starting Servlet Engine: Apache Tomcat/6.0.20
    15-Sep-2010 10:06:29 org.apache.coyote.http11.Http11Protocol start
    INFO: Starting Coyote HTTP/1.1 on http-8080
    15-Sep-2010 10:06:29 org.apache.catalina.startup.Catalina start
    INFO: Server startup in 4393 ms
    ********** Test Servlet 2.1 *********
    ********** Test Servlet 2.2 *********
    ********** Test Servlet 2.3 *********
    C:\Program Files\Servoy\application_server\server\webapps\ROOT\sync\filereceived.jsp
    ********** Test Servlet 2.4 *********
    Voici le code de ma JSP:
    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
    <%@ page contentType="text/html; charset=UTF-8" %>
    <%@ page import = "java.util.*" %>
    <%@ page import = "com.servoy.j2db.server.headlessclient.*" %>
    <%@ page import = "com.servoy.j2db.util.*" %>
    <%@ page import = "com.servoy.j2db.dataprocessing.IDataSet" %>
    <%@ page errorPage="errorpage.jsp" %> 
    <% 
            System.out.println("********** Test Servlet 3.1 *********");
            ISessionBean servoy_hc = (ISessionBean)session.getAttribute("servoy");
            System.out.println("********** Test Servlet 3.2 *********");
            if (servoy_hc == null)
            {
                    servoy_hc = HeadlessClientFactory.createSessionBean(request,"AssetGuardian","HeadlessClient","pwd");
                    session.setAttribute("servoy",servoy_hc);
                    boolean ok = servoy_hc.setMainForm("frm_files_handler");
                    if (!ok)
                    {
                            out.print("error cannot work on required form");
                            return;
                    }
            }else{
                    out.print("Not in if !");
                    return;
            }
     
            String filename = request.getAttribute("filename");
            Object pdfNameObj = servoy_hc.executeMethod(null,"genPDF",new Object[]{filename});
            String pdfName = pdfNameObj.toString();
            session.setAttribute("servoy",null);
    %>
    <html>
    <body>
    </body>
    </html>
    Les println de la JSP ne sont pas affiches. Pas d'exception.

  13. #13
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String redirectURL = (this.getServletContext().getRealPath("sync"))+"\\filereceived.jsp";
    ça ne ressemble en rien au code que je t'ai fournis.

  14. #14
    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
    ???
    Ca retourne l'adresse "C:\Program Files\Servoy\application_server\server\webapps\ROOT\sync\filereceived.jsp"

    Au lieu d'etre relative, elle est absolue. getRequestDispatcher() n'accepte pas les adresses absolues?!
    Pourtant lorsque je lie la JavaDoc je vois:
    The pathname specified may be relative, although it cannot extend outside the current servlet context. If the path begins with a "/" it is interpreted as relative to the current context root. This method returns null if the servlet container cannot return a RequestDispatcher.

  15. #15
    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
    Bon je viens de faire le test avec un adresse relative. Et ca a l'air de parcourir la JSP cette fois-ci

    15-Sep-2010 10:37:01 org.apache.catalina.core.ApplicationDispatcher invoke
    SEVERE: Servlet.service() for servlet jsp threw exception
    org.apache.jasper.JasperException: Unable to compile class for JSP:

    An error occurred at line: 26 in the jsp file: /sync/filereceived.jsp
    Type mismatch: cannot convert from Object to String
    23: return;
    24: }
    25:
    26: String filename = request.getAttribute("filename");
    27: Object pdfNameObj = servoy_hc.executeMethod(null,"genPDF",new Object[]{filename});
    28: String pdfName = pdfNameObj.toString();
    Donc maintenant j'ai juste besoin de recuperer proprement mon attribut. Mais j'aimerais bien savoir pourquoi ca marchait pas avec l'adresse absolue

  16. #16
    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
    Un simple cast aura en fait suffit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String filename = (String)request.getAttribute("filename");
    Maintenant il va falloir tester tout ca avec 2 serveurs differents!

  17. #17
    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
    Mais j'aimerais bien savoir pourquoi ca marchait pas avec l'adresse absolue
    c'est indiqué dans la javadoc

    The pathname must begin with a "/" and is interpreted as relative to the current context root.

  18. #18
    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


    On est pas sur la meme JavaDoc. Moi je suis sur celle-ci: http://download-llnw.oracle.com/java...va.lang.String)

    Aucune trace de "The pathname must begin with a "/" "

  19. #19
    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
    http://download.oracle.com/docs/cd/E...etContext.html ancienne doc, mais la doc reste claire, c'est par rapport "au contexte", rien à voir avec c:\program files

  20. #20
    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
    T'as sans doute raisin parce que ca ne marche qu'avec une adresse relative. Et pourtant HttpServletRequest (mon object request) derive directement de ServletRequest qui selon mon dernier lien, accepte les adresses absolue?!
    Interface HttpServletRequest

    All Superinterfaces:
    ServletRequest

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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