1

我有一个关于在 Java Servlet 中使用ServletInputStream和可用的问题。ServletOutputStream首先,我将提供一些非常需要的上下文:

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

为了澄清一点,我将发布有doPost()问题的工人的方法:

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)
    {
    }       
}

任何帮助将不胜感激。

先感谢您,

凯文

4

1 回答 1

3

值得遵循 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() 输出流以触发发送任何剩余的缓冲数据。

于 2012-11-29T15:01:46.570 回答