2009-05-08 8 views
1

Je construis une simple servlet java qui passe des catégories en utilisant une variable URL dans une autre servlet.servlets java: passer des valeurs de variable url avec des espaces

Par exemple, dans le code suivant

ResultSet rs = qw.DBquery("select distinct manufacturer from Products order by manufacturer asc"); 
try { 
    while (rs.next()) { 
     table+= "<tr><td><a href=\"getItems?manufacturer=" 
       + rs.getString("Manufacturer") + "\">" 
       + rs.getString("Manufacturer") + "</a></td></tr>\n"; 
    } 
} 

sa sortie comprend:

Adobe 
Adobe Acrobat 
IBM 
IBM - Workstations 

Si je clique sur l'un, le lien arrive à l'URL comme:

http://localhost/getItems?getItems?manufacturer=Adobe%20Acrobat 

Cependant, quand j'obtiens la variable du fabricant et sa valeur

String manufacturer = request.getParameter("manufacturer"); 
ResultSet rs1 = qw.DBquery("select * from products where Manufacturer like '" 
          + manufacturer + "'"); 

La sortie de la requête échoue et ne produit rien s'il y a des espaces dans la valeur du fabricant. Des idées ou des solutions de contournement sur la façon de convertir ce retour? Ai-je besoin de faire une sorte d'urdécode?

merci à l'avance

Répondre

3

Le codage de l'espace dans une URL en% 20 est correct, et le conteneur d'applications Web prend en charge le décodage d'URL.

String manufacturer = request.getParameter("manufacturer"); 

La chaîne manufacturer dans votre programme devrait donc contenir 'Adobe Acrobat' (avec un espace). Pouvez-vous vérifier cela (en l'enregistrant quelque part)?

"select * from products where Manufacturer like '"+ manufacturer + "'" 

Veuillez également utiliser des variables de liaison. L'interpolation directe des paramètres de requête (sans aucune validation!) Dans SQL vous laisse totalement ouvert aux attaques par injection SQL. C'est mauvais pour la performance aussi.

"select * from products where Manufacturer like ? " 
Questions connexes