2013-05-09 44 views
0

我有一個爲JSP配置的過濾器。在過濾器中,我使用HTTPResponseWrapper來修改對用戶的響應。我的在過濾器的doFilter方法的代碼是:過濾器中未處理的JSP異常

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

+0

也許我不明白這個問題,你可以在你的過濾器中添加一個try catch ... – home 2013-05-09 09:12:38

+0

有時候,你的大腦思維過於拘謹,這就是我發生的事情。感謝@Home,那就是要走的路。 PLS。發表你的評論作爲答案,我會接受它是正確的 – Sandeep 2013-05-09 09:17:03

回答

0

引發未處理的異常時,您可以簡單地換行代碼在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堆。