对 JAX-WS 应用程序使用 HTTP 会话管理支持
通过使用 cookie 或 URL 重写功能在 HTTP 传输层中执行 HTTP 会话管理。 通过提供多个选项来跟踪一系列请求, HTTP 会话管理使 Java™ API for XML-Based Web Services (JAX-WS) 应用程序对应用程序用户显示为动态。
准备工作
开发 JAX-WS Dynamic proxy 或 Dispatch client。 要了解有关如何开发 JAX-WS 客户机的更多信息,请阅读关于根据 Web 服务描述语言 (WSDL) 文件开发 JAX-WS 客户机或使用 JAX-WS API 开发动态客户机的内容。
有关此任务
可以使用 HTTP 会话管理来维护服务器上的用户状态信息,同时将最少的信息传递回至用户以跟踪会话。 可以使用会话 cookie 或 URL 重写功能在应用程序服务器上实现 HTTP 会话管理。
浏览器、应用程序服务器与应用程序之间的交互对用户和应用程序是透明的。 应用程序和用户通常无法识别服务器提供的会话标识。
会话 cookie
HTTP maintainSession 功能使用单个 cookie(即 JSESSIONID),此 cookie 包含会话标识。 此 cookie 用于将请求与存储在该会话的服务器上的信息相关联。 对于 JAX-WS 应用程序的后续请求,会将会话标识作为请求头的一部分来传输,这将使应用程序能够将给定会话标识的每个请求与该用户的先前请求相关联。 JAX-WS 客户机应用程序从 HTTP 响应头检索会话标识,然后通过在 HTTP 请求头中设置会话标识在后续请求中使用那些标识。
URL 重写
URL 重写功能的工作方式类似重定向 URL,这是因为它将会话标识存储在 URL 中。 会话标识作为从 web 页面提交的所有链接或表单上的参数进行编码。 此编码 URL 用于对同一服务器的后续请求。
过程
结果
示例
maintainSession 属性:<!-- This is the PolicyType for HTTP transport -->
<wsp:ExactlyOne>
<wsp:All>
<wshttp:readTimeout>300</wshttp:readTimeout>
<wshttp:writeTimeout>300</wshttp:writeTimeout>
<wshttp:connectTimeout>180</wshttp:connectTimeout>
<wshttp:persistConnection>yes</wshttp:persistConnection>
<wshttp:messageResendOnce>no</wshttp:messageResendOnce>
<wshttp:chunkTransferEnc>no</wshttp:chunkTransferEnc>
<wshttp:acceptRedirectedURL>no</wshttp:acceptRedirectedURL>
<wshttp:sendExpectHeader>no</wshttp:sendExpectHeader>
<wshttp:maintainSession>yes</wshttp:maintainSession>
<wshttp:compressRequest>
<wshttp:compressType name="none"></wshttp:compressType>
</wshttp:compressRequest>
<wshttp:compressResponse>
<wshttp:compressType name="none"></wshttp:compressType>
</wshttp:compressResponse>
<wshttp:protocolVersion>HTTP/1.1</wshttp:protocolVersion>
</wsp:All>
</wsp:ExactlyOne>Map<String, Object> rc = ((BindingProvider) port).getRequestContext();
...
...
rc.put(BindingProvider.SESSION_MAINTAIN_PROPERTY, Boolean.TRUE);
...
...