我有一个发送回JSON对象的Servlet,我想在另一个Java项目中使用这个servlet。我有这种方法可以得到结果:
public JSONArray getSQL(String aServletURL)
{
JSONArray toReturn = null;
String returnString = "";
try
{
URL myUrl = new URL(aServletURL);
URLConnection conn = myUrl.openConnection();
conn.setDoOutput(true);
BufferedReader in = new BufferedReader( new InputStreamReader( conn.getInputStream() ) );
String s;
while ((s = in.readLine()) != null )
returnString += s;
in.close();
toReturn = new JSONArray(returnString);
}
catch(Exception e)
{
return new JSONArray();
}
return toReturn;
}
这很有效,但我面临的问题如下: 当我同时执行多个请求时,结果会混淆,我有时会收到与我发送的请求不匹配的响应。
我怀疑问题与我收到回复的方式有关:Reader从连接的InputStream读取字符串。
如何确保获得一个请求 - >一个相应的回复? 有没有更好的方法从我的servlet中检索我的JSON对象?
干杯, 添
答案 0 :(得分:1)
当我同时执行多个请求时,结果会混淆,我有时会收到与我发送的请求不匹配的响应。
您的servlet不是线程安全的。我敢打赌,你不正确地将请求范围数据直接或间接地分配为servlet的实例或类变量。这是一个常见的初学者的错误。
仔细阅读此How do servlets work? Instantiation, sessions, shared variables and multithreading并相应地修复您的servlet代码。问题不在目前为止显示的URLConnection
代码中,尽管它表明您在 {/ 1>} doGet()
和doPost()
中完成相同的工作,反过来已经是如何设计servlet的气味。
答案 1 :(得分:0)
尝试删除setDoOutput(true)
,您只使用连接进行输入,因此不应使用它。
编辑:或者尝试使用HttpClient,使用“原始”Java更好。