Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
输入/输出流Java servlet_Java_Google App Engine_Servlets_Inputstream - Fatal编程技术网

输入/输出流Java servlet

输入/输出流Java servlet,java,google-app-engine,servlets,inputstream,Java,Google App Engine,Servlets,Inputstream,我有一个关于Java servlet中可用的ServletInputStream和ServletOutputStream的使用的问题。首先,我将给出一些急需的背景: 我正在处理的任务是在google应用程序引擎中实现任务队列的调用。我已经能够将任务添加到应用程序引擎,并调用相应的工作人员。但是,我正在努力弄清楚如何将可序列化对象的ArrayList传递给worker的doPost()方法。pervailing方法显然是分别使用HTTP请求和响应对象的输入和输出流来处理servlet之间的通信。我

我有一个关于Java servlet中可用的
ServletInputStream
ServletOutputStream
的使用的问题。首先,我将给出一些急需的背景:

我正在处理的任务是在google应用程序引擎中实现任务队列的调用。我已经能够将任务添加到应用程序引擎,并调用相应的工作人员。但是,我正在努力弄清楚如何将可序列化对象的
ArrayList
传递给worker的
doPost()
方法。pervailing方法显然是分别使用HTTP请求和响应对象的输入和输出流来处理servlet之间的通信。我在谷歌上搜索了很多内容,但没有找到一个清晰的例子,说明如何准备这样一个arraylist作为输出流进行传输,将其添加到第一个servlet的响应中,然后从第二个servlet的请求中检索它,最后将其转换回arraylist,以便在
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)
    {
    }       
}
protectedvoiddopost(HttpServletRequest-req、HttpServletResponse-resp)
抛出ServletException、IOException
{
尝试
{
ArrayList qs=/*此处需要读取列表。*/null;
EntityManager=EMF.get().createEntityManager();
CarRentalModel.get().confirmQuotes(qs,经理);
}
捕获(保留异常e)
{
}       
}
任何帮助都将不胜感激

提前谢谢大家,


凯文

听从巴卢斯克的建议是值得的。如果您正在寻找一个简单快速的解决方案,可以通过Java的序列化来实现:

在doPost()方法中,您可以创建ObjectInputStream,该流从底层servlet输入流读取数据,并对数据进行反序列化(生成对象)

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

ArrayList<Quote> qs = (ArrayList<Quote>) ois.readObject();
ServletInputStream sis=req.getInputStream();
ObjectInputStream ois=新ObjectInputStream(sis);
ArrayList qs=(ArrayList)ois.readObject();

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

您似乎对HTTP比较陌生,而不是对servlet比较陌生。客户到底是什么?听起来好像它不仅仅是一个HTML页面,而且您正在尝试开发一个web服务。您是否曾经考虑过更可重用的东西,如XML或JSON作为输入格式?有了Java序列化,您就只能使用基于Java的客户机了。很显然,我对HTTP确实很陌生,而且它确实是一个非常简单的web服务。然而,我必须坚持给定的方法,我只能根据任务的参数来实现它。不过,我会纯粹出于教育原因来研究你的建议。啊,是的,这比谷歌所说的更有意义。非常感谢你的帮助。