许多应用都需要一个客户端的多个请求是相互关联。例如,一个web程序能在多个请求间保存用户的状态。基于web的应用程序都有维护这些状态的能力,因为HTTP是无状态的。为了支持这些,web应用程序需要维护状态,servlet技术提供了管理session的api,并且有几种实现会话的机制。
访问一个session
session代表一个HttpSession对象。你可以通过请求的getSession方法访问session。这个方法返回关联到当前请求的session对象,或者,如果当前请求还没有session,这个方法会生成一个。
session关联的对象
你可以通过名称关联对象-值属性到session。这些属性可以被同一个web上下文处理同一个session的请求访问。
注意,你的应用程序可以通知web上下文和servlet生命周期(Handling Servlet Lifecycle Events)中的session监听器。 您还可以通知与会话关联的某些事件的对象,例如以下内容:
- 当往session中添加或移除一个对象。为了接收通知,你的对象必须实现javax.servlet.http.HttpSessionBindingListener接口。
- 当附加对象的session被休眠或激活。在虚拟机之间移动或保存到永久存储并从中恢复时,会话将被钝化或激活。为了接收通知,你的对象必须实现javax.servlet.http.HttpSessionActivationListener 接口。
session管理
因为HTTP客户端没有方法去标记是否不再需要一个session。每一个session都关联了一个超时时间,以便于资源的回收利用。这个超时阶段可以通过session的getMaxInactiveInterval 和setMaxInactiveInterval方法访问。
- 为了确保活跃的session不被设置为超时, 您应该使用服务方法定期访问会话,因为这会重置会话的生存时间计数器。
- 当与一个特定客户端交互完成后,你可以在服务端使用invalidate方法设置一个session无效、删除任何session数据。
使用netbeans 设置超时时间
要使用NetBeans集成开发环境在部署描述符中设置超时时间,请按照下列步骤操作。
- 打开项目如果你还未打开
- 展开你的项目Projects节点
- 展开项目节点下的Web Pages and WEB-INF节点
- 双击web.xml
- 在编辑器顶端点击General按钮
- 在Session Timeout属性中,键入数字
整数值表示在会话超时之前必须经过的不活动分钟数。
session跟踪
要将session与用户关联,web容器有几种方法,它们都需要在客户端与服务器直接传一个唯一标识。这个唯一标识在客户端作为一个cookie维护,或者web组件在返回客户端的每一个响应中包含这个唯一标识。
如果你的应用使用了session对象, 您必须确保在客户端关闭cookie时让应用程序重写URL,从而启用会话跟踪。你可以通过调用所有servlet的响应的encodeURL方法来实现。只有当cookie无效时,这个方法才在url中包含唯一标识;从另一个角度讲,这个方法返回的url不会改变。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。