response 代表的是对客户端的响应,主要是将 JSP 容器处理过的对象传回到客户端。response 对象也具有作用域,它只在 JSP 页面内有效。
response实现页面跳转----重定向
代码
1-1.jsp
<%--
Created by IntelliJ IDEA.
User: skype
Date: 2022/5/27
Time: 17:09
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>1-1.jsp</title>
</head>
<body>
<%
request.setAttribute("A",123);//通过request的作用域对比重定向和转发的区别
System.out.println("1-1");
Thread.sleep(5000);//线程休眠5秒。方便直观观察
//页面跳转---重定向
response.sendRedirect("1-2.jsp");
//页面跳转---转发
//request.getRequestDispatcher("1-2.jsp").forward(request,response);
%>
</body>
</html>
1-2.jsp
<%--
Created by IntelliJ IDEA.
User: skype
Date: 2022/5/27
Time: 17:10
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>1-2.jsp</title>
</head>
<body>
<%
System.out.println("1-2");
Object v1= request.getAttribute("A");
out.print(v1);
%>
</body>
</html>
运行结果
重定向
运行1-1.jsp,如图一所示,过五秒后,自动跳转到1-2.jsp,浏览器URL地址栏的请求发生了改变,v1值显示为null,说明这是两次请求,两次响应。
转发
这里发现,请求访问1-1.jsp,浏览器URL地址栏没有发生改变,即一次请求,并且显示了v1值的内容。(运行转发代码时,要先将重定向的代码注释掉)
request作用域为一次请求开始,响应结束。重定向时v1值为null,转发时v1值不为空;
从这两种运行结果不难看出
- 重定向:多次请求,多次响应
- 转发:一次请求,一次响应;
转发和重定向区别
转发和重定向总结
- 转发用getRequestDispatcher( )方法。重定向用response.sendRedirect( )方法;
- 转发:浏览器URL地址栏不变。重定向:浏览器URL地址栏改变;
- 转发浏览器只做了一次访问请求。重定向是浏览器做了至少两次的访问请求;
- 转发是服务器行为,重定向是客户端行为。
- 转发2次跳转之间传输地的信息不会丢失,重定向2次跳转之间传输的信息会丢失(request范围)
- 重定向的速度比转发慢,因为浏览器需要再次发出新的请求,而转发不需要;
- 重定向可以跨域访问,而转发是在web服务器内部进行的,不能跨域访问。