远程请求分派器注意事项
本主题提供了在使用远程请求分派器时需要考虑的一些注意事项。
- 如果应用程序在某些编码中需要参数,那么在发生远程请求分派 (RRD) 之前,应用程序应该与在常规包含中一样设置字符编码。
- 对于远程服务器,本地服务器的 ServletInputStream 数据不可用。在将 RRD 请求发送到远程服务器之前,本地服务器会解析 POST 数据并将参数作为请求参数来包括。多重部件形式数据对于远程服务器是不可访问的。如果远程服务器尝试从请求获取输入流,那么会创建 UnsupportedOperationException。
- 在远程服务器上,不能访问原始请求引用。
- 在远程服务器中,本地服务器中创建的请求和响应包装器不可用。由于未实现 Serializable 的 ServletRequestWrappers 和 WebSphere® 内部 ServletRequest 对象,此任务不能完成。
- 请求属性需要可序列化。
- 在本地和远程服务器上,“类定义类型”属性需要是可用的。
- 请求属性会被传播到远程服务器,然后传播回本地服务器。
- HTTP 会话
- 当 Web 应用程序是远程应用程序时,您不能具有不同 Web 应用程序之间的交叉会话访问权。
- 当所有 Web 应用程序都在本地服务器中时,应用程序可以通过将会话存储在多个 Web 应用程序可访问的表中以便在 Web 应用程序之间共享会话。对于 RRD,这是不可能的,在本地场合中,也不推荐使用。
- Servlet 编程模型:不能在不同 Web 应用程序中访问会话。
- 本地以及远程场合中的正常编程模型。
- 在本地方式下,应用程序对引用进行高速缓存并在 Web 应用程序之间共享会话,这在 RRD 场合中不可行。
- 在远程服务器上,作为请求属性存储的会话对象不可用,因为 Session 类不会实现 Serializable。
- 在远程服务器上,本地服务器上设置的线程局部变量不可用。
- 对于 RRD ServletContext 对象,并非在 ServletContext 对象上定义的所有方法都可用。请参阅 com.ibm.wsspi.rrd.context.RemoteServletContext 的 SPI 文档,以了解详细信息。
- 当使用 RRD 时,远程服务器无权访问本地服务器输出。
- Cookies and ServletRequestWrappers
如果客户应用程序包装了 HttpServletRequest.getCookies 方法并返回其他 cookie 或移除 cookie,那么修改后的 cookie 不会被发送到远程服务器,因为 javax.Servlet.http.Cookie 不会实现 Serializable。来自原始请求头的 cookie 会被发送到远程服务器。