请求转发和重定向的区别:
请求转发:
request.getRequestDispatcher("login.html").forward(request, response);
1)请求转发的路径是当前页面的路径,没有发生跳转
2)请求转发只有一次客户端请求,因为后面的工作由服务器帮忙执行了
3)效率高一些
4)后续只能访问本项目资源,因为是服务器代替执行
5)可以使用原来的request对象
重定向:
response.sendRedirect("login.html");
1)重定向后的路径是资源所在的真正路径,进行了跳转
2)至少进行两次请求。因为请求后服务器返回了302状态和Location地址,浏览器会根据这个返回地址进行再次请求
3)效率低一些
4)可以任意跳转,不是本项目也可以
5)request对象已经改变,不可再次使用
举例说明:
去商店买咖啡,但是商店没有:
重定向:老板通知你没有,你去别的商店买
请求转发:老板帮你去别的商店买,然后给你
Cookie:
其实就是服务器发送给客户端,然后保存在客户端的一小份数据
1、可以应用的场景:
浏览记录、购物车、自动登录等
2、为什么需要Cookie
http请求是无状态的,但是需要满足用户体验。(无状态的意思就是:客户端请求服务器后,再次进行请求,服务器就不知道此客户端时候来过)
3、Cookie的使用
1)服务器响应进行cookie添加(这样客户端收取的数据中,响应头就多了一个字段Set-Cookie)
Cookie cookie = new Cookie("aa", "bb"); response.addCookie(cookie);
2)获取客户端传递过来的cookie
Cookie[] cookies = request.getCookies(); if(cookies != null){ for (Cookie c : cookies) { String cookieName = c.getName(); String cookieValue = c.getValue(); System.out.println(cookieName + " = "+ cookieValue); } }
3)cookie常用方法:
//关闭浏览器后,cookie就没有了。 ---> 针对没有设置cookie的有效期。 // expiry: 有效 以秒计算。 //正值 : 表示 在这个数字过后,cookie将会失效。 //负值: 关闭浏览器,那么cookie就失效, 默认值是 -1 cookie.setMaxAge(60 * 60 * 24 * 7); //赋值新的值 //cookie.setValue(newValue); //用于指定只有请求了指定的域名,才会带上该cookie cookie.setDomain(".org.com"); //只有访问该域名下的cookieDemo的这个路径地址才会带cookie cookie.setPath("/CookieDemo");
4、Cookie存在的问题
由于Cookie的数据存放在客户端上,所以不安全;Cookie是传递数据有限
Session:
是一种基于Cookie的会话机制。Cookie是存放在客户端的一小份数据。Session则是存放在服务器的
1)常用API
//得到会话ID String id = session.getId(); //存值 session.setAttribute(name, value); //取值 session.getAttribute(name); //移除值 session.removeAttribute(name);
//强制干掉会话,里面存放的任何数据就都没有了。
session.invalidate();
2)Session的创建与销毁时机:
创建:
当调用request.getSession()的时候就创建。
销毁:(由于Session是服务器端的数据,所以关闭浏览器也不会消失)
关闭服务器;Session会话时间超时(默认30分钟)