我有一个关于使用 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/