2012-11-29 158 views
1

我有一个关于使用Java Servlets中可用的ServletInputStreamServletOutputStream的问题。首先,我将给出一些非常需要的上下文:输入/输出流Java Servlets

我正在处理的任务在Google应用引擎中实现任务队列。我已经能够将任务添加到应用引擎以及要调用的适当工作人员。但是,我正在努力想办法将可序列化对象的ArrayList<>传递给工作人员的doPost()方法。普遍使用的方法显然是分别使用HTTP请求和响应对象的输入和输出流来处理servlet之间的通信。我已经广泛搜索,但一直未能找到一个清晰的例子,说明如何准备这样一个用于传输的arraylist作为输出流,将它添加到第一个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

对于HTTP,您似乎比servlet更新颖。客户端到底是什么?听起来好像它不仅仅是一个HTML页面,而且你正在尝试开发一个Web服务。你有没有考虑过更多可重用的XML或JSON作为输入格式?借助Java序列化,您仅限于基于Java的客户端。 – BalusC

+0

看起来很棒,我的确对HTTP很新,而且它确实是一个非常简单的Web服务。然而,我必须坚持既定的方法,我只能根据作业的参数来实现它。不过,我会纯粹出于教育理由考虑你的建议。 –

回答

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

+0

啊,是的,这比谷歌正在喷出的东西更有意义。非常感谢你的帮助。 –