java - 输入/输出流 Java Servlet

标签 java google-app-engine servlets inputstream

我有一个关于使用 ServletInputStream 的问题和 ServletOutputStream在 Java Servlet 中可用。首先,我将提供一些急需的背景信息:

我正在处理的任务是在谷歌应用引擎中实现任务队列。我已经能够将任务添加到应用程序引擎并调用适当的工作人员。但是,我正在努力弄清楚如何通过 ArrayList<> worker 的可序列化对象的 doPost()方法。普遍的方法显然是分别使用 HTTP 请求和响应对象的输入和输出流来处理 servlet 之间的这种通信。我已经广泛搜索但未能找到一个清晰的示例,说明如何准备这样的数组列表作为输出流进行传输,将其添加到第一个 servlet 的响应中,然后从第二个 servlet 中的请求中检索它,然后最后将其转换回数组列表以用于 doPost() 的代码方法。所以这基本上是我的问题。由于我没有使用 Java 的经验,我很难自己弄清楚这一切,而且大部分时间都在努力思考它。

为了进一步说明,我将发布 doPost()相关 worker 的方法:

protected void doPost(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException
{
    try
    {
        ArrayList<Quote> qs = /*Here the list needs to be read in.*/ null;

        EntityManager manager = EMF.get().createEntityManager();
        CarRentalModel.get().confirmQuotes(qs, manager);
    }
    catch (ReservationException e)
    {
    }       
}

如有任何帮助,我们将不胜感激。

提前谢谢你,

凯文

最佳答案

遵循 BalusC 的建议是值得的。如果您正在寻找一种简单快速的解决方案,您可以使用 Java 的序列化来实现:

在您的 doPost() 方法中,您可以创建一个 ObjectInputStream,它从底层 servlet 输入流读取数据并反序列化(从中创建对象)数据。

ServletInputStream sis = req.getInputStream();
ObjectInputStream ois = new ObjectInputStream(sis);

ArrayList<Quote> qs = (ArrayList<Quote>) ois.readObject();

您可以使用 ObjectOutputStream 及其 writeObject() 方法类似地在另一侧写入对象。如果这在现场不起作用,请在完成写入操作后尝试 .flush() 或 .close() 输出流,以触发发送任何剩余的缓冲数据。

关于java - 输入/输出流 Java Servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13628045/

相关文章:

java - 存储 Weblogic JMS 消息以供分析

java - 如何在使用reactive-postgresql-client时将不确定的参数传递给preparedQuery?

android - 识别哪个 Android 应用程序正在与我的应用程序引擎应用程序联系

google-app-engine - 如何在新的 Google Cloud Console 中访问 blobstore?

java - 如何让客户端浏览器停止请求过期的 session ID?

java - PI 上的服务器 (C) 未与客户端 (Java) 建立连接

android - 用户退出 : clearing the default Google account does not cause the account picker to show up in Android app

java - 如何限制 Servlet 映射仅用于某些扩展

java - 关于 ServletConfig 实例化的简单 Servlet 问题

java - 将整数数组转换为字节数组