Servlet 3.1 功能部件的功能

WebSphere® Application Server(传统) 支持 Servlet 3.1 规范。请查看突出显示的功能的说明和描述。

新功能部件 新功能部件:
产品支持 Servlet 3.1 功能。

所有功能的描述均在 Java Servlet 规范中提供,而未在产品文档中加以描述。但是,Servlet 3.1 功能的其他注意事项如下所示:

newfeat

异步 I/O

这是一项 Servlet 3.1 功能,它指定非分块读启动时,余下请求生命周期中的任何资源都不能调用 API,否则可能会导致分块读。例如,对于资源设置读侦听器后的 POST 请求,针对 getParameter()getPart() API 的任何后续调用都将导致 IllegalStateException

使用异步 Servlet 时,请使用 AsyncContext.setTimeout API 来设置超时,否则将使用容器缺省值,例如 30 秒。此超时在异步每次开始时使用 ServletRequest 进行重置。StartAsync API 将被调用,并且会因为在最近一次异步启动后的超时时间段内未调用 AsyncContext.complete API 而到期。在使用异步 I/O 支持时,请使用 AsyncContext.setTimeout API 来设置超时值,以允许异步 I/O 完成。完成取决于其他外部因素,例如,环境或网络速度。

升级处理

升级处理是一项具有非分块读写能力的 Servlet 3.1 功能。当读或写操作以异步方式执行时,对服务器等待操作完成的时间没有限制。您可使用 server.xml 文件中的 Web 容器定制属性(例如,upgradereadtimeoutupgradewritetimeout)来设置超时。请参阅以下示例,其中的超时为 5 秒:
<webContainer upgradeReadTimeout="5000" />
<webContainer upgradeWriteTimeout="5000" />

当请求正在由异步 Servlet 处理时,不得使用 Servlet 3.1 的升级功能来升级该请求。

支持使用 Servlet 3.1 功能进行升级的应用程序要求请求上的连接在客户机与托管该升级的应用程序之间保持打开。如果升级处理完成时,该应用程序未从其处理程序或任何其他资源(例如,ReadListener 或 WriteListener)启动 WebConnection close(),那么 TCP 连接将保持打开,直到服务器重新启动为止。

如果使用 Servlet 3.1 功能中的 UpgradeHandler 和 ReadListener,那么仅当客户机关闭与托管所升级应用程序的服务器的连接时,才会调用 ReadListener.onAllDataRead 方法。onReadListener.onAllDataRead 的 Javadoc 将返回以下消息:
在读取当前请求的所有数据后调用。
在升级情况下,服务器不知道数据结束,因为所升级数据不是按定界 HTTP 请求主体的方式进行定界。除非客户机连接关闭,否则无法确定数据结束。

基于表单的认证

成功认证后,客户机将重定向至原始请求的资源。Servlet 3.1 规范指定:“为提高重定向请求的 HTTP 方法的可预测性,容器必须使用 303 (SC_SEE_OTHER) 状态码进行重定向,需要与 HTTP 1.0 用户代理程序进行互操作的情况(在此情况下,必须使用 302 状态码)除外”。Servlet 3.1 功能保留与 HTTP 1.0 用户代理程序的互操作性并始终使用 302 状态码。有关配置 Servlet 3.1 以实现安全性的更多信息,请阅读“针对 Servlet 3.1 进行配置”主题。

大型发布数据

ServletRequest.getContentLengthLong() API 的添加要求支持接收长度超过 Integer.MAX_VALUE 并且无法在单字节数组或字符串中完全容纳的发布数据。

当获取的发布数据内容所使用的 API 以字符串或 byte[] 形式返回内容时,此添加会有影响。例如,用于访问参数的 javax.servlet.ServletRequest 方法:
String    getParamter(String name)
String[]  getParameterValues()
Map<String,String> getParameterMap()

可能发生以下情况:您发送包含多个参数的发布数据,这些参数组合到一起时长度超过 Integer.MAX_VALUE。但是,每个参数名和参数值的长度都必须小于 Integer.MAX_VALUE

发送大量发布数据涉及以下附加注意事项:
  • 必须以长度小于 Integer.MAX-VALUE 的块的形式来发送发布数据。
  • 在处理开始之前,必须完整读取 Web 容器所处理的发布数据(例如,参数或部件)。大型发布数据可能导致大量内存需求,因为它可能需要发布数据大小的双倍内存,Web 容器处理才能成功。

指示主题类型的图标 概念主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cweb_servlet31
文件名:cweb_servlet31.html