Servlet/JSP 容器开发手记5-RequestDispatcher

王朝java/jsp·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航