网页定时刷新并跳转案例实现—resp.setHeader()与resp.sendRedirect()的区别

resp.setHeader()与resp.sendRedirect()的区别——网页定时刷新并跳转案例实现
通过这个案例也许可以更好了理。resp.setHeader()与resp.sendRedirect()的区别;

首先说明

resp.setHeader()与resp.sendRedirect()的区别;

两者都可以实现页面跳转的效果,但实现原理略有不同。

  • resp.setHeader(“Refresh”, “2;url=[]”);是通过设置响应头部的Refresh属性,在指定时间后刷新当前页面或跳转到指定页面;
  • resp.sendRedirect()是通过发送一个302状态码和Location头部来实现页面的重定向,这会终止当前请求并告诉浏览器重定向到新的URL。

设计思路(实现原理)

1) 创建ReqServlet1类,编写跳转功能

2) 在web.xml中配置初始化参数和类的映射(这里我们直接用注解来配置servlet)

3)通过浏览器访问ReqServlet1,查看浏览器跳转效果。

案例实现

尝试使用Thread.sleep()timer.schedule() ,最后使用resp.setHeader()成功实现案例。

复现

使用Thread.sleep() ,直接重定向没有展示信息,分析原因后尝试更换使用timer.schedule()方法。
resp.sendRedirect("baidu.");

在这里插入图片描述

访问/ReqServlet1直接跳转了

在这里插入图片描述

原因

在Servlet中,一旦调用了resp.sendRedirect()方法,就会立即向客户端发送302重定向响应,这会终止当前请求并告诉浏览器重定向到新的URL。因此,即使在调用resp.getWriter().write("");后有一个2秒的延迟,但是在调用resp.sendRedirect("")之后立即这会终止当前请求并告诉浏览器重定向到新的URL,不会展示resp.getWriter().write("")。可以在前端页面中设置一个定时跳转的功能,这里不做讨论。

使用timer.schedule() ,只是展示resp.getWriter().write()内容,手动刷新后才会重定向到baidu,分析原因后尝试更换使用resp.setHeader()方法。

在这里插入图片描述
在这里插入图片描述

没有经行跳转

原因是:resp.getWriter().write("注册成功,页面2秒后跳转到首页");这行代码已经向客户端发送了响应,resp对象会被销毁,所以需要手动刷新一次resp会被重新创建才能进行重定向

成功跳转使用resp.setHeader()

在这里插入图片描述

package com.gd.servlet;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author LFXIANG
 * description TODO
 * @title ReqServlet1
 * date 2024/3/27 19:41
 */
@WebServlet("/ReqServlet1")
public class ReqServlet1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        resp.setContentType("text/html;charset=utf-8");
        resp.getWriter().write("注册成功,页面2秒后跳转到首页");
   //        设置响应头部的Refresh属性来实现在2秒后自动跳转到百度网站。
        resp.setHeader("Refresh", "2;url=http://www.baidu.com");
    }
}

运行

####
在这里插入图片描述
关于转发重定向的区别可以看我这篇文章——转发重定向的区别-(不废话直接看)

  • 14
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值