9.18JavaWeb之Servlet重定向

9.18JavaWeb之Servlet重定向

什么是重定向?

本质:

两次Http请求,有两个Request对象和Response对象

过程:

服务器在收到客户端请求后,会通知客户端浏览器重新向另外一个 URL 发送请求

重定向工作流程图

9.18JavaWeb之Servlet重定向

 

注意:

服务器端的 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
*/
@WebServlet(name = "CheckcodeServlet", value = "/CheckcodeServlet")
public class CheckcodeServlet extends HttpServlet {
   //设置UID
   private static final long serialVersionUID = 1L;
?
   //Get
   @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //调用生成验证码的方法
       codeCheck(req, resp);
  }
?
   //随机生成验证码
   private Boolean codeCheck(HttpServletRequest req, HttpServletResponse resp) throws IOException {
       //设置宽、高
       int width = 120;
       int height = 30;
?
       //内存中生成图片
       BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
       //获取对象画笔
       Graphics2D g = (Graphics2D) image.getGraphics();
       //设置颜色
       g.setColor(Color.GRAY);
       //填充矩形
       g.fillRect(0, 0, width, height);
       //设置颜色
       g.setColor(Color.BLUE);
       //画边框
       g.drawRect(0, 0, width-1, height-1);
?
       //准备数据
       String words = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
       //设置字体颜色
       g.setColor(Color.YELLOW);
       //设置字体样式
       g.setFont(new Font("隶书", Font.BOLD, 20));
       String code
上一篇:Python的非数字类型


下一篇:flutter flutter_screenutil Looking up a deactivated widget's ancestor is unsafe.