一、response:响应对象
提供的方法
<1>void addCookie(Cookie cookie):服务端向客户端增加cookie对象
<2>void sendRedirect(String location) throes IOException:页面跳转的一种方式,称之为重定向
<3>void setContentType(String type):设置服务端响应时的编码(设置服务端的ContentType类型)
实例:登录
login.jsp -> check.jsp->success.jsp
使用重定向语句,会导致数据丢失response.sendRedirect("success.jsp");
使用request语句跳转 request.getRequestDispatcher("success.jsp").forward(request,response);
页面跳转:请求转发,可以获取数据,并且地址栏没有变(仍然保持转发时的页面check.jsp)
请求转发与重定向的区别:
请求转发 重定向
地址栏: 不变(check.jsp) 改变(success.isp)
是否保留第一次 保留 不保留 ---四种范围对象
请求时的数据
请求的次数 一次 两次
跳转发生的位置 服务端 客户端发生的第二次跳转
请求转发(一个来回):在服务器内部跳转,客户端向服务器发送一次请求(请求指向check.jsp),之后在服务器内部实现check.jsp->success.jsp,服务器(success.jsp)向客户端响应一次。
客户端--->服务器A窗口--->服务器B窗口--->结束
重定向(两个来回):在客户端向服务器发送第一次请求(请求指向check.jsp)后,服务器(check.jsp)第一次响应是指向新的跳转地址(success.jsp),之后客户端向服务器发送第二次请求(请求指向success.jsp),之后服务器(success.jsp)向客户端响应第二次。
客户端--->服务器A窗口--->去找B
客户端--->服务器B窗口--->结束
二、Cookie及其实例
因为Cookie与session关系密切,必须先了解Cookie
Cookie(客户端,不是内置对象):由服务端生成,然后发给客户端保存(相当于本地缓存)
作用:可以提高访问效率,但是安全性较差(将密码保存在客户端,可能被破解)。
Cookie:name(key)=value
由javax.servlet.http.Cookie提供
public Cookie(String name,String value)
String getName():获取name
String getValue():获取value
void setMaxage(int expiry):设置最大有效期,单位为秒
服务端发送给客户端
response.addCookie(Cookie cookie)(准备Cookie) + 页面重定向(转发/重定向)+ request.getCookies()(客户端获取Cookie)
注意:
a、服务端增加cookie:response对象;客户端获取cookie:request对象;
b、不能获取某一个单独对象,只能一次性获取全部Cookie。
实例1:模拟服务端向客户端发送cookie
response_addCookie.jsp->result.jsp
response_addCookie.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>Insert title here <% //服务端 //创建cookie Cookie cookie1 = new Cookie("name","张志伟"); Cookie cookie2 = new Cookie("pwd","123456"); //添加cookie response.addCookie(cookie1); response.addCookie(cookie2); //页面跳转到客户端 request.getRequestDispatcher("result.jsp").forward(request,response); %>
result.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>Insert title here <% //客户端 //获取全部Cookie Cookie [] cookies = request.getCookies(); //遍历全部Cookie for(Cookie cookie:cookies) { out.print(cookie.getName()+"---"+cookie.getValue()+"
"); } %>
测试结果如下图
JSESSIONID---1E1D0822274C36D80CF50ADEDAD2CE6A为浏览器自动添加的cookie
建议Cookie只保存 字母、数字 ,否则需要编码、解码。
实例2:使用cookie记住用户名
login.jsp(客户端)->check.jsp(服务端)->result.jsp(客户端,保存用户名)
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>Insert title here <%! String uname; %> <% boolean flag=false; Cookie [] cookies=request.getCookies(); for(Cookie cookie:cookies) { if(cookie.getName().equals("name")) { uname=cookie.getValue(); flag=true; } } if(!flag) { out.print("cookie已失效"); } else { out.print("cookie:"+uname); } %> <% //(uname==null? "":uname) 的意义为,如果uname的值为null,则显示空格,否则就显示真正的uname,为了在第一次的时候不显示null %>
check.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>Insert title here <% //设置编码 request.setCharacterEncoding("utf-8"); //获取用户名和密码 String name=request.getParameter("uname"); String pwd=request.getParameter("upwd"); //将用户名加入Cookie中 Cookie cookie =new Cookie("name",name); //设置cookie的存活时间为10秒 cookie.setMaxAge(10); response.addCookie(cookie); //页面跳转 response.sendRedirect("result.jsp"); %>
result.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>Insert title here 欢迎登陆
因为浏览器会自动保存,所以此处在eclispe中做测试。
上图是保存的cookie,过十秒后再刷新
设置cookie的存活时间
cookie.setMaxAge(60);//60秒的意思
cookie.setMaxAge(60*60);//一小时
cookie.setMaxAge(365*24*60*60);//一年