【问题标题】:Input/Outputstream Java Servlets输入/输出流 Java Servlet
【发布时间】:2012-11-17 15:50:37
【问题描述】:

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

我正在处理的任务是在谷歌应用引擎中实现任务队列。我已经能够将任务添加到应用程序引擎并调用适当的工作人员。但是,我正在努力弄清楚如何将可序列化对象的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)
    {
    }       
}

任何帮助将不胜感激。

提前谢谢你,

凯文

【问题讨论】:

  • 您似乎对 HTTP 比对 servlet 还陌生。客户究竟是什么?听起来好像它不仅仅是一个 HTML 页面,而且您正在尝试开发 Web 服务。您是否考虑过像 XML 或 JSON 这样更可重用的输入格式?使用 Java 序列化,您只能使用基于 Java 的客户端。
  • 不错,我对 HTTP 确实很陌生,而且它确实是一个非常简单的 Web 服务。但是我必须坚持给定的方法,我只能根据分配的参数来实现它。但是,我会纯粹出于教育原因考虑您的建议。

标签: java google-app-engine servlets inputstream


【解决方案1】:

听从 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() 输出流,以触发发送任何剩余的缓冲数据。

【讨论】:

  • 啊,是的,这比谷歌喷出来的更有意义。非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-06
  • 2012-07-19
  • 2017-06-09
  • 1970-01-01
  • 2015-06-18
  • 1970-01-01
  • 2011-06-06
相关资源
最近更新 更多