java - 将 HTTPServletRequest 流写入 Google App Engine 的数据存储区

标签 java google-app-engine servlets google-cloud-datastore

我对 App Engine 和 Java 开发还很陌生,尝试通过 Http Post 接收 InputStream 并将其存储到数据存储区中。

为了测试这一点,我使用另一台计算机的正常运行时间并在一个流中发送 10 个正常运行时间值。

每当我对此进行测试时,机器都会响应计数高达 10 和正常运行时间值的情况。但数据存储查看器只存储了一项。我究竟做错了什么?我认为使用 Memcache 的数据还不够多,尽管这是更好的方法,我稍后会这样做。

public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
    Entity uptime = new Entity("Uptime");

    BufferedReader buff = req.getReader();
    String line = buff.readLine();

    PrintWriter out = resp.getWriter();     

    int n = 0;
    Date timestamp = new Date();

    while (line != null){
        uptime.setProperty("timestamp", timestamp);
        uptime.setProperty("value",  line);
        datastore.put(uptime);
        //Ouput for Debug purpose
        out.println("COUNT: " + n + " LINE: " + line);
        n++;

        line = buff.readLine();
    }
}

最佳答案

循环时,您不会创建新的 Entity 对象,而只是更改现有对象的属性。

while (line != null){
    Entity uptime = new Entity("Uptime"); // remove the declaration/initialization from before, create a new every loop
    uptime.setProperty("timestamp", timestamp);
    uptime.setProperty("value",  line);
    datastore.put(uptime);
    //Ouput for Debug purpose
    out.println("COUNT: " + n + " LINE: " + line);
    n++;

    line = buff.readLine();
}

我不确定您的数据存储区如何识别对象(它只是一个映射吗?对象 ID 是什么?它的 equals() 方法是做什么的?),但它应该以这种方式区分它们.

关于java - 将 HTTPServletRequest 流写入 Google App Engine 的数据存储区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16692933/

相关文章:

使用扫描仪扫描图像的 Java 库

java - 映射大量多头的最快方法

google-app-engine - Google AppEngine 的 dev_appserver.py 失败,错误代码为 "invalid command name ' app.yaml'”

python - 我可以使用 Google App Engine 处理数据吗?

java - jetty WebSocket 自定义事件

JavaEE 8、Tomcat 8.5、错误状态 404

c# - 使用 Java 签署文档并使用 C# 验证

java - OpenClover 如何计算方法的复杂度?

iphone - 通过 HTTP 发送 10,000 个 double 的最佳方式

java - 如何指定 war 文件中的目录?