【问题标题】:Unhandled JSP exception in Filter过滤器中未处理的 JSP 异常
【发布时间】:2013-05-03 17:12:36
【问题描述】:

我为 JSP 配置了一个过滤器。在过滤器中,我使用 HTTPResponseWrapper 来修改对用户的响应。我在 Filter 的 doFilter 方法中的代码是:

CharArrayWrapper responseWrapper = new CharArrayWrapper(
        (HttpServletResponse) response); 
chain.doFilter(request, responseWrapper);
String responseString = responseWrapper.toString();

System.out.println("responseString ********************* "
        + responseString);

PrintWriter out = response.getWriter();
out.write(responseString);

CharArrayWrapper 类是:

public class CharArrayWrapper extends HttpServletResponseWrapper {

    private CharArrayWriter charWriter;

    public CharArrayWrapper(HttpServletResponse response) {
        super(response);
        charWriter = new CharArrayWriter();
    }

    public PrintWriter getWriter() {
        return (new PrintWriter(charWriter));
    }

    public String toString() {
        return (charWriter.toString());
    }

    public char[] toCharArray() {
        return (charWriter.toCharArray());
    }

}

如果配置了上述过滤器的 JSP 运行良好,那么过滤器也没有问题,我可以在控制台上看到 sysout。

另一方面,当 JSP scriptlet 代码(它是一个旧应用程序)中引发一些未处理的异常并且我调用 chain.doFilter(request, responseWrapper); 时,我得到一个 NullPointerException。有什么方法可以让我在过滤器中知道 JSP 中引发了未处理的异常

【问题讨论】:

  • 也许我不明白这个问题,你可以在你的过滤器中添加一个try catch...
  • 有时,您的大脑在思考方面过于受限,而这就是发生在我身上的事情。谢谢@Home,这就是要走的路。请。发表你的评论作为答案,我会接受它是正确的

标签: java jsp jakarta-ee servlets


【解决方案1】:

您可以像这样简单地将代码包装在 try catch 块中:

CharArrayWrapper responseWrapper = new CharArrayWrapper((HttpServletResponse) response); 
try {
    chain.doFilter(request, responseWrapper);

    String responseString = responseWrapper.toString();

    System.out.println("responseString ********************* " + responseString);

    PrintWriter out = response.getWriter();
    out.write(responseString);

} catch (Exception e) {

    // do whatever is necessary (logging etc.)
}

还有一些其他的事情需要考虑:

  • getWriter 总是创建一个新的PrintWriter,这可能会导致一些副作用,因为其他组件也可能调用getWriter。我会创建一个实例变量。
  • 字符数组方法有一个缺点,您“缓存”整个响应而不是将其流式传输回客户端,鉴于大型 JSP,这可能会影响您的 JVM 堆。

【讨论】:

    猜你喜欢
    • 2010-09-08
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 2015-07-07
    • 2015-12-12
    • 2017-01-06
    • 2012-06-04
    相关资源
    最近更新 更多