请求重定向是指,客户端给服务器发请求,服务器给客户端新的地址,让客户端去访问新的地址。叫做请求重定向(因为之前的地址可能已经被废弃)。请求重定向的过程如下图所示:(也类似于一家店搬迁后会在老的店门口贴张告示说明新店在什么地方,让我们去新的地址)
响应状态码:302 简单的理解为该资源原本确实存在,但已经被临时改变了位置
当网站迁移或url地址进行调整时,服务端需要重定向返回,保证原请求自动跳转新的地址。
package com.atguigu.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class Response1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Response1已经响应");
//设置响应码,表示重定向
//resp.setStatus(302);
//设置响应头,说明新的地址所在,这个也是即将跳转到的页面
//resp.setHeader("location","http://localhost:8080/pro13/response2");
//这个相当于前面两个,不用设置302,输入地址即可
resp.sendRedirect("http://localhost:8080/pro13/response2");
}
}
package com.atguigu.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class Response2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Response2处理结果!!");
}
}
写好Java程序后在xml中配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>Response1</servlet-name>
<servlet-class>com.atguigu.servlet.Response1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Response1</servlet-name>
<url-pattern>/response1</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Response2</servlet-name>
<servlet-class>com.atguigu.servlet.Response2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Response2</servlet-name>
<url-pattern>/response2</url-pattern>
</servlet-mapping>
</web-app>
在浏览器输入网址后,会自动跳转到新的页面,地址也会发生变化
跳转到新的页面后会改变地址
请求重定向的特点:
1、浏览器地址栏会发生变化
2、两次请求
3、不共享Request域中数据(因为他是浏览器发送的两次请求,在Response1中的域数据只能在本次访问中能使用,切换访问地址后就会销毁)
4、不能访问WEB-INF下的资源(也是因为他第二次访问时浏览器发出的访问请求,不是内部的访问请求,所以不能访问)
5、可以访问工程外的资源