2010-06-22 32 views
2

究竟,當它在Filter真實執行類似於下面的示例使用RequestDispatcher,例如主要目的:RequestDispatcher的在Java中

public void doFilter(ServletRequest request, ServletResponse response, 
    FilterChain chain) throws ServletException, IOException { 
    HttpServletRequest aHttpServletRequest = (HttpServletRequest) request; 
    aHttpServletRequest.getRequestDispatcher("/init.jsp").include(request, response); 
    chain.doFilter(request, response); 
} 
+3

這段代碼老實說出氣味。一個名爲'init'的JSP?讓我猜猜,它包含幾個初始化邏輯,在* scriptlets *的味道?這是Filter或Listener的工作,而不是JSP。重構它。 – BalusC 2010-06-22 19:03:04

+0

你的意思是我對Filter的使用是完全錯誤的嗎?如果是的話我怎樣才能將我的參數添加到任何jsp頁面? – mabuzer 2010-06-22 19:05:28

+0

在JSP EL中的Filter/Servlet/whatever和'$ {key}'中的request.setAttribute(「key」,object)'。另請參見[初級和中級JSP/Servlet教程](http://courses.coreservlets.com/Course-Materials/csajsp2.html) – BalusC 2010-06-22 19:10:17

回答

2

就你而言,JSP的輸出被預先添加到過濾器所附的每個頁面上。這是一種輕鬆地爲所有頁面添加通用標題的技術。

當在他的上下文中使用RequestDispatcher時,有點令人困惑。通常,當您想要將請求分派到另一個servlet或JSP進行處理時,可以使用RequestDispatcher轉發到另一個資源。在這種情況下,您的請求不會在其他任何地方分派,而是將其他資源生成的輸出包含到當前響應中。

0

javadoc說比我更好:

RequestDispatcher的

定義接收 請求的對象然後將 發送到服務器上的任何資源(例如 servlet,HTML文件或JSP文件)。 Servlet容器 創建RequestDispatcher對象 ,該對象用作位於 特定路徑或 特定名稱的 服務器資源的包裝。

換句話說,當您想從服務器上的其他資源包含或轉發到其他資源時,您獲得RequestDispstcher