webentwicklung-frage-antwort-db.com.de

Wie übergebe ich mehrere Parameter in URL?

Ich versuche herauszufinden, wie mehrere Parameter in einer URL übergeben werden. Ich möchte Breiten- und Längengrade von meiner Android Klasse an ein Java Servlet übergeben. Wie kann ich das tun?

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);

In diesem Fall ist die Ausgabe (in die Datei geschrieben) 28.53438677.472097. Dies funktioniert, aber ich möchte Breite und Länge in zwei separaten Parametern übergeben, damit meine Arbeit auf der Serverseite reduziert wird. Wenn es nicht möglich ist, wie kann ich mindestens ein Leerzeichen zwischen lat & lon einfügen, damit ich die Klasse tokenizer verwenden kann, um meinen Breiten- und Längengrad abzurufen. Ich habe versucht folgende Zeile, aber ohne Erfolg.

    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

Mein Servlet-Code lautet wie folgt:

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();

Außerdem wollte ich wissen, dass dies der sicherste und sicherste Weg ist, die Daten vom Android Gerät zum Server zu übertragen.

31
rishiag

Dies

url = new URL("http://10.0.2.2:8080/HelloServlet/PDRS?param1="+lat+"&param2="+lon);

muss arbeiten. Aus irgendeinem seltsamen Grund1, du brauchst ? vor dem ersten Parameter und & vor den folgenden.

Verwenden eines zusammengesetzten Parameters wie

url = new URL("http://10.0.2.2:8080/HelloServlet/PDRS?param1="+lat+"_"+lon);

würde auch funktionieren, ist aber sicher nicht nett. Sie können dort kein Leerzeichen verwenden, da dies in einer URL verboten ist, aber Sie können es als %20 oder + (aber das ist noch schlimmer).


1 Feststellung, dass ? trennt den Pfad und die Parameter und das & trennt Parameter voneinander, erklärt aber nichts über den Grund. Einige RFCs sagen "benutze? Dort und dort", aber ich kann nicht verstehen, warum sie nicht dasselbe Zeichen gewählt haben.

52
maaartinus

Ich weiß nicht viel über Java aber URL-Abfrage-Argumente sollten durch "&" getrennt werden, nicht "?"

http://tools.ietf.org/html/rfc3986 ist eine gute Referenz, wenn Sie "sub-delim" als Schlüsselwort verwenden. http://en.wikipedia.org/wiki/Query_string ist eine weitere gute Quelle.

3
Tõnu Samuel

Sie können mehrere Parameter als "?param1=value1&param2=value2" Übergeben.

Aber es ist nicht sicher. Es ist anfällig für Cross Site Scripting (XSS) Attack.

Ihr Parameter kann einfach durch ein Skript ersetzt werden.

Schauen Sie sich das an Artikel und Artikel

Sie können es mit der API von StringEscapeUtils sicher machen

static String   escapeHtml(String str) 
          Escapes the characters in a String using HTML entities.

Selbst die Verwendung von https url aus Sicherheitsgründen ohne die oben genannten Vorsichtsmaßnahmen ist keine gute Vorgehensweise.

Schauen Sie sich die verwandte SE-Frage an:

Ist URLEncoder.encode (Zeichenfolge, "UTF-8") eine schlechte Validierung?

2
Ravindra babu