程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> Servlet/JSP 容器開發手記5-RequestDispatcher

Servlet/JSP 容器開發手記5-RequestDispatcher

編輯:關於JSP

RequestDispatcher

forward

1. 如果 Forward URL 中有參數, 並且與 request 對象中現有的參數同名, 則 getParameter 方法返回 Forward URL中的參數
2. 在 Forward 之前, 容器應讀取 POST Form Data 中的參數
3. 如果 Forward URL 中帶有 jsessionid 參數, 則容器將其當做 URL 的一部分, 而不做 SessionId
4. 在 forward 方法調用之前, 容器先清除輸出緩存, 如果數據已發送到浏覽器, 則拋出 IllegalStateException
5. 在 forward 方法返回之前, 容器應將所有數據發送到浏覽器, 並關閉輸出流, 這就意味著 forward 方法調用後, 所有使用輸出流輸出的數據都將忽略
6. 在 forward 之前, 容器應根據 Forward URL 重設 request 以下屬性: ServletPath, RequestURI, QueryString, PathInfo. RequestURL 不變, 如果是用 getNameDispatcher 得到的, 就不需要重設
7. Forward 請求時, 應當處理 welcome files
8. Forward 時, 不做 Filting
9. request 和 response 參數可以是容器的實現類, 也可以 ServletRequestWrapper 和 ServletResponseWrapper 或其子類

include

1. 如果 Include URL 中有參數, 並且與 request 對象中現有的參數同名, 則 getParameter 方法返回 Include URL中的參數
2. 在 Include 之前, 容器應讀取 POST Form Data 中的參數
3. 如果 Include URL 中帶有 jsessionid 參數, 則容器將其當做 URL 的一部分, 而不做 SessionId
4. 在被包含的 Servlet 中, 只通過輸出流輸出內容, 不能設響應頭, 所有的設置都被忽略, 但不拋異常
5. 在 include 之前, 容器不重設 request 各種屬性, 但將被包含 ContextPath, ServletPath, PathInfo, QueryString, RequestURI 放到 request 的 attribute 中 (如果是使用 getNameDispather 則不設)

 javax.servlet.include.context_path = ContextPath
 javax.servlet.include.servlet_path = ServletPath
 javax.servlet.include.path_info = PathInfo
 javax.servlet.include.query_string = QueryString
 javax.servlet.include.request_uri = RequestURI

6. Include 時, 不做 Filting
7. Include 請求時, 應當不處理 welcome files
8. request 和 response 參數可以是容器的實現類, 也可以 ServletRequestWrapper 和 ServletResponseWrapper 或其子類

通過 ServletContext 得到的 RequestDispatcher, 其 URL 是相對於 ContextPath 的
通過 ServletRequest 得到的 RequestDispatcher, 其 URL 是相對於最初請求的 ServletPath (如果是一串的 forward , 最好處理請求的 Servlet 的 Path)

調用 getNameDispatcher 如果 Servlet 不存在, 則返回 null

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved