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