代码之家  ›  专栏  ›  技术社区  ›  Berlin Brown

避免爪哇/Servlet Web栈中的非法状态异常

  •  0
  • Berlin Brown  · 技术社区  · 16 年前

    我不知道,但我觉得非法状态例外会引起撤销性头痛。如果我有一个请求,比如说JSP或其他servlet,需要将过滤器与该请求关联起来。如果已经提交了响应,我不能对输出进行任何其他修改?

    例如,我在jsp代码中看到,它将mimetype设置为response.setcontent(“html”),然后我有一个与jsp关联的过滤器,需要将mimetype设置为 否则。setcontent(“图像”)或“xhtml”。但我有非法状态例外?

    是否有方法清除之前已提交的响应,或者是否有避免此问题的方法。

    这在WebSphere上。

    3 回复  |  直到 16 年前
        1
  •  2
  •   Brian Agnew    16 年前

    我认为你需要重新思考你是如何准备和回复你的回复的。你不能写信给回复 可以 写信给客户),然后改变主意。

    撇开为什么您的解决方案必须更改返回类型的问题不谈,我将用返回日期+类型写入一些虚拟容器对象,并使其可变。只有在servlet完成了所有工作之后,您才能将这个对象(类型+内容)写入输出流。

    (为了澄清,我不认为servlet过滤器是正确的方法。它们将截获请求和响应,但响应总体由servlet负责)

        2
  •  1
  •   Maurice Perry    16 年前

    我同意其他海报的观点,这很难看,但您可以在过滤器中创建一个httpservletresponsewrapper,它将劫持输出并将包装器传递到链,而不是原始响应对象。

        3
  •  0
  •   mP.    16 年前

    您的前提是执行JSP输出HTML,然后使用一个过滤器将内容类型更改为其他类型,如相同响应中的image all,这是没有意义的。响应只能返回一个人工制品,无论它是HTML文件还是图像。没有办法在同一个回答中同时返回这两个答案——任何这样做的尝试都是胡说八道。发送一些末尾带有图像二进制标记的HTML是没有意义的。内容类型用于整个响应。您不能在一个响应中打包多个thingo。

    有时,如果输出不超过bufferSize,则可以重置buffer()。最好的方法是在你开始输出一个响应之前,避免使用这个设施,并且让你知道该怎么做。

    推荐文章