JavaWeb笔记7-response、请求转发和重定向、Cookie

9大内置对象之一——response
response:响应对象

客户端对服务端发出请求:request
服务端对客户端返回响应:response

response提供的方法:
void addCookie(Cookie cookie):服务端向客户端增加cookie对象
void sendRedirect(String location) throws IOException;页面跳转的一种方式:重定向
void setContentType(String type):设置服务端的contentType响应编码(对应于request.setCharacterEncoding)

示例:登陆
login.jsp ->check.jsp ->success.jsp
代码如下:
a、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>
	<form action="check.jsp" method="post">
		用户名:<input type="text" name="uname"><br/>
		密码:<input type="password" name="upwd"><br/>
		<input type="submit" value="登陆"><br/>
	</form>
</body>
</html>

b、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>
	<%
	response.setCharacterEncoding("UTF-8");
	String name=request.getParameter("uname");
	String pwd=request.getParameter("upwd");
	if(name.equals("wsy")&&pwd.equals("123")){
		//假设用户名wsy,密码123,跳转到登陆成功页面
		//response.sendRedirect("success.jsp");  页面跳转重定向方法——导致数据丢失
		//改用页面跳转请求转发方式,可以获取到数据,并且地址栏没有改变,仍然保持转发时的页面check.jsp
		request.getRequestDispatcher("success.jsp").forward(request,response); 
	}
	else{
		//输入不正确
		out.print("登陆失败");
	}
	%>
</body>
</html>

c、success.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>
	登陆成功!<br/>
	欢迎您:
	<%
		String name=request.getParameter("uname");
		out.print(name);
	%>
</body>
</html>

总结:
请求转发和重定向之间的区别
1、地址栏是否改变
请求转发:地址栏不变,仍然保留在转发前的状态
重定向:地址栏改变,跳转到最终的jsp文件
2、是否保留第一次请求时的数据
请求转发:保留
重定向:不保留
3、请求的次数
请求转发:1次
(客户端输入用户名、密码,请求服务端进行校验,即为一次请求request,即在服务端内部跳转)
重定向:2次
(在客户端向服务端进行第一次请求后,check.jsp对客户端进行一次响应【指向新的跳转地址success.jsp】,客户端通过新的跳转地址向服务端发出第二次请求request,即跳转只在客户端和服务端中进行)

Session和Cookie
session(服务端、内置对象)
Cookie(客户端、非内置对象)

Cookie是由服务端产生的,发送给客户端保存,即我们理解中的本地缓存
Cookie:包含key/name=value
Cookie对象是由javax.servlet.http.Cookie类产生的
public Cookie(String key,String value)
String getName():获取key
String getValue():获取value
void getMaxAge(int expiry):最大有效期(秒)

1、服务端准备Cookie:response.addCookie(Cookie cookie)
2、客户端转发
直接写页面跳转(转发、重定向)
3、客户端获取Cookie:request.getCookies();

a、服务端增加cookie:response对象
客户端获取对象:request对象
b、不能直接取得某一单独对象,只能一次性将全部cookie拿到

示例代码:
a、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 cookie1 =new Cookie("name","wsy");
		Cookie cookie2 =new Cookie("pwd","123");
		response.addCookie(cookie1);
		response.addCookie(cookie2);
		
		//页面跳转到客户端(跳转/重定向)
		response.sendRedirect("result.jsp");
	%>
</body>
</html>

b、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();
		for(Cookie cookie:cookies){
			out.println(cookie.getName()+"---"+cookie.getValue()+"<br/>");
		}
	%>
</body>
</html>

通过F12可以发现,除了自己设置的Cookie对象外,还有一个name=JSESSIONID的Cookie

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值