我为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中引发了一个未处理的异常
发布于 2013-05-09 20:01:25
您可以简单地将代码包装在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。我会创建一个实例变量。https://stackoverflow.com/questions/16458186
复制相似问题