首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >筛选器中未处理的JSP异常

筛选器中未处理的JSP异常
EN

Stack Overflow用户
提问于 2013-05-09 17:08:19
回答 1查看 249关注 0票数 0

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

代码语言:javascript
复制
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类是:

代码语言:javascript
复制
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中引发了一个未处理的异常

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-09 20:01:25

您可以简单地将代码包装在try catch块中,如下所示:

代码语言:javascript
复制
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堆产生影响。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16458186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档