如何在URL中传递多个参数?

2022-08-31 22:29:23

我正在尝试弄清楚如何在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.472097latlontokenizer

    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设备传递到服务器的最安全可靠的方法。


答案 1

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中是被禁止的,但你可以将其编码为or(但这是更糟糕的样式)。%20+


1 声明 将路径和参数分开,并且 & 将参数彼此分开,这并不能解释任何原因。一些RFC说“使用?那里和那里“,但我不明白为什么他们没有选择相同的角色。


答案 2

我对Java了解不多,但URL查询参数应该用“&”分隔,而不是“?”

https://www.rfc-editor.org/rfc/rfc3986 是使用“sub-delim”作为关键字进行参考的好地方。http://en.wikipedia.org/wiki/Query_string 是另一个很好的来源。