【问题标题】:servlet: convert an ServletInputStream into a FileInputStream [duplicate]servlet:将 ServletInputStream 转换为 FileInputStream [重复]
【发布时间】:2011-03-27 18:17:56
【问题描述】:

我正在编写一个 servlet,它接收一个 xml 文件,将它提供给另一个类,并将一个带有一些 cmets 的 html 文件返回给客户端。 我得到的 input-xml 是这样的:

input = request.getInputStream();

但是这个输入是一个 ServletInputStream 而另一个类(对于 cmets)需要一个 FileInputStream。

如果我给 XMLEventReader(在另一个类中)ServletInputStream,我得到一个解析错误:

ParseError at [row,col]:[1,1]
Message: Content is not allowed in prolog.

我认为这是因为 servletinputstream 而不是 fileinputstream。

问候 我希望有人能够帮助我:)

【问题讨论】:

    标签: java servlets inputstream fileinputstream


    【解决方案1】:

    我认为后一个问题不太可能是因为它是ServletInputStream。解析器不应该关心数据的来源。

    我认为输入流中的数据不正确的可能性更大。

    如果可能全部,应该重构当前需要FileInputStream 的类以使用InputStream...否则您必须首先将数据写入实际文件,这显然不理想。

    【讨论】:

    • 好的,我更改了“InputStream”中的输入,但同样的问题是否有可能将 ServletInputStream 转换为我可以查找的字符串,如果它与原始 xml 文件之间存在细微差别?
    • 使用InputStreamReader。不要忘记考虑字符编码。此外,我认为现在是让自己通过Java IO tutorial 的时候了。它解释了您需要了解的基本知识。
    • @CaptnLenz:我建议你将数据写入磁盘,然后在那里查看。打开FileOutputStream,从输入流中一次读取一个块,将其写入输出流。然后你可以查看文件。
    【解决方案2】:

    您应该从 ServletInputStream 中读取数据,并将其转储到 FileOutputStream 中。通过这种方式,您可以查看正在发送的数据,然后使用 FileInputStream 和您描述的需要它的类单独测试该数据。我的猜测是,现在会发生同样的事情,因为就像之前的海报所建议的那样,数据可能格式错误。

    【讨论】:

    • 如果我用 input = FileInputStream("local path of the xml file") 之类的东西启动“comment-class”,一切正常,但如果我通过 servlet(servletinputstream) 给它相同的 xml到这个类,我得到解析错误。所以xml文件应该是正确的。也许它有助于在第二个节点上引发解析错误。第一个 <?xml version="1.0" encoding='UTF-8' standalone='no'?> 显然有效
    • 您可能没有考虑响应中的 http 标头。
    【解决方案3】:

    好吧,我现在聪明一点了:) 问题是:在 ServletInputStream 的开头(和结尾的一行)一些标头信息(如内容类型等)。 有没有聪明的解决方案来削减这些信息?

    问候

    【讨论】:

    • 新问题应该出现在新问题中,而不是新的答案。这不是论坛。你应该删除这个“答案”,否则它可能会被否决。您最初的问题已经得到解答。不要忘记通过单击左侧的复选标记将实际上帮助解决问题的实际答案标记为接受。另请参阅stackoverflow.com/faq
    猜你喜欢
    • 2013-07-09
    • 2011-08-13
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 2015-02-11
    • 2015-07-20
    • 1970-01-01
    相关资源
    最近更新 更多