一、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"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//服务端
//创建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);
%>
</body>
</html>
result.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//客户端
//获取全部Cookie
Cookie [] cookies = request.getCookies();
//遍历全部Cookie
for(Cookie cookie:cookies)
{
out.print(cookie.getName()+"---"+cookie.getValue()+"<br/>");
}
%>
</body>
</html>
测试结果如下图
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"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%!
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
%>
<form action="check.jsp" method="post">
用户名<input type="text" name="uname" value="<%=(uname==null? "":uname) %>"> <br/>
密码<input type="password" name="upwd"> <br/>
<input type="submit" value="登录"> <br/>
</form>
</body>
</html>
check.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//设置编码
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");
%>
</body>
</html>
result.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
欢迎登陆
</body>
</html>
因为浏览器会自动保存,所以此处在eclispe中做测试。
上图是保存的cookie,过十秒后再刷新
设置cookie的存活时间
cookie.setMaxAge(60);//60秒的意思
cookie.setMaxAge(60*60);//一小时
cookie.setMaxAge(365*24*60*60);//一年