什么是重定向?
本质:
两次Http请求,有两个Request对象和Response对象
过程:
服务器在收到客户端请求后,会通知客户端浏览器重新向另外一个 URL 发送请求
重定向工作流程图
注意:
服务器端的 Web 资源返回一个状态码为 302 的响应信息,该响应的含义为:通知浏览器再次发送请求,访问另一个 Web 资源(在响应信息中提供了另一个资源的 URL)
转发和重定向的区别
两个比较重要的点:
-
转发属于服务端内部行为,重定向属于客户端行为
-
转发不支持跨域跳转,重定向支持
HttpServletResponse接口当中提供的重定向的方法
返回值类型 | 方法 | 描述 |
---|---|---|
void | sendRedirect(String location) | 向浏览器返回状态码为 302 的响应结果,让浏览器访问新的 URL。若指定的 URL 是相对路径,Servlet 容器会将相对路径转换为绝对路径。参数 location 表示重定向的URL。 |
示例代码:
需求:
-
写一个登陆界面
-
一个验证类
-
一个处理请求后重定向类
-
一个被重定向的最终位置类
验证类:
package com.example.HttpServletRequestDemo;
?
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
?
/**
* 这是一个检查验证码的类,画出验证码然后让别人调用并且输入
* @since JDK 1.8
* @date 2021/09/18
* @author Lucifer
*/