java - 发送回 JSON : Confusion on reception 的 Servlet

标签 java json servlets

我有一个发送回 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;
}

这很有效,但我面临的问题如下: 当我同时执行多个请求时,结果会混淆,有时会得到与我发送的请求不匹配的响应。

我怀疑问题与我获取响应的方式有关:读取器从连接的 InputStream 读取字符串。

如何确保我收到一个请求 -> 一个相应的回复? 有没有更好的方法从 servlet 检索 JSON 对象?

干杯, 蒂姆

最佳答案

When I do several simultaneous requests, the results get mixed up and I sometimes get a Response that does not match the request I send.

您的 servlet 不是线程安全的。我敢打赌,您已经错误地将请求范围的数据直接或间接分配为 servlet 的实例或类变量。这是初学者常见的错误。

仔细阅读此How do servlets work? Instantiation, sessions, shared variables and multithreading并相应地修复您的 servlet 代码。问题不在目前显示的 URLConnection 代码中,尽管它表明您在 两者 doGet() 中执行完全相同的工作和 doPost(),这反过来又已经让人了解 servlet 的设计方式了。

关于java - 发送回 JSON : Confusion on reception 的 Servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8847995/

相关文章:

javascript - 如何用 Javascript 捕获来自另一个网站的脚本的响应(它返回纯文本)?

java - Spring Boot如何将ArrayList转换为Pageable对象

java - 如何转义 URL 但保持 IPv6 地址周围的方括号不变

java - 在 Time4j(波斯历)中定义日期范围

javascript - 将 MySQL 查询结果转换为分层数据 - D3

javascript - 使用嵌套 JSON 响应创建 HTML 列表(具有未定义的 Json 索引级别)?

java - 顺序运行 Java 线程

sql - 有没有非常轻量级的数据库java库?

mysql - 从 Java Servlet 访问在 wamp 服务器上运行的 MYSQL 数据库

java - Servlet 给出 404 而不是加载适当的页面。控制台在启动 Tomcat 时显示严重错误