我想弄清楚如何在URL中传递多个参数。我想将我的android类的纬度和经度传递给java servlet。我怎么能这样做?
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
。
这是有效的,但我想在两个单独的参数中传递纬度和经度,以便减少我在服务器端的工作。如果不可能,我怎么能在lat
和{}之间添加一个空格。 lon
这样我就可以使用tokenizer
课来获取经度和纬度。我尝试过以下行,但无济于事。
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
我的servlet代码如下:
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设备传递到服务器的最安全和最安全的方式。
答案 0 :(得分:51)
此
url = new URL("http://10.0.2.2:8080/HelloServlet/PDRS?param1="+lat+"¶m2="+lon);
必须工作。无论出于何种奇怪的原因 1 ,您需要在第一个参数之前?
,在以下参数之前需要&
。
使用复合参数,如
url = new URL("http://10.0.2.2:8080/HelloServlet/PDRS?param1="+lat+"_"+lon);
也可以,但肯定不好。您不能在那里使用空格,因为它在网址中被禁止,但您可以将其编码为%20
或+
(但这样的风格更差)。
1说明?
分隔路径和参数,而&
将参数彼此分开,并不能解释原因。一些RFC说“使用?那里和那里”,但我不明白为什么他们没有选择相同的角色。
答案 1 :(得分:3)
我对Java知之甚少,但是URL查询参数应该用“&”分隔,而不是“?”
http://tools.ietf.org/html/rfc3986是使用“sub-delim”作为关键字的参考的好地方。 http://en.wikipedia.org/wiki/Query_string是另一个很好的来源。
答案 2 :(得分:2)
您可以将多个参数传递为“?param1=value1¶m2=value2
”
但它并不安全。它容易受到 Cross Site Scripting (XSS) Attack
。
您的参数可以简单地用脚本替换。
您可以使用StringEscapeUtils
的API来确保其安全static String escapeHtml(String str)
Escapes the characters in a String using HTML entities.
即使使用https
网址进行安全保护而没有采取上述预防措施也不是一个好习惯。
看看相关的SE问题: