最近做到了博客这一块,用到了servlet和jsp,当一个用户通过在登陆页面输入用户名和密码登陆到个人中心,然后通过个人中心去浏览其它相关页面,在这整个过程需要用到该用户的相关信息,这时可以把用户信息存入到session中,以方便在整个会话过程中取得用户信息,由于Session的特殊性,现特以做个总结如下:
由于HTTP协议连接的无状态性,才使得session的不得已而产生。既然Web应用并不了解有关同一用户以前请求的信息,那么解决这个问题的一个办法是使用Servlet/JSP容器提供的会话跟踪功能,Servlet API规范定义了一个简单的HttpSession接口,通过它我们可以方便地实现会话跟踪。
HttpSession接口提供了存储和返回标准会话属性的方法。标准会话属性如会话标识符、应用数据等,都以“名字-值”对的形式保存在服务器端。也就是说,HttpSession接口提供了一种把对象保存到内存、在同一用户的后继请求中提取这些对象的标准办法。在会话中保存数据的方法是setAttribute(String s, Object o),从会话提取原来所保存对象的方法是getAttribute(String s)。
在服务器端,每当新用户请求一个使用了HttpSession对象的JSP页面,Servlet/JSP容器除了发回应答页面之外,它还要向浏览器发送一个特殊的数字。这个特殊的数字称为“会话标识符”,它是一个唯一的用户标识符。此后,HttpSession对象就驻留在内存之中(这当然是在服务器端),等待同一用户返回时再次调用它的方法。
在客户端,浏览器保存会话标识符,并在每一个后继请求中把这个会话标识符发送给服务器。会话标识符告诉JSP容器当前请求不是用户发出的第一个请求,服务器以前已经为该用户创建了HttpSession对象。此时,JSP容器不再为用户创建新的HttpSession对象,而是寻找具有相同会话标识符的HttpSession对象,然后建立该HttpSession对象和当前请求的关联。
会话标识符以Cookie的形式在服务器和浏览器之间传送,标准会话属性在服务器端也是以会话的形式存在的,并且这个Cookie的生命周期只是临时的,即会话结束后就自动消失,没有为它指定固定的生命周期,因此有人说session是基于Cookie的技术。另外,如果客户端不支持Cookie,运用url重写机制来保证会话标识符传回服务器。
还有一点,session不像Cookie那样拥有路径访问的问题。session对应的是窗口,只要是同一个客户端或者是存在父子关系的多个客户端,同一个application下的servlet/JSP可以共享同一个session。当然,session和窗口的对应关系也是受时间限制的,至于多长时间,可以在服务器的conf/web.xml中配置,默认为30分钟。
分享到:
相关推荐
Servlet API提供了`Part`接口处理多部分形式的数据,如文件上传,而文件下载通常涉及设置响应头以指示文件类型和大小,以及提供下载内容的输出流。 总结来说,Servlet是Web应用的基石,它结合HttpServletRequest和...
- 数据的可见性:request中的数据只对当前请求可见,session中的数据对同一会话的所有请求可见,而application中的数据对所有用户的所有请求可见。 - 使用场景:request适用于临时、短暂的信息传递,如请求参数;...
例如,页面特定的信息应存储在PageContext中,多个请求间共享但局限于一次会话的数据应放在Session中,而跨会话的全局信息则应存入Application。 了解和合理利用这四个范围,可以帮助我们更好地组织和管理Web应用中...
- 实现了这个接口的对象在被绑定到或从session中解绑时,会自动调用`valueBound()`和`valueUnbound()`方法,提供了对session内对象状态改变的直接控制。 8. **HttpSessionActivationListener**: - `...
会话通过`session.getAttribute()`和`session.setAttribute()`来存储和检索数据,`session.invalidate()`可终止会话。 9. **多线程与并发**: Servlet默认在单线程环境中运行,但可以通过覆盖`getThreadLocalRequest...
- 在JSP页面中使用`<form>`标签提交表单数据到Servlet。 - 使用`<a>`标签或JavaScript发起AJAX请求调用Servlet。 #### 4. Servlet的共享变量 Servlet可以使用不同的方式实现数据共享,例如: - **ServletContext*...
在`showReport.jsp`中,开发者可能使用了JSP内置对象(如request、response、session和application)来与Servlet进行通信。可能的情况是,用户在界面上触发某个操作,比如点击“打印报表”按钮,这将触发一个HTTP...
例如,`ServletContext`对象可以在整个Web应用程序范围内共享数据,而`Session`对象则可以存储特定用户的会话信息,确保数据的私密性和连续性。 #### Servlet安全性 Servlet规范还涉及到了Web应用程序的安全性问题...
6. 当用户准备结算时,Servlet会从session中读取所有商品信息,生成订单并更新库存。 7. 最后,可能需要清除购物车(session中的商品信息),以便用户开始新的购物会话。 通过这个过程,我们可以看到Servlet的内置...
- 由于一个 Servlet 实例可能会同时处理多个请求,因此在 Servlet 中声明成员变量存储用户数据可能导致线程安全问题。 - **解决方案**: - 实现 `SingleThreadModel` 接口,但这种方式已被废弃,因为效率低下。 ...
4. **Servlet上下文**:`ServletContext`接口提供了获取应用范围内的信息和资源的方法,如读取初始化参数,与其它Servlet共享数据,或者触发全局事件。 5. **会话管理**:Servlet 2.4规范引入了HttpSession接口,...
当你的应用存储数据到Session中,或从Session中清除数据,Servlet都会通过HttpSessionBindingListener检杳什么类被绑定或被取消绑定。这个接口的方法会通报被绑定或被取消绑定的对象。 绪言 这是一份关于2.1版...
Servlet技术是Java Web开发中的核心组件之一,用于处理HTTP请求并生成动态网页内容。在给定的描述中,我们看到的任务是实现一个简单的登录程序,该程序由Servlet接收用户的用户名和密码,然后将这些信息输出到页面上...
6. **转发数据**:Servlet将查询到的数据封装到Request作用域或Session作用域,然后转发到JSP页面显示。 **四、Servlet实现分页** Servlet主要负责处理请求和响应,以及与数据库的交互。以下是一个简单的Servlet...
Servlet根据请求参数获取当前页码,计算出应显示的留言范围,然后从数据库中查询这部分数据。返回的数据显示在JSP页面上,通常会包含上一页和下一页的链接。 **在项目中,"MessageBoard"可能是一个包含以下组件的...
在Servlet中,可以通过接收请求参数(如当前页码、每页显示条数)来计算出需要显示的数据范围,然后从数据库中获取对应的数据,最后通过JSP渲染成页面。此外,还需要在页面上提供导航链接,让用户可以方便地切换不同...
- **灵活性**:服务器可以根据需要随时更新Session中的数据。 #### 五、JSesssionID与SessionID 在Java Web应用中,经常会遇到JSesssionID这一概念。JSesssionID是Java Web应用中Session ID的一种具体实现。它是...
过滤器将请求中的session ID转发给`MemcachedSessionManager`,由它负责在memcached中查找或存储session数据。 4. **处理session的生命周期**:在应用中,需要确保正确处理session的创建、更新、销毁等生命周期事件...
在这个 CRM 系统中,Servlet 主要负责业务逻辑处理,如数据验证、数据库操作等。当 JSP 接收到用户请求后,会转发到相应的 Servlet 进行处理,Servlet 处理完后再将结果返回给 JSP 显示。 3. **数据库设计**: CRM...
教师权限相对较大,Servlet需要验证教师身份并控制其操作范围,确保数据安全。 4. **超级管理员角色**:超级管理员拥有系统的最高权限,可以管理所有用户(包括学生和教师),维护系统设置,如添加、删除和修改用户...