许多应用都需要一个客户端的多个请求是相互关联。例如,一个web程序能在多个请求间保存用户的状态。基于web的应用程序都有维护这些状态的能力,因为HTTP是无状态的。为了支持这些,web应用程序需要维护状态,servlet技术提供了管理session的api,并且有几种实现会话的机制。
session代表一个HttpSession对象。你可以通过请求的getSession方法访问session。这个方法返回关联到当前请求的session对象,或者,如果当前请求还没有session,这个方法会生成一个。
你可以通过名称关联对象-值属性到session。这些属性可以被同一个web上下文处理同一个session的请求访问。
注意,你的应用程序可以通知web上下文和servlet生命周期(Handling Servlet Lifecycle Events)中的session监听器。 您还可以通知与会话关联的某些事件的对象,例如以下内容:
因为HTTP客户端没有方法去标记是否不再需要一个session。每一个session都关联了一个超时时间,以便于资源的回收利用。这个超时阶段可以通过session的getMaxInactiveInterval 和setMaxInactiveInterval方法访问。
要使用NetBeans集成开发环境在部署描述符中设置超时时间,请按照下列步骤操作。
要将session与用户关联,web容器有几种方法,它们都需要在客户端与服务器直接传一个唯一标识。这个唯一标识在客户端作为一个cookie维护,或者web组件在返回客户端的每一个响应中包含这个唯一标识。
如果你的应用使用了session对象, 您必须确保在客户端关闭cookie时让应用程序重写URL,从而启用会话跟踪。你可以通过调用所有servlet的响应的encodeURL方法来实现。只有当cookie无效时,这个方法才在url中包含唯一标识;从另一个角度讲,这个方法返回的url不会改变。