response
服务器接收客户端请求:request
服务器对客户端的回应:response
javax.servlet.http的接口HttpServletResponse extends ServletResponse
重要方法:
void addCookie(Cookie cookie)
:向客户端增加cookievoid setHeader(java.lang.String name,java.lang.String value)
:设置回应的头信息void sendRedirect(java.lang.String location) throws java.io.IOException
:页面跳转的一种方式(重定向)void setContentType(String type)
: 设置服务端的contentType类型(设置服务端响应的编码)
1. 示例:登录
login.jsp -> check.jsp -> success.jsp
- 重定向是response提供
- 转发是request提供
方式一:通过重定向跳转方式 sendRedirect
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html"; charset="UTF-8">
<title>register.jsp--response</title>
</head>
<body>
<form action="check.jsp" method="POST">
用户名:<input type="text" name="uname" id=""><br>
密码:<input type="password" name="upwd" id=""><br>
<input type="submit" value="提交">
</form>
</body>
</html>
check.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html"; charset="UTF-8">
<title>show.jsp--request</title>
</head>
<body>
<%
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("uname");
String pwd = request.getParameter("upwd");
if (name.equals("zs") && pwd.equals("abc")) { //假设zs abc
response.sendRedirect("success.jsp");//相对路径
} else {
//登录失败
out.print("用户名或密码有误!")
}
%>
注册成功,信息如下:<br>
姓名:<%=name %> <br>
年龄:<%=age %> <br>
密码:<%=pwd %> <br>
爱好:<br>
<%
if (hobbies != null) {
for (String hobby: hobbies) {
out.print(hobby + " ");
}
}
%>
</body>
</html>
success.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html"; charset="UTF-8">
<title>register.jsp--response</title>
</head>
<body>
登录成功!<br>
欢迎你:
<%
String name = request.getParameter("uname");
out.print(name);
%>
</body>
</html>
结果
- 页面实现跳转
- 但是用户名没有拿到
即重定向实现了跳转,但数据丢失了
方式二:通过请求转发方式 sendRedirect
check.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html"; charset="UTF-8">
<title>show.jsp--request</title>
</head>
<body>
<%
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("uname");
String pwd = request.getParameter("upwd");
if (name.equals("zs") && pwd.equals("abc")) { //假设zs abc
//response.sendRedirect("success.jsp"); 页面跳转:重定向,导致数据丢失
//页面跳转:请求转发
request.getRequestDispatcher("success.jsp").forward(request, response);
} else {
//登录失败
out.print("用户名或密码有误!")
}
%>
注册成功,信息如下:<br>
姓名:<%=name %> <br>
年龄:<%=age %> <br>
密码:<%=pwd %> <br>
爱好:<br>
<%
if (hobbies != null) {
for (String hobby: hobbies) {
out.print(hobby + " ");
}
}
%>
</body>
</html>
结果
- 页面没有跳转
- 可以获取数据
index.jsp->register.jsp->success.jsp
---------- | 请求转发 | 重定向 |
---|---|---|
地址栏是否改变 是否保留第一次 | 不变register.jsp | 改变success.jsp |
请求时的数据 | 保留 | 不保留 |
请求的次数 | 1 | 2 |
跳转发生的位置 | 服务端 | 客户端发出的第二次跳转 |
重定向:
- 服务端从客户端拿到数据,第一次响应给客户端,客户端指向新的跳转地址success.jsp
- 客户端发出第二次请求request,success.jsp响应给客户端
请求转发:
- 客户端第一次请求request,服务端拿到数据,请求转发给success.jsp,success.jsp响应给客户端