Web前端之cookie、session、请求转发与重定向

http协议的特点:称之为无状态, 请求与请求之间不会记录状态(状态就包括请求参数等信息)

Cookie:记录多个请求之间的联系,保存服务器状态(实现记住用户名的功能)

创建Cookie

Cookie c = new Cookie("名字", "值");
浏览器每个域名下能够包含30~50个cookie
每个cookie的长度大约是4k左右

方法:

c.setMaxAge(整数);      // 设置cookie的寿命,秒,没有设置寿命的是会话cookie浏览器关闭就删除
c.setMaxAge(0);         // 寿命为0,删除此cookie
response.addCookie(c);  // 通过响应对象,把创建的cookie返回给浏览器

获取cookie

Cookie[] cookies = request.getCookies(); //获取所有的

el的语法:

${cookie.cookie的名称.value}

session 会话

存储多次请求之间的状态信息,信息存在服务器的内容当中

创建

HttpSession session = request.getSession();  
// 首次调用是创建session对象
// 后续调用是获取第一次创建好的session对象

方法:

存入内容:session.setAttribute("变量名", 任意信息);
获取内容:Obejct 信息 = session.getAttribute("变量名");
删除内容:Obejct 信息 = session.removeAttribute("变量名");
让session失效(清空session中所有内容):session.invalidate();

应用-用户登录、用户注销(安全退出)

jsp页面获取session中的变量

${sessionScope.变量名}

实现原理

针对同一浏览器,才能实现在请求存储信息,在之后的请求获取信息的效果
每个用户访问服务器,服务器会创建一个独立的session

session和cookie的区别:

1. session将信息存储于服务器端,cookie将信息存储于浏览器端
2. session更安全
3. session的生命周期相对较短, 
	两次请求间隔超过30分钟,服务器会销毁session
	调用session.invalidate方法时,会立刻销毁
   cookie 
	会话cookie是浏览器关闭就销毁
	setMaxAge的cookie会根据设置的寿命存活一段时间
4).存储的信息量上
	cookie 每个最大是4k左右
	session不太适合存储太多的内容
	信息要永久存储,需用数据库
5.cookie里数据都得是字符串,session里可以存任意类型

重定向请求

请求转发:

 request.getRequestDispatcher("目录路径").forward(request,response);

请求重定向:

 response.sendRedirect("目录路径");

两者区别:

	1.请求转发时,地址栏第一个servlet的地址不变
	   重定向,地址栏是最后一个servlet的地址
	2.请求转发时一次请求,跳转发生在服务器内部
	   重定向是两次请求,第一次请求会返回302的状态码和目标地址, 浏览器根据目标地址发送第二次请求,才完成整个流程
	3. 重定向是两次请求, 用session作用域来存值取值	   
	   请求转发是同一次请求,用request作用域存值取值
	4. 请求转发的目标只能是本项目的servlet或jsp
	   重定向可以是任意的

查询:

servlet  -->  jsp   // 关系密切的跳转使用请求转发 		
forward()

删除:

删除servlet --> 查询列表servlet  // 关系不密切的跳转使用重定向 
redirect()

page(页号), size(每页记录数)

m=(page-1)*size
n=size

猜你喜欢

转载自blog.csdn.net/Eternity_y/article/details/83353563