2011-05-12 27 views
3

我有一個JSP,其中包含頁面頂部的內容,我們稱它爲header.jsp。出於性能原因,我想呈現此JSP,並在構建我的頁面的其餘部分之前將其刷新到用戶。 (請參閱here瞭解性能優勢的解釋。)在過濾器內執行並呈現JSP

我認爲可以這樣做的最佳方式是創建一個名爲FlushingFilter的Filter,並讓它將JSP的內容寫入響應,然後將其刷新在執行鏈的其餘部分之前。作爲一個概念證明,我手動將header.jsp轉換爲一堆response.getWriter()。println()在我的FlushingFilter中調用,之後我調用response.getWriter()。flush(),然後doFilter()繼續過濾器鏈。此println()設置會產生所需的行爲,並且頁面速度會更快。

但是推出之前,我想使它更清潔,如果可以通過編程調用JSP過濾器的內部,而不必採用手動的println工作()調用。我找到的最接近的解決方案是this question的第一個答案,但它涉及在RequestDispatcher上調用include()方法。據我所知,我沒有訪問我的過濾器內的任何RequestDispatcher,雖然這可能只是我的JSP/servlet沒有經驗的談話。

有誰知道我可以編程調用JSP這樣的,並取回其在字符串格式輸出?

回答

6

我知道,我沒有訪問我的過濾器內部的任何RequestDispatcher的,儘管這可能只是我的JSP/servlet的缺乏經驗談

它在過濾器絕對可用。

request.getRequestDispatcher("/WEB-INF/header.jsp").include(request, response); 
response.flushBuffer(); 
+0

呵呵,我一直在看看HttpServletRequest提供的功能的子集。謝謝,我會試試看。 – FuriousGeorge 2011-05-12 19:45:16

+0

它從'ServletRequest'繼承。另請參閱javadocs:http://download.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html和http://download.oracle.com/javaee/6/api/javax/servlet /ServletRequest.html#getRequestDispatcher%28java.lang.String%29。 – BalusC 2011-05-12 19:47:07