47

URL で複数のパラメーターを渡す方法を理解しようとしています。Android クラスから Java サーブレットに緯度と経度を渡したいです。どうやってやるの?

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

この場合、出力 (ファイルに書き込まれる) は28.53438677.472097. これは機能していますが、サーバー側での作業を減らすために、緯度と経度を 2 つの個別のパラメーターで渡したいと考えています。不可能な場合は、クラスを使用して緯度と経度を取得できるように、少なくともlat&の間にスペースを追加するにはどうすればよいですか。次の行を試しましたが、役に立ちませんでした。 lontokenizer

    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

私のサーブレットコードは次のとおりです。

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

また、これがAndroidデバイスからサーバーにデータを渡す最も安全で安全な方法であることも知りたいと思いました.

4

3 に答える 3

70

これ

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

働かなければならない。奇妙な理由1?が何であれ、最初のパラメーターの前と次のパラメーターの前に必要です&

のような複合パラメーターを使用する

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

も機能しますが、確かに良くありません。URL で禁止されているため、スペースを使用することはできませんが、%20orとしてエンコードすることはできます+(ただし、これはさらに悪いスタイルです)。


1?パスとパラメーターを&分離し、パラメーターを互いに分離するという記述は、理由について何も説明しません。一部の RFC では「? there と & there を使用する」と書かれていますが、同じ文字を選択しなかった理由がわかりません。

于 2012-06-08T05:53:10.047 に答える
4

Java についてはよくわかりませんが、URL クエリの引数は「?」ではなく「&」で区切る必要があります。

https://www.rfc-editor.org/rfc/rfc3986は、キーワードとして「sub-delim」を使用して参照するのに適した場所です。http://en.wikipedia.org/wiki/Query_stringも良い情報源です。

于 2012-06-08T05:49:12.590 に答える