JSP vs PHP : file upload

JSP vs PHP : file upload - Java - Programmation

Marsh Posté le 09-02-2004 à 14:23:43    

continuation de la la discute du topic copier/coller
 

Mara's dad a écrit :

C'est vrai que j'ai gardé des habitudes de PHP.
Quand c'est des bonnes habitudes, je suis un peu déçu de pas retrouver un truc equivalent dans J2EE.
Je ne vois pas trop pourquoi le programmeur doit se taper la décomposition de la requête reçue par le client c'est tout.
Ce que je veux est simple :
Le client envoie une requête HTTP:
L'HttpServletRequest propose une collection (ou plusieurs) qui contient tous les élément reçus, quelle que soit la méthode, histoire que le programmeur ne soit pas obligé d'aller fouiller dans 15 APIs pour retrouver ses petits.
En PHP, quelle que soit la requête reçue, tu as les collections suivantes :
$_GET
$_POST
$_SESSION
$_COOKIES
$_FILES
Que ton formulaire mélange GET et POST ou qu'il soit en "multipart/form-data", t'as pas à te poser la question. Et c'est pas plus mal, vu que tu as rarement (voire jamais) la nécessité de gérer ce genre de choses.
Pour les Fichiers uploadés, tout ce que t'as à faire, c'est les déplacer à leurs place définitive. Si tu ne le fais pas, ils sont automatiquement supprimés à la fin du script.
Bref, gérer un upload de fichier se fait en 2 lignes en PHP alors qu'avec java, ben j'essaye même pas de compter...
M'enfin, c'est du passé, j'ai plus le problème maintenant :D
 


 
je vois pas le lien avec get ou post, mais si tu veux faire pareil en java dans une servlet, tu as juste à surcharger la méthode service à la place de doGet ou doPost.
Si tu fais des JSP, c'est comme en PHP : tu t'en fous.
 
ensuite pour récupérer les fichiers en java ca prend 2 lignes aussi :  

Code :
  1. DiskFileUpload upload = new DiskFileUpload();
  2. List files = upload.parseRequest(request);


 
vraiment, je vois pas la difficulté ... C'est juste que PHP gère le fileupload en standard alors que java considère que c'est un extension (ce qui est vrai).


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 09-02-2004 à 14:23:43   

Reply

Marsh Posté le 09-02-2004 à 14:35:24    

1- Tu oublie le try / catch
2- Tu oublie de tester si le fichier est sur disque ou en mémoire pour l'écrire ailleur.
3- Tu oublie d'écrire le fichier ailleur
 
Et si par malheur tu as aussi un champs text, ben il sera pas accessible par getParameter...
Pourquoi ?
 
PS : On recommence la discussion depuis le début c'est ça ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 09-02-2004 à 16:15:41    

Mara's dad a écrit :

1- Tu oublie le try / catch
2- Tu oublie de tester si le fichier est sur disque ou en mémoire pour l'écrire ailleur.
3- Tu oublie d'écrire le fichier ailleur
 
Et si par malheur tu as aussi un champs text, ben il sera pas accessible par getParameter...
Pourquoi ?
 
PS : On recommence la discussion depuis le début c'est ça ?


1/ si t'es dans une jsp pas besoin :o
2/ pas bien compris ...
3/ Tu peux utiliser la méthode parseRequest du DiskFileUpload :
upload.parseRequest(request, yourMaxMemorySize, yourMaxRequestSize, yourTempDirectory);
 
Après c'est de la config fine en fonction de ce que tu veux en faire du fichier que tu reçois ... Pour ca faut configurer le DiskFileUpload, ca prendra quelques lignes de plus mais tu ne le feras qu'une fois par appli...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 09-02-2004 à 17:11:33    

1- J'ai pas le droit de faire du java dans les JSP...
2- DefaultFileItem.isInMemory()
3- Je voulais parler de copier le fichier à sa destination finale.
Bref on est loin des 2 lignes.
Mais c'est bon là, ma méthode fonctionne, je trouve ça chiant c'est tout !
 
Bon çà donne :

Code :
  1. public static HashMap getParamsAndFilesFromRequest( HttpServletRequest request ) {
  2. final String MULTIPART = "multipart/form-data";
  3. // New disk fileUploadObject  
  4.     DiskFileUpload dFiles = new DiskFileUpload();
  5.     // Array of files from request
  6.     ArrayList filesItems = null;
  7.     // A file item
  8. DefaultFileItem fileItem;
  9. // Returned hMap
  10. HashMap htMap = new HashMap();
  11. // Count the number of uploaded files  
  12. int nNbItems = 0;
  13. // Parameter name
  14. String paramName;
  15. // Params from getParameterNames
  16. Enumeration paramNames;
  17. // MULTIPART request
  18. if( request.getContentType() != null && request.getContentType().startsWith( MULTIPART ) )
  19. {
  20.  // Get an array with all the fileItems in the request
  21.  try
  22.  {
  23.   filesItems = (ArrayList) dFiles.parseRequest( request );
  24.  }
  25.  catch( FileUploadException e )
  26.  {
  27.   MsgLogService.log( 10000, MsgLogService.strLuteceModuleName, "L'upload du fichier a généré l'erreur:" + e );
  28.   return htMap;
  29.  }
  30.  // Count files
  31.  nNbItems = filesItems.size();
  32.  if( nNbItems == 0 )
  33.  {
  34.   throw new IllegalArgumentException( "Error uploading File: No file found in request" );
  35.  }
  36.  //For each field, we return the pairs key/values in HashMap
  37.  for( int i = 0; i < nNbItems; i++)
  38.  {
  39.   fileItem = (DefaultFileItem)filesItems.get( i );
  40.   if( fileItem.isFormField() )
  41.   {
  42.    htMap.put( fileItem.getFieldName(), fileItem.getString() );
  43.   }
  44.   else
  45.   {
  46.    // If in memory, write the file to disk.
  47.    if( fileItem.isInMemory() )
  48.    {
  49.     writeFileOnDisk( fileItem, fileItem.getStoreLocation().getAbsolutePath() );
  50.    }
  51.    htMap.put( fileItem.getFieldName(), fileItem );
  52.   }
  53.  }
  54. }
  55. // Standard request
  56. else
  57. {
  58.  paramNames = request.getParameterNames();
  59.  while( paramNames.hasMoreElements() )
  60.  {
  61.   paramName = (String)paramNames.nextElement();
  62.   htMap.put( paramName, request.getParameter( paramName ) );
  63.  }
  64. }
  65. return htMap;
  66. }


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 09-02-2004 à 17:35:47    

d'un autre côté en programmant un peu objet, tu serais pas obligé de taper l'appel à ton truc à chaque fois, contrairement à du php :ange:


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 09-02-2004 à 18:13:17    

C'est le cas :D
Cette méthode est appelée automatiquement dans la classe générique ActionBean dont hérite toutes les classes de la couche de présentation.
Dans cette dernière, je n'ai qu'à faire :
String strMonPraram = getParameter( "StringParamName" );
et
DefaultFileItem dfiBackground = getFileItem( "FileUploadParamName" );
 
Un peu comme en PHP quoi :D


Message édité par Mara's dad le 09-02-2004 à 18:13:56

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 09-02-2004 à 18:17:56    

je comprend pas bien ... tout le traitement que tu fais c'est ce que fait le DiskFileUpload ...
 
ex d'utilisation unitaire :  
 

Code :
  1. public void doGet(HttpServletRequest request, HttpServletResponse) {
  2. //...
  3.    DiskFileUpload upload = new DiskFileUpload();
  4.    upload.parseRequest(req, 0, 1024*1024*2, "c:\web\incoming" );
  5. //...
  6. }


La seule différence que je vois c'est que ton code met les fichiers uploadés dans une map alors que le parseRequest les file dans une List ...
 
 
Ensuite dans la requête, libre à toi d'appeler le parseRequest si tu attend un upload de fichier ou alors de manipuler l'objet request normalement (getParameter) pour récupérer les parametres


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 10-02-2004 à 01:38:46    

Je vais voir ça demain...
Il est en effet tout a fait possible que je soit passé à coté de quelque chose si je comprend bien ce que tu écris :sweat:


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 10-02-2004 à 08:45:09    

juste une remarque aussi : ton code va planté si dans une requête tu as 2 paramêtre du même nom (valeur multiple). Dans ce cas il faut appeler getParameterValues(String) qui retourne un tableau de String (les valeurs) plutot que getParameter(String) qui retourne juste la 1ere valeur.
Tu as aussi la méthode getParameterMap() qui fait exactement ce que fait la fin de ton code ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 10-02-2004 à 08:51:36    

Mara's dad a écrit :


Il est en effet tout a fait possible que je soit passé à coté de quelque chose si je comprend bien ce que tu écris :sweat:  


en fait j'ai l'impresion que tu as utilisé l'objet DiskFileUpload comme l'objet FileUpload :/  
Le DiskFileUpload ajoute justement tout le mécanisme de sauvegarde disque des fichiers uploadés ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 10-02-2004 à 08:51:36   

Reply

Marsh Posté le 10-02-2004 à 09:19:56    

Ok, je savais bien que je devait en parler à un connaisseur :D
M'enfin, c'est quand même loin d'être simple et clairement expliqué dans les docs, non ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 10-02-2004 à 09:50:12    

Mara's dad a écrit :

Ok, je savais bien que je devait en parler à un connaisseur :D
M'enfin, c'est quand même loin d'être simple et clairement expliqué dans les docs, non ?


ben perso je connaissais pas cette API et j'ai compris rapidement ...
et c'est assez bien expliqué sur leur site : http://jakarta.apache.org/commons/ [...] using.html
 
Mais bon, c'est pas de ta faute : t'as été martirisé par du PHP quand tu étais petit ;)


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 10-02-2004 à 11:03:58    

Ce que j'ai lu n'est pas très éloigné de ce que j'ai fais il me semble...


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 10-02-2004 à 11:19:18    

Mara's dad a écrit :

Ce que j'ai lu n'est pas très éloigné de ce que j'ai fais il me semble...


Non mais sur la fin, le code qu'ils montrent c'est si tu veux gérer les choses à la main, genre copier le fichier dans des répertoires différents, chnager le nom, etc ...
 
D'après ce que j'ai vu de ton code, ce que tu fais ne va pas plus loin que ce que fait le DiskFileUpload ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 10-02-2004 à 11:54:12    

Bon, on reprend depuis le début, c'est à dire mes besoins :
 
1- Dans les classes de traitements, je ne veux pas me poser la question du format de la requête HTTP.
2- J'ai besoin d'une méthode simple qui me retourne la valeur d'un champ de formulaire en fournissant son nom.
3- J'ai besoin d'une méthode simple qui me retourne un DefaultFileItem d'un champ de formulaire de type file en fournissant son nom.
 
Donc il faut :
1- Que je parse la requête avec la bonne méthode suivant son content type.
2- Que les paramettres de la requête, une fois cette dernière parsée, soient dans une HahsMap et non une simple liste, si je veux pourvoir y accéder directement par leurs noms.
 
Reste le problème des multivalués que je n'ai pas abordé pour le moment.
Toutefois, j'entrevoie un problème ( que je n'avais pas en PHP :D ) :
Par exemple, sur un <select multiple...> on se dit que ce serait sympa de récupérer une collection. Mais que se passera-t-il si l'utilisateur ne sélectionne qu'une seule option ?
Le même formulaire donnera quelque-fois un String, et d'autres fois une Collection de Strings... Pas impossible à gérer, mais pas cool :/


Message édité par Mara's dad le 10-02-2004 à 11:54:30

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 10-02-2004 à 11:58:36    

Mara's dad a écrit :


Par exemple, sur un <select multiple...> on se dit que ce serait sympa de récupérer une collection. Mais que se passera-t-il si l'utilisateur ne sélectionne qu'une seule option ?
Le même formulaire donnera quelque-fois un String, et d'autres fois une Collection de Strings... Pas impossible à gérer, mais pas cool :/


 
Ben non. Si tu fais un getParameters tu récuèreras un tableau de String dans tous les cas. S'il n'y a qu'une seule fois le paramètre dans la requète, ton tableau sera de longueur 1, c'est tout.


---------------
Les Vers Solitaires, on aime ... ou pas !
Reply

Marsh Posté le 10-02-2004 à 12:21:00    

Ok, je te crois. J'ai pas essayé, mais je ne peux m'empécher de me demander : comment fait le parser pour savoir qu'il doit créer un tableau quand une seule valeur est envoyée ?
D'après mes expériences d'annalyse de requete HTTP, je ne vois pas bien comment c'est possible...
Quand la requête envoie :
TOTO=0&TOTO=4&TOTO=7&ACTION=GO
Je devine comment fait le parser pour décider que TOTO est un multivalué, mais s'il n'y a qu'une seule valeur ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 10-02-2004 à 12:23:18    

en interne, c'est une hashmap qui est stockée, qui associe de clé-String a des values-String[]
 
qd tu fais un getParameter(String s) ça te renvoie en fait map.get(s)[0]
 
[:spamafote]
c quoi la question? [:everything4free]


Message édité par the real moins moins le 10-02-2004 à 12:23:48

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 10-02-2004 à 12:25:49    

Mara's dad a écrit :

Ok, je te crois. J'ai pas essayé, mais je ne peux m'empécher de me demander : comment fait le parser pour savoir qu'il doit créer un tableau quand une seule valeur est envoyée ?
D'après mes expériences d'annalyse de requete HTTP, je ne vois pas bien comment c'est possible...
Quand la requête envoie :
TOTO=0&TOTO=4&TOTO=7&ACTION=GO
Je devine comment fait le parser pour décider que TOTO est un multivalué, mais s'il n'y a qu'une seule valeur ?


 
De toute façon, la méthode est typée (comme tout en Java). Elle te rend un tableau de String, et pas autre chose. ça tu peux en être sur. Après, comment elle se démerde derrière, c'est pas franchemetn ton problème!


---------------
Les Vers Solitaires, on aime ... ou pas !
Reply

Marsh Posté le 10-02-2004 à 12:33:17    

Ok, j'avais mal lu :D (getParameters au lieu de getParameter)...


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 10-02-2004 à 12:52:00    

the real moins moins a écrit :

en interne, c'est une hashmap qui est stockée, qui associe de clé-String a des values-String[]
 
qd tu fais un getParameter(String s) ça te renvoie en fait map.get(s)[0]
 
[:spamafote]
c quoi la question? [:everything4free]


 
Putain, mais quel bouley ce Dad !
 
Ok, j'ai un formulaire en "multipart/form-data".
Ce formulaire envoie aussi bien des fichiers que des champs normaux. Par exemple un <input type="texte" name="TOTO" value="test">
 
Donc coté java :

Code :
  1. // Cas du multipart :
  2. if( FileUpload.isMultipartContent(request) )
  3. {
  4. // Création d'un gestionnaire de file-upload
  5. DiskFileUpload upload = new DiskFileUpload();
  6. // Parse de la requête
  7. List items = upload.parseRequest(request);
  8. // A partir de là, j'ai une liste et pas une HasMap.
  9. String param = request.getParameter( "TOTO" );
  10. }


Et bien sûr param == null !
 
Est-ce que vous commencez à comprendre mon problème, ou est-ce que je suis un irreductible bouley ( pas impossible ça... )


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 10-02-2004 à 12:58:01    

nan mais je comprend bien ... tu veux une map à la place d'une List ... et là c'est clair que t'as pas le choix, il faut que tu te la créé à la mano.  
 
(remarque, je pense pas que le request.getParameter fonctionne dans le cas d'une requete multipart. Faut surement récupérer les paramêtres dans la List comme c'est indiqué sur le site)


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 10-02-2004 à 13:00:05    

comme dit benou, sauf que j'espere qu'il y moyen de recuperer qqchose comme une "MultiPartHttpServletRequest", qui implemente la meme interface que ServletRequest ! (c'est le cas avec le truc d'oreilly que j'avais mentionné)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 10-02-2004 à 13:02:56    

the real moins moins a écrit :

comme dit benou, sauf que j'espere qu'il y moyen de recuperer qqchose comme une "MultiPartHttpServletRequest", qui implemente la meme interface que ServletRequest ! (c'est le cas avec le truc d'oreilly que j'avais mentionné)


pas dans le truc d'apache ...
mais ca se fait en 2 coups de cuillères à pot. (amis des proverbes à la con :jap: )


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 10-02-2004 à 13:12:59    

Ok, j'ai donc bien fait ce qu'il falait faire ( sauf utiliser le truc d'oreilly ).
A la fin de mon code, si le formulaire n'est pas "multipart", je recopie les params dans ma hasMap pour avoir un accès standard aux paramètres, indépendement du enctype du formulaire.
 
Reste les multivalués...
Le développeur sait bien sûr s'il attend un tableau ou pas. Il peut donc choisir entre getParameter ou getParameters.
Le problème, c'est que j'interviens avant le développeur, et que je n'ai pas de moyen à priori de savoir si le champs est une collection ou pas.
Une solution simple serait de traiter tous les paramètres non fichiers comme simples ET comme collections.
On aurait donc :
Une HashMap pour les fichiers.
Deux HasMap pour les paramètres. Une qui considère les paramètres comme simples,  et une autres qui les prends comme des collections.
C'est un peu du gâchi, mais çà doit marcher.
Reste à trouver l'équivalent du getParameters pour un multipart, ou regarder du coté d'oreilly...
 
Bon, je vais me sustenter, et je reviens :D


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 10-02-2004 à 13:20:17    

a mon avis dans ta hashmap tu dois uniquement stocker des String[]
et renvoyer un objet qui encapsule cette hashmap qui a 2 methodes  getParameter et getParameters. (la premiere ne renvoyant que le 1er element de l'array)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 10-02-2004 à 16:53:56    

Arf, pas con du tout ça !
 
Autres choses à voir :
1- Si l'action d'un formulaire POST multipart contient aussi des paramètres (en GET donc), il ne faut pas les oublier. Conclusion, il faut gérer request.getParameterNames(); dans tous les cas, enfin il me semble...
 
2-Pour les multivalués dans un multipart, comme tout ce qu'on a est une List de DefaultFileItem, on est obligé de faire la détection sois même. Attention tout de même de ne pas mettre un champs de formulaire et un upload dans une collection sous prétexte qu'il ait le même nom :D
Blague à part, en fait comme tout les éléments sont des collections (ou des tableaux,...) dans les HashMaps, il suffit de rechercher dans cette dernière si on a déjà quelque-chose pour le nom. Ce qui pose un nouveau problème si quelqu'un pond une page HTML avec des params ( un en GET et un en POST "multipart" ) avec le même nom... M'enfin YAKA dire que ça n'arrivera pas :D


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 10-02-2004 à 17:02:06    

1/ pour le get, je vois pas pq tes parametres seraient gerés differement de ceux du post.


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 10-02-2004 à 17:12:59    

Je fait un test de ce que j'ai en tête, et je t'envoie le résultat (requête HTTP et ce que vois DiskFileUpload).


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 10-02-2004 à 17:37:45    

Donc, résultat des course, j'avais raison :D
 
D'abord, le HTML :

<html>
<body>
<form action="fileupload.jsp?urlParam=bonjour" method="post" enctype="multipart/form-data">
<select name="TOTO" multiple size="10">
<option value="0">v1</option>
<option value="1">v2</option>
<option value="2">v3</option>
<option value="3">v4</option>
<option value="4">v5</option>
<option value="5">v6</option>
<option value="6">v7</option>
<option value="7">v8</option>
</select><br>
<input type="submit" name="action" value="go">
</form>
</body>
</html>


 
Ce qu'envoie le navigateur (merci FireFox 0.8 + Live HTTP Headers ) quand on sélectionne v2 et v8 dans la liste (y'a pas de file, mais c'est pas le propos...):

POST /lutece/jsp/test_local/fileupload.jsp?urlParam=bonjour HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://127.0.0.1:8080/lutece/jsp/test_local/multiple.html
Cookie: JSESSIONID=C021C78EF56F6967904CC35AB42294A8
Cache-Control: max-age=0
Content-Type: multipart/form-data; boundary=---------------------------41184676334
Content-Length: 323
-----------------------------41184676334
Content-Disposition: form-data; name="TOTO"
 
1
-----------------------------41184676334
Content-Disposition: form-data; name="TOTO"
 
7
-----------------------------41184676334
Content-Disposition: form-data; name="action"
 
go
-----------------------------41184676334--
 


 
Le JSP (on ne peut plus basique):
 

Code :
  1. <jsp:useBean id="x" scope="session" class="fr.paris.lutece.portal.web.TestBean" />
  2. <% response.getWriter().print( x.multiple( request ) ); %>


 
Et maitenant le code java qui traite la request :

Code :
  1. public String multiple( HttpServletRequest request )
  2. {
  3. String response = "Debut ----------------------------------- debuT<br>";
  4. //  Cas du multipart :
  5. if( FileUpload.isMultipartContent(request) )
  6. {
  7.  // Création d'un gestionnaire de file-upload
  8.  DiskFileUpload upload = new DiskFileUpload();
  9.  // Parse de la requête
  10.  try
  11.  {
  12.   List items = upload.parseRequest( request );
  13.   Iterator iter = items.iterator();
  14.   DefaultFileItem dfi;
  15.   while( iter.hasNext() )
  16.   {
  17.    dfi = (DefaultFileItem)iter.next();
  18.    response += "Param : " + dfi.getFieldName() + ", Value : " + dfi.getString() + "<br>";
  19.   }
  20.  }
  21.  catch( Exception e)
  22.  {
  23.   return e.getLocalizedMessage();
  24.  }
  25. }
  26. response += "-------------------------------------------<br>";
  27. response += "urlParam : " + request.getParameter( "urlParam" ) + "<br>";
  28. response += "Fin ----------------------------------- fiN<br>";
  29. return( response );
  30. }


 
Et enfin le résultat :

Debut ----------------------------------- debuT
Param : TOTO, Value : 1
Param : TOTO, Value : 7
Param : action, Value : go
-------------------------------------------
urlParam : bonjour
Fin ----------------------------------- fiN


 
On vois bien que ce qui est passé dans l'URL ( en GET donc ), n'est pas du tout traité par le upload.parseRequest( request ). Ce qui est tout à fait "normal" vu que c'est pas son boulot !
 
M'enfin, je tiens le bon bout, me reste plus qu'à paufiner mon parseur et les méthodes getParameter(s) d'ActionBean.
 
Merçi à tous de m'avoir supporté si longtemps, et à la prochaine pour les inévitables coups de gueule que Java ne manquera pas de me faire pousser :fou:  :o  :ange:


Message édité par Mara's dad le 10-02-2004 à 17:41:21

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 10-02-2004 à 17:40:18    

d'un autre coté, je suis pas convaincu que c'est "standard" d'avoir des parametres "en post" et "en get" sur la meme requete..


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 10-02-2004 à 17:45:56    

Peut-être pas n'empèche que même s'il y a des chances qu'on n'utilise jamais un truc aussi crado, on ne peut pas jurer que ça ne soit jamais utilisé. Quelques fois, on est obligé d'utiliser un artifice de ce genre pour ne pas remettre en cause tout un édifice longement pensé, et ajouter au dernier moment la petite feature que veut le client.
De toute manière çà ne me coûte strictement rien de le faire donc y'a pas de raison de se priver.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 10-02-2004 à 18:24:27    

the real moins moins a écrit :

d'un autre coté, je suis pas convaincu que c'est "standard" d'avoir des parametres "en post" et "en get" sur la meme requete..


le http le permet donc bon ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 10-02-2004 à 18:26:03    

benou a écrit :


le http le permet donc bon ...

ce que je dis c'est que je suis pas sur que ce soit dans la rfc


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 10-02-2004 à 18:27:28    

the real moins moins a écrit :

ce que je dis c'est que je suis pas sur que ce soit dans la rfc


ouais, je suis pas allé vérifier ...  
mais si je devais parrier je dirais que c'est permis :)


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 10-02-2004 à 18:29:42    

ok [:spamafote]
d'un autre coté ça me semble vraiment louche que le machin de jakarta permette pas de recuperer un truc qui implemente ServletRequest :heink:
(y'aurait pas ça dans un autre commons-* des fois?)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 10-02-2004 à 18:43:31    

the real moins moins a écrit :

ok [:spamafote]
d'un autre coté ça me semble vraiment louche que le machin de jakarta permette pas de recuperer un truc qui implemente ServletRequest :heink:
(y'aurait pas ça dans un autre commons-* des fois?)


pas à ma connaissance ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 10-02-2004 à 20:15:35    

Py z'ètes que des menteurs !
c'est pas getParameters mais getParameterValues !
Py encore une autre remarque : le mélange GET dans l'url et le formulaire ne marche que si le form est en POST. En GET, les params de l'url sont écrasés par ceux du formulaire...
Bref c'est quand même à éviter, ce qui n'empèche pas de gérer le cas.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 10-02-2004 à 20:30:22    

Mara's dad a écrit :

Py z'ètes que des menteurs !
c'est pas getParameters mais getParameterValues !


[:kiki]

benou a écrit :

juste une remarque aussi : ton code va planté si dans une requête tu as 2 paramêtre du même nom (valeur multiple). Dans ce cas il faut appeler getParameterValues(String) qui retourne un tableau de String (les valeurs) plutot que getParameter(String) qui retourne juste la 1ere valeur.
Tu as aussi la méthode getParameterMap() qui fait exactement ce que fait la fin de ton code ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 10-02-2004 à 20:33:10    

Arf, je viens de le voir. C'est el_gringo ( http://forum.hardware.fr/hardwaref [...] tm#t637151 ) qui m'a enduit d'erreur, que tout le monde à repris ensuite :D
Bon, py je vous aime bien moi, c'était juste un blague hein :o


Message édité par Mara's dad le 10-02-2004 à 20:33:30

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed