共享域 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// 创建cookieCookie 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);
