共享域 cookie session
概念
1. 共享域
- 概念
- 共享域就是存储数据的对象,类似于快递柜
- 一方存放数据到共享域,一方从共享域中提取数据,间接完成数据的获取
共享域对象有四个服务范围(方法相同,范围不同)
ServletContext
- 整个项目的资源都可以访问
- 使用概率小,因为范围太大,用于设置项目整体属性
// 获取共享域对象
ServletContext sc = getServletContext();
// 设置存储数据
sc.setAttribute("name", "root");
// 获取存储数据,并发送给客户端
resp.getWriter().print( (String)sc.getAttribute("name") );
HttpSession
- 一次会话内
- 可存储个人用户信息 ```java @WebServlet(“/a”) public class a extends HttpsServlet{ req.setCharacterEncoding(“utf-8”); resp.setContentType(“text/html;charset=utf-8”); req.setAttribute(“name”, “root”); // 数据存储 req.getRequestDispatcher(“/b”).forward(req, resp); // 会话转发 }
@WebServlet(“/b”) public class b extends HttpsServlet{ // 获取数据并发送给客户端 resp.getWriter().print( (String)req.getAttribute(“name”) ); }
- ServletRequest
- 一次请求
- 转发数据共享和传递
- PageContext
- 单个servlet的service内生效
- 范围太小不适用
<a name="EoIjU"></a>
### 2. session
- 概念
- 会话级别的存储技术,存储在服务器端
- 没有数据存储的要求[Object],没有数据存储大小限制
- 用于登录账号处理、支出超时、验证码存储等
- 存储原理
- 获取原理
<a name="OSkII"></a>
### 3. cookie
- 概念
- 会话级别的数据存储技术,存储在客户端浏览器中
- 键值对形式并且只有字符串类型,大小限制默认2kb
- 每次请求都会携带cookie,可用于无密识别请求的身份
- 存储原理
- cookie的数据通过响应头(set-cookie)携带保存在浏览器中
- 获取原理
- 客户在每次请求中都会将项目下的cookie放到请求头中,传给服务器端
- cookie中的domain和path
- domain和path控制cookie是否加入请求头中
- domain是项目的主机地址
- 通过修改domain可实现跨服务器共享(微服务)
- path是项目的路径地址
```java
// 创建cookie
Cookie cookie = new Cookie("user", "root");
// 遍历所有cookie数据
for(Cookie cookie : cookies){
System.out.println(cookie.getName()+" : "+cookie.getValue())
}
// 设置cookie有效时间
cookie.setMaxAge(int second);
// 默认:一次会话有效(浏览器关闭后释放)
// 七天有效:7*24*60*60
// 携带一个或多个cookie回客户端
resp.addCookie(cookie);