WEB核心【请求重定向】第十三章

简介: 目录1,请求重定向【阶段重点】1.1:简述&原理&格式1.2:延迟重定向1.3:请求转发和重定向的区别1.4:资源跳转问题目标:1,理解请求重定向原理2,熟练使用请求重定向的多种格式写法3,掌握请求转发和重定向区别javaEE资源跳转方式有两种:1,重定向2,请求转发 3,浏览器发现302状态码,就会

1,请求重定向【阶段重点】

1.1:简述&原理&格式

目标:

1,理解请求重定向原理

2,熟练使用请求重定向的多种格式写法

3,掌握请求转发和重定向区别

javaEE资源跳转方式有两种:

1,重定向

2,请求转发

image.gif编辑

3,浏览器发现302状态码,就会进行自动请求。请求路径,就是响应头中location

请求重定向:依赖浏览器

请求路径会发生改变。请求转发地址栏路径没有改变。

开发简化:(BaseServlet、SpringMVC)

请求重定向:return "redirect:/路径?参数列表";
                    return "redirect:http://网址";

@WebServlet({"/d2"})
public class Demo2Servlet extends BaseServlet {
    /**
     * 开发简化写法(BaseServlet子类,SpringMVC)
     * @return
     */
    public String run1(){
        System.out.println("d2-run1");
        return "redirect:/index.jsp";
    }
    /**
     * 开发简化写法(BaseServlet子类,SpringMVC)
     * @return
     */
    public String run2(){
        System.out.println("d2-run2");
        return "redirect:http://www.czxy.com";
    }
}

image.gif

    1. 完整写法:(适用于 过滤器组件)

    项目内跳转:response对象.sendRedirect("/项目名/路径?参数列表");

    外网跳转:response对象.sendRedirect("http://网址");

    /**
     * 完整写法(过滤器等组件)
     * @return
     */
    public void run3() throws IOException {
        System.out.println("d2-run3");
        //getResponse().sendRedirect("/day08_1/index.jsp");
        getResponse().sendRedirect(getServletContext().getContextPath()+"/index.jsp");
    }
    /**
     * 完整写法(过滤器等组件)
     * @return
     */
    public void run4() throws IOException {
        System.out.println("d2-run4");
        getResponse().sendRedirect("http://www.czxy.com");

    image.gif

      1. 原理写法:(适用于非servlet组件,通过response对象进行跳转)(了解)

      请求重定向原理:

      响应状态码:302

      响应头设置:location=

      /**
       * 原理写法(适用于非servlet组件,通过response对象进行跳转)
       * @return
       */
      public void run5() throws IOException {
          System.out.println("d2-run5");
          getResponse().setStatus(302);
          getResponse().setHeader("location",getServletContext().getContextPath()+"/index.jsp");}
      /**
       * 原理写法(适用于非servlet组件,通过response对象进行跳转)
       * @return
       */
      public void run6() throws IOException {
          System.out.println("d2-run6");
          getResponse().setStatus(302);
          getResponse().setHeader("location","http://www.czxy.com");
      }

      image.gif

      1.2:延迟重定向

      image.gif编辑

      /**
       * 延迟重定向-3秒
       */
      public void run7() throws IOException {
          //getResponse().setHeader("refresh","3;http://www.czxy.com");
          //getResponse().setHeader("refresh","3;/day08_1/index.jsp");
          getResponse().setHeader("refresh","3;"+getServletContext().getContextPath()+"/index.jsp");
          //满足用户体验
          getResponse().getWriter().write("<script>\n" +
                  "        window.onload = function (ev) {\n" +
                  "            var numNode = document.getElementById(\"num\");\n" +
                  "            setInterval(function () {\n" +
                  "                numNode.innerHTML = parseInt(numNode.innerHTML)-1;\n" +
                  "            },1000);\n" +
                  "        }\n" +
                  "    </script>\n" +
                  "    <h1>倒计时,还有<font color=\"red\" id=\"num\">3</font>秒跳转</h1>");
      }

      image.gif

      1.3:请求转发和重定向的区别

      image.gif编辑

      image.gif编辑1,请求转发使用request对象,重定向使用response对象

      2,请求转发使用服务器端路径,重定向使用客户端路径

      3,请求转发不能跳转外网,重定向可以

      4,请求转发是服务器内部的跳转,不依赖网速,跳转速度极快。重定向是依赖浏览器的跳转,严重依赖网速,跳转速度略慢

      5,请求转发:请求一次,响应一次。占用资源少

           重定向:重定向N次,响应n+1次。占用大量资源

      6,请求转发可以访问受保护目录资源,重定向不能

      7,请求转发不会改变地址栏路径,重定向会改变路径

           安全:请求转发。会隐藏后面转发程序的访问路径。

           程序Bug:由于请求转发不会更改地址,会导致用户重复访问某个Servlet。改为重定向

      8,请求转发可以使用request作用域,重定向不能

      1.4:资源跳转问题

      请求转发跳转问题:

      请求转发因为请求路径在转发多次也不会改变。

      如果跳转中出现相对路径,相对路径的出发目录

      请求地址栏目录路径来作为相对路径的出发目录

      image.gif编辑

      <img src="/day09_1/aaa/3.png"/>

      解决方案:

        1. 根本解决: 将目标资源 资源路径全部转换为绝对路径:  /项目名/资源名.扩展名
        2. 不用请求转发,用请求重定向。(治标不治本)

        最后:

              如果文章对您有帮助,就拿起小手赶紧给博主点赞💚评论❤️收藏💙 一下吧!

             愿我们在未来的日子里。熠熠生辉!!!

        相关文章
        |
        2月前
        |
        安全 Java 数据安全/隐私保护
        springSecurity学习之springSecurity过滤web请求
        通过配置 Spring Security 的过滤器链,开发者可以灵活地管理 Web 请求的安全性。理解核心过滤器的作用以及如何配置和组合这些过滤器,可以帮助开发者实现复杂的安全需求。通过具体的示例代码,可以清晰地了解 Spring Security 的配置方法和实践。
        95 23
        |
        5月前
        |
        监控 安全 Apache
        构建安全的URL重定向策略:确保从Web到App平滑过渡的最佳实践
        【10月更文挑战第2天】URL重定向是Web开发中常见的操作,它允许服务器根据请求的URL将用户重定向到另一个URL。然而,如果重定向过程没有得到妥善处理,可能会导致安全漏洞,如开放重定向攻击。因此,确保重定向过程的安全性至关重要。
        302 0
        |
        6月前
        |
        SQL 存储 安全
        Web安全-CSRF跨站请求伪造
        Web安全-CSRF跨站请求伪造
        150 4
        |
        7月前
        |
        Web App开发 安全 JavaScript
        【Azure 应用服务】App Service 通过配置web.config来添加请求返回的响应头(Response Header)
        【Azure 应用服务】App Service 通过配置web.config来添加请求返回的响应头(Response Header)
        117 0
        |
        7月前
        |
        API
        【Azure API 管理】在 Azure API 管理中使用 OAuth 2.0 授权和 Azure AD 保护 Web API 后端,在请求中携带Token访问后报401的错误
        【Azure API 管理】在 Azure API 管理中使用 OAuth 2.0 授权和 Azure AD 保护 Web API 后端,在请求中携带Token访问后报401的错误
        |
        7月前
        |
        开发框架 缓存 .NET
        并发请求太多,服务器崩溃了?试试使用 ASP.NET Core Web API 操作筛选器对请求进行限流
        并发请求太多,服务器崩溃了?试试使用 ASP.NET Core Web API 操作筛选器对请求进行限流
        295 0
        |
        9月前
        |
        JSON 前端开发 Java
        一文读Web开发 之接口后端接口、类与前端请求、拦截器编写
        一文读Web开发 之接口后端接口、类与前端请求、拦截器编写
        303 6
        |
        9月前
        |
        运维 Java 测试技术
        Spring运维之boo项目表现层测试加载测试的专用配置属性以及在JUnit中启动web服务器发送虚拟请求
        Spring运维之boo项目表现层测试加载测试的专用配置属性以及在JUnit中启动web服务器发送虚拟请求
        84 3
        |
        9月前
        |
        XML 前端开发 JavaScript
        后端请求响应和分层解耦web开发的三层架构
        后端请求响应和分层解耦web开发的三层架构
        62 0
        |
        9月前
        |
        存储 前端开发 Java
        Spring Web MVC入门(2)——请求(下)
        Spring Web MVC入门(2)——请求
        79 0

        热门文章

        最新文章