2010-11-02 64 views
2

我想將另一個servlet的輸出包含到當前響應中。Servlet RequestDispatcher #include和pathInfo

我可以叫

request.getRequestDispatcher("/new/url").include(request, response); 

,它並轉到合適的Servlet,但request.getPathInfo()request.getServletPath()和朋友們不要讓設置爲新URL(他們仍然有舊值),所以該servlet做不行。

這應該是這樣嗎?我能做些什麼來完成這項工作?

回答

3

是的,它應該是這樣的(從的javadoc,請注意,阿迪爾安薩里引用的javadoc forward()方法,而不是include()):

的ServletResponse對象有其路徑元素和參數保持從主叫方的不變。

然而,包括按要求具有以下名稱屬性servlet可以訪問自己的路徑信息:

javax.servlet.include.request_uri
javax.servlet.include.context_path
的javax。 servlet.include.servlet_path
javax.servlet.include.path_info
javax.servlet.include.query_string

+0

我明白了。這需要Servlet意識到它已被包含,儘管(我認爲這是有道理的,因爲它不允許做某些事情,比如設置內容類型)。 – Thilo 2010-11-02 13:26:28

+0

感謝您的知識共享+1。順便提一下,我提到了兩個文檔。我從'forward()'方法引用的一個是完全合理的,因爲它是關於獲取'RequestDispatcher'。現在使用取決於用戶想要的內容,可以調用'forward()'或'include()'。 – 2010-11-03 02:51:52

+0

@Adeel:對不起,沒有注意到。也許在javadoc中不清楚,但是這個來自'forward()'描述的短語實際上意味着在從'ServletContext.getNamedDispatcher()'獲得的'RequestDispatcher'上調用'forward()'時,路徑信息不會改變。 – axtavt 2010-11-03 12:40:12

相關問題