J'essaie de comprendre comment passer plusieurs paramètres dans une URL. Je souhaite transmettre la latitude et la longitude de mon Android classe à un Java servlet. Comment puis-je le faire?)?
URL url;
double lat=touchedPoint.getLatitudeE6() / 1E6;
double lon=touchedPoint.getLongitudeE6() / 1E6;
url = new URL("http://10.0.2.2:8080/HelloServlet/PDRS?param1="+lat+lon);
Dans ce cas, la sortie (écrite dans le fichier) est 28.53438677.472097
. Cela fonctionne, mais je souhaite définir la latitude et la longitude dans deux paramètres distincts afin de réduire mon travail côté serveur. Si ce n'est pas possible, comment puis-je au moins ajouter un espace entre lat
et lon
afin que je puisse utiliser tokenizer
class pour obtenir ma latitude et ma longitude. J'ai essayé de suivre la ligne mais en vain.
url = new URL("http://10.0.2.2:8080/HelloServlet/PDRS?param1="+lat+" "+lon);
output- Nothing is written to file
url = new URL("http://10.0.2.2:8080/HelloServlet/PDRS?param1="+lat+"&?param2="+lon);
output- 28.534386 (Only Latitude)
url = new URL("http://10.0.2.2:8080/HelloServlet/PDRS?param1="+lat+"?param2="+lon);
output- 28.532577?param2=77.502996
Mon code de servlet est le suivant:
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
final String par1 = req.getParameter("param1");
final String par2 = req.getParameter("param2");
FileWriter fstream = new FileWriter("C:\\Users\\Hitchhiker\\Desktop\\out2.txt");
BufferedWriter out = new BufferedWriter(fstream);
out.write(par1);
out.append(par2);
out.close();
Je voulais aussi savoir si c’était le moyen le plus sûr et sécurisé de transmettre les données d’un appareil Android à un serveur).
Cette
url = new URL("http://10.0.2.2:8080/HelloServlet/PDRS?param1="+lat+"¶m2="+lon);
doit travailler. Pour une raison quelconque1, vous avez besoin ?
avant le premier paramètre et &
avant les suivants.
Utiliser un paramètre composé comme
url = new URL("http://10.0.2.2:8080/HelloServlet/PDRS?param1="+lat+"_"+lon);
fonctionnerait aussi, mais ce n’est sûrement pas Nice. Vous ne pouvez pas utiliser un espace car il est interdit dans une URL, mais vous pouvez le coder comme %20
ou +
_ (mais c'est encore pire style).
1 déclarant que ?
sépare le chemin et les paramètres et que &
séparer les paramètres les uns des autres n'explique rien sur la raison. Certains RFC disent "utiliser? Là et là", mais je ne vois pas pourquoi ils n'ont pas choisi le même personnage.
Je ne sais pas grand chose à propos de Java mais les arguments de requête d'URL doivent être séparés par "&", pas "?"
http://tools.ietf.org/html/rfc3986 est un bon endroit pour la référence en utilisant "sub-delim" comme mot clé. http://en.wikipedia.org/wiki/Query_string est une autre bonne source.
Vous pouvez transmettre plusieurs paramètres en tant que "?param1=value1¶m2=value2
"
Mais ce n'est pas sécurisé. Il est vulnérable à Cross Site Scripting (XSS) Attack
.
Votre paramètre peut être simplement remplacé par un script.
Regardez ceci article et article
Vous pouvez le sécuriser en utilisant l’API de StringEscapeUtils
static String escapeHtml(String str)
Escapes the characters in a String using HTML entities.
Même utiliser https
url pour la sécurité sans les précautions ci-dessus n'est pas une bonne pratique.
Jetez un coup d'œil à la question SE connexe:
RLEncoder.encode (chaîne, "UTF-8") est-il une validation médiocre?