gpt4 book ai didi

java - Servlet 过滤器 - 处理 JSP 响应数据的问题

转载 作者:行者123 更新时间:2023-12-04 06:11:20 24 4
gpt4 key购买 nike

我正在构建一个 Web 应用程序,它应该测量 httprequests/response 时间以及响应大小。我使用的这个任务:http://angelborroy.wordpress.com/2009/03/04/dump-request-and-response-using-javaxservletfilter/过滤器,它只做我需要的一切,它只转储请求/响应数据而不是打印响应大小。
它适用于 Servlet,但似乎 JSP 存在问题......当我尝试在浏览器中加载 JSP 时,它显示一个空白页面,并且过滤器回显响应大小为 0 .

同样,当请求的页面是 servlet 时,它可以完美地工作......知道什么会导致这个问题吗?

更新:我一直在尝试找到任何包含 servlet 响应的过滤器,然后能够将响应转发回客户端(即使是这样!)但没有任何运气,如果有人能指出我的工作示例,它不会不管包装器做什么,只是一个简单的包装器,它对响应内容做一些事情并在更改后将其转发回客户端,我将不胜感激。

附言

我正在使用 Apache Tomcat 7

最佳答案

doFilter() 之后刷新 writer 和流:

filterChain.doFilter(req, wrappedResp);
pw.getWriter().flush();
pw.getStream().flush();

请注意,链接代码不会抛出 IllegalStateException什么时候:
  • 您调用 getOutputStream() getWriter方法已在此响应上调用

  • 或者
  • 您调用 getWriter() getOutputStream已经为此响应对象调用了方法。

  • 查看 javamelody的源代码也。他们的代码看起来更健壮。

    PrintWriter uses an inner BufferedReader它需要冲洗。这只是一个快速的解决方案,所以也许 getStream().flush()不是真的需要。请注意我调用了 pw.get*().flush() ,而不是 response.get*().flush() .但是,当没有显示 JSP 时,它仍然只是针对特定问题的快速回答。如果您需要生产级解决方案,请检查 javamelody 的来源。他们可能比引用文章处理更多的极端情况(如提到的 IllegalStateException )。
    我将从 javamelody 的源代码开始,并删除不必要的功能。

    关于java - Servlet 过滤器 - 处理 JSP 响应数据的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7734424/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com