重定向_重定向过多 - CSDN
重定向 订阅
重定向(Redirect)就是通过各种方法将各种网络请求重新定个方向转到其它位置(如:网页重定向、域名的重定向、路由选择的变化也是对数据报文经由路径的一种重定向)。 展开全文
重定向(Redirect)就是通过各种方法将各种网络请求重新定个方向转到其它位置(如:网页重定向、域名的重定向、路由选择的变化也是对数据报文经由路径的一种重定向)。
信息
外文名
Redirect
方    式
301 redirect、302 redirect
做    法
将各种网络请求转到其它位置
其他定向
Linux重定向
中文名
重定向
例    如
网页重定向、域名的重定向
需要的情况
网站调整,
重定向网页定向
我们在网站建设中,时常会遇到需要网页重定向的情况:1.网站调整(如改变网页目录结构);2.网页被移到一个新地址;3.网页扩展名改变(如应用需要把.php改成.Html或.shtml)。这种情况下,如果不做重定向,则用户收藏夹或搜索引擎数据库中旧地址只能让访问客户得到一个404页面错误信息,访问流量白白丧失;再者某些注册了多个域名的网站,也需要通过重定向让访问这些域名的用户自动跳转到主站点等。
收起全文
精华内容
参与话题
  • 重定向

    千次阅读 2017-07-30 19:31:01
    1 标准输出重定向 (1)将标准输出重定向到其他终端 /dev/pts/1代表伪终端1,在伪终端1执行hostname命令(查看主机名),并将其重定向至伪终端2。 (2)将标准输出重定向到文件 cal命令用于查看日历,cal ...

    Linux下定义了三种I/O设备:

    标准输入(STDIN):用0表示,默认的标准输入设备是键盘;

    标准输出(STDOUT):用1表示,默认的标准输出设备是当前终端;

    标准错误(STDERR):用2表示,默认的标准错误输出设备是当前终端;

    I/O重定向即改变默认的位置

    1 标准输出重定向

    (1)将标准输出重定向到其他终端




    /dev/pts/1代表伪终端1,在伪终端1执行hostname命令(查看主机名),并将其重定向至伪终端2。

    (2)将标准输出重定向到文件


    cal命令用于查看日历,cal 2017 > /app/cal.log 将2017年的日历重定向到app目录下的cal.log文件。

    总结: hostname与cal 2017 都是可正确执行的命令,若不重定向,会产生标准输出,即将两命令执行的结果输出到当前终端,所以a、b中实际上都省略了1,即写成hostname 1> /dev/pts2或cal 2017 1> /app/cal.log 也可以,因为1代表标准输出,>是重定向符号。

    2 标准错误重定向


    在根目录下不存在err文件或目录,所以ls  /err的结果是标准错误:

    若不重定向,会将其结果输出至当前终端,如(1)所示;ls  /err 1>/app/err.log 中的1>表示将标准输出重定向至/app/err.log,但是ls /err执行的结果只有标准错误,没有标准输出,由于未对标准错误重定向,所以仍然将标准错误重定向至当前终端,如(2)所示

    ls  /err 2>/app/err.log中的2表示标准错误,该命令实现了将标准错误重定向至/app/log文件,所以没有在当前终端打印错误提示,而是将错误提示保存到/app/log文件中,如(3)所示

    3 既有标准输出, 又有标准错误,将二者重定向至同一文件


    ls /boot的执行结果是正确的,若不重定向,会将其结果输出至当前终端,如(1)所示

    ls /err的执行结果是错误的,若不重定向,也会将其结果输出至当前终端如(2)所示


    (1)ls /boot /err > /app/all.log 2>&1中的2>&1表示将标准错误转化为标准输出,然后>将转化后所得的标准输出重定向到/app下的all1.log文件,如(1)所示;

    (ls /boot /err 2>&1) > /app/all1.log 与ls /boot /err > /app/all.log 2>&1等价如(2)所示


    (2)ls /boot /err 2> /app/all3.log 1>&2 中的1>&2表示将标准输出转化为标准错误,然后2>将转化后所得的标准错误重定向到/app下的all3.log文件,如(1)所示;

    (ls /boot /err 1>&2) 2> /app/all4.log与ls /boot /err 2> /app/all3.log 1>&2等价,如(2)所示


    (3) ls /boot /err &> /app/all5.log中的&>表示将标准输出和标准错误合并为同一个数据流后再进行重定向,如(1)所示

      ls /boot /err >& /app/all5.log /app/all5.log与 ls /boot /err &> /app/all5.log等价,如(2)所示

    4 标准输入重定向


    cat命令用于查看文本文件,既有标准输入又有标准输出。输入cat并回车后光标会移至下一行等待接收来自键盘的标准输入,并将其输出至标准输出设备即当前终端。图中黄色线条标识部分即cat的标准输出。


    cat  /etc/issue命令用于查看/etc/issue文件的内容,其中定义了系统登录成功后的提示信息。用/etc/issue文件代替键盘做标准输入,即cat从/etc/issue接收标准输入,然后输出至标准输出即当前终端。


    /etc/issue文件代替键盘做标准输入,即cat从/etc/issue接收标准输入,然后将标准输出重定向到/app/issue文件,所以 cat < /etc/issue > /app/issue执行完后当前终端不显示任何内容,用 cat  /app/issue 可查看重定向到该文件下的内容。

    展开全文
  • 转发和重定向的区别和使用

    万次阅读 多人点赞 2019-03-19 15:26:24
    页面的跳转:转发 转发的原理 转发的方法 ...在Servlet中实现页面的跳转有两种方式:转发和重定向 什么是转发 概念 由服务器端进行的页面跳转 原理图 转发的方法 案例 需求 ​ 实现从OneServle...

    页面的跳转:转发

    1. 转发的原理
    2. 转发的方法

    疑问

    • 能否在OneServlet中保存值到请求域中,在另一个TwoServlet中打印出来?

      如果是不同的请求,不能取出来。如果是同一次请求是可以取出来的。
      

    转发与重定向的作用

    在Servlet中实现页面的跳转有两种方式:转发和重定向

    什么是转发

    概念

    由服务器端进行的页面跳转

    原理图

    在这里插入图片描述
    转发的方法
    在这里插入图片描述

    案例

    需求

    ​ 实现从OneServlet中转发到TwoServlet

    步骤

    1. OneServlet向请求域中添加了一个键和值,转发给TwoServlet
    2. TwoServlet就从请求域中取出键和值,打印到浏览器上。

    效果

    在这里插入图片描述

    代码

    OneServlet
    package com.itheima.servlet;
    
    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.io.IOException;
    import java.io.PrintWriter;
    
    /**
     与请求域相关的方法
     */
    @WebServlet(name = "Demo6OneServlet", urlPatterns = "/one")
    public class Demo6OneServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("text/html;charset=utf-8");
            PrintWriter out = response.getWriter();
            out.print("这是One<br/>");
            //向请求域中添加键和值
            request.setAttribute("name","Jack");
            request.setAttribute("age", 20);  //整数类型
            String name = (String) request.getAttribute("name");
            int age = (int) request.getAttribute("age");
            //从请求域中取出值
            out.print("名字:" + name + "<br/>");
            out.print("年龄:" +  age );
            out.print("<hr/>");
            //删除其中一个
            request.removeAttribute("age");
    
            //从请求域中取出值,直接输出Object对象
            out.print("名字:" + request.getAttribute("name") + "<br/>");
            out.print("年龄:" +  request.getAttribute("age") );
    
            System.out.println("这是one");
            //开始转发,参数是:要跳转到的地址
            request.getRequestDispatcher("/two").forward(request, response);
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doPost(request, response);
        }
    }
    
    
    TwoServlet
    package com.itheima.servlet;
    
    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.io.IOException;
    import java.io.PrintWriter;
    
    //从请求域中取出值
    @WebServlet(name = "Demo7TwoServlet", urlPatterns = "/two")
    public class Demo7TwoServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("text/html;charset=utf-8");
            PrintWriter out = response.getWriter();
            out.print("这是Two,从请求域中取出one中的值:" + request.getAttribute("name"));
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doPost(request, response);
        }
    }
    
    

    转发的特点

    1. 地址栏不发生变化,显示的是上一个页面的地址
    2. 请求次数:只有1次请求
    3. 根目录:http://localhost:8080/项目地址/,包含了项目的访问地址
    4. 请求域中数据不会丢失

    转发使用哪个方法?

    request.getRequestDispatcher("/地址").forward(request, response);
    

    页面的跳转:重定向

    1. 重定向原理
    2. 重定向的方法

    什么是重定向

    概念

    由浏览器端进行的页面跳转

    原理图

    在这里插入图片描述
    重定向方法
    在这里插入图片描述

    重定向案例

    需求

    从OneServlet重定向到TwoServlet

    步骤

    1. 在OneServlet中向请求域中添加键和值
    2. 使用重定向到TwoServlet,在TwoServlet中看能否取出请求域的值

    效果

    在这里插入图片描述

    代码

    OneServlet
    package com.itheima.servlet;
    
    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.io.IOException;
    import java.io.PrintWriter;
    
    /**
     与请求域相关的方法
     */
    @WebServlet(name = "Demo6OneServlet", urlPatterns = "/one")
    public class Demo6OneServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("text/html;charset=utf-8");
            PrintWriter out = response.getWriter();
            out.print("这是One<br/>");
            //向请求域中添加键和值
            request.setAttribute("name","Jack");
            request.setAttribute("age", 20);  //整数类型
            String name = (String) request.getAttribute("name");
            int age = (int) request.getAttribute("age");
            //从请求域中取出值
            out.print("名字:" + name + "<br/>");
            out.print("年龄:" +  age );
            out.print("<hr/>");
            //删除其中一个
            request.removeAttribute("age");
    
            //从请求域中取出值,直接输出Object对象
            out.print("名字:" + request.getAttribute("name") + "<br/>");
            out.print("年龄:" +  request.getAttribute("age") );
    
            System.out.println("这是one");
            //开始转发,参数是:要跳转到的地址
            //request.getRequestDispatcher("/two").forward(request, response);
    
            //使用重定向
            response.sendRedirect("two");
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doPost(request, response);
        }
    }
    
    
    TwoServlet
    package com.itheima.servlet;
    
    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.io.IOException;
    import java.io.PrintWriter;
    
    //从请求域中取出值
    @WebServlet(name = "Demo7TwoServlet", urlPatterns = "/two")
    public class Demo7TwoServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("text/html;charset=utf-8");
            PrintWriter out = response.getWriter();
            out.print("这是Two,从请求域中取出one中的值:" + request.getAttribute("name"));
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doPost(request, response);
        }
    }
    
    

    重定向的特点

    1. 地址栏:显示新的地址
    2. 请求次数:2次
    3. 根目录:http://localhost:8080/ 没有项目的名字
    4. 请求域中的数据会丢失,因为是2次请求

    疑问

    1. 问:什么时候使用转发,什么时候使用重定向?

      如果要保留请求域中的数据,使用转发,否则使用重定向。

      以后访问数据库,增删改使用重定向,查询使用转发。

    2. 问:转发或重定向后续的代码是否还会运行?

      无论转发或重定向后续的代码都会执行

    小结:重定向和转发的区别

    区别 转发forward() 重定向sendRedirect()
    根目录 包含项目访问地址 没有项目访问地址
    地址栏 不会发生变化 会发生变化
    哪里跳转 服务器端进行的跳转 浏览器端进行的跳转
    请求域中数据 不会丢失 会丢失
    展开全文
  • HTTP的重定向

    千次阅读 2018-08-15 16:52:35
    URL 重定向,也称为 URL 转发,是一种当实际资源,如单个页面、表单或者整个 Web 应用被迁移到新的 URL 下的时候,保持(原有)链接可用的技术。HTTP 协议提供了一种特殊形式的响应—— HTTP 重定向(HTTP redirects...

        URL 重定向,也称为 URL 转发,是一种当实际资源,如单个页面、表单或者整个 Web 应用被迁移到新的 URL 下的时候,保持(原有)链接可用的技术。HTTP 协议提供了一种特殊形式的响应—— HTTP 重定向(HTTP redirects)来执行此类操作,该操作可以应用于多种多样的目标:网站维护期间的临时跳转,网站架构改变后为了保持外部链接继续可用的永久重定向,上传文件时的表示进度的页面,等等。

        在 HTTP 协议中,重定向操作由服务器通过发送特殊的响应(即 redirects)而触发。HTTP 协议的重定向响应的状态码为 3xx 。浏览器在接收到重定向响应的时候,会采用该响应提供的新的 URL ,并立即进行加载;大多数情况下,除了会有一小部分性能损失之外,重定向操作对于用户来说是不可见的。

    不同类型的重定向映射可以划分为三个类别:永久重定向、临时重定向和特殊重定向。

     

    Link to section永久重定向

    这种重定向操作是永久性的。它表示原 URL 不应再被使用,而应该优先选用新的 URL。搜索引擎机器人会在遇到该状态码时触发更新操作,在其索引库中修改与该资源相关的 URL 。

    编码 含义 处理方法 典型应用场景
    301 Moved Permanently GET 方法不会发生变更,其他方法有可能会变更为 GET 方法。[1] 网站重构。
    308 Permanent Redirect 方法和消息主体都不发生变化。 网站重构。with non-GET links/operations(?)

    [1] 该规范无意使方法发生改变,但在实际应用中用户代理会这么做。 308 状态码被创建用来消除在使用非 GET 方法时的歧义行为。

    Link to section临时重定向

    有时候请求的资源无法从其标准地址访问,但是却可以从另外的地方访问。在这种情况下可以使用临时重定向。搜索引擎不会记录该新的、临时的链接。在创建、更新或者删除资源的时候,临时重定向也可以用于显示临时性的进度页面。

    编码 含义 处理方法 典型应用场景
    302 Found GET 方法不会发生变更,其他方法有可能会变更为 GET 方法。[2] 由于不可预见的原因该页面暂不可用。在这种情况下,搜索引擎不会更新它们的链接。
    303 See Other GET 方法不会发生变更,其他方法会变更为 GET 方法(消息主体会丢失)。 用于PUTPOST 请求完成之后进行页面跳转来防止由于页面刷新导致的操作的重复触发。
    307 Temporary Redirect 方法和消息主体都不发生变化。 由于不可预见的原因该页面暂不可用。在这种情况下,搜索引擎不会更新它们的链接。当站点支持非 GET 方法的链接或操作的时候,该状态码优于 302 状态码。

    [2] 该规范无意使方法发生改变,但在实际应用中用户代理会这么做。 307 状态码被创建用来消除在使用非 GET 方法时的歧义行为。

    Link to section特殊重定向

    除了上述两种常见的重定向之外,还有两种特殊的重定向。304 (Not Modified,资源未被修改)会使页面跳转到本地缓存的版本当中(该缓存已过期(?)),而 300 (Multiple Choice,多项选择) 则是一种手工重定向:以 Web 页面形式呈现在浏览器中的消息主体包含了一个可能的重定向链接的列表,用户可以从中进行选择。

    编码 含义 典型应用场景
    300 Multiple Choice 不会太多:所有的选项在消息主体的 HTML 页面中列出。也可以返回 200 OK 状态码。
    304 Not Modified 缓存刷新:该状态码表示缓存值依然有效,可以使用。

     

    应用场景

    有以下几种应用场景可以使用重定向机制,但是需要注意应该尽可能地限制其使用数量,因为每一次重定向都会带来性能上的开销。

    Link to section域名别称

    理想情况下,一项资源只有一个访问位置,也就是只有一个 URL 。但是由于种种原因,需要为资源设定不同的名称(即不同的域名,例如带有和不带有 www 前缀的URL,以及简短易记的 URL 等)。在这种情况下,实用的方法是将其重定向到那个实际的(标准的)URL,而不是复制资源。

    在以下几种情况下可以使用域名别称:

    • 扩大站点的用户覆盖面。一个常见的场景是,假如站点位于  www.example.com  域名下,那么通过  example.com 也应该可以访问到。这种情况下,可以建立从 example.com 的页面到  www.example.com 的重定向映射。此外还可以提供常见的同义词,或者该域名容易导致的拼写错误的域名别称。
    • 迁移到另外一个域名。例如,公司改名后,你希望用户在搜索旧名称的时候,依然可以访问到应用了新名称的站点。
    • 强制使用 HTTPS 协议。对于 HTTP 版本站点的请求会被重定向至采用了 HTTPS 协议的版本。

    Link to section保持链接有效

    当你重构 Web 站点的时候,资源的 URL 会发生改变。即便是你可以更新站点内部的链接来适应新的命名体系,但无法控制被外部资源使用的 URL 。你并不想因此而使旧链接失效,因为它们会为你带来宝贵的用户(并且帮助优化你的SEO),所以需要建立从旧链接到新链接的重定向映射。

    即便是这项技术可以同样应用于内部链接,但是应该尽量避免内部重定向映射。重定向机制会带来相当大的性能开销(相当于一次额外的请求),所以如果你可以通过修复链接来避免的话,那么就应该将其修复。

    Link to section对于不安全请求的临时响应

    不安全(Unsafe)请求会修改服务器端的状态,应该避免用户无意的重复操作。一般地,你并不想要你的用户重复发送  PUTPOST 或 DELETE 请求。假如你仅仅为该类请求返回响应的话,简单地点击刷新按钮就会(可能会有一个确认信息)导致请求的重复发送。

    在这种情况下,服务器可以返回一个 303 (See Other) 响应,其中含有合适的响应信息。如果刷新按钮被点击的话,只会导致该页面被刷新,而不会重复提交不安全的请求。

    Link to section对于耗时请求的临时响应

    一些请求的处理会需要比较长的时间,比如有时候 DELETE 请求会被安排为稍后处理。在这种情况下,会返回一个 303 (See Other)  重定向响应,该响应链接到一个页面,表示请求的操作已经被列入计划,并且最终会通知用户操作的进展情况,或者允许用户将其取消。

     

    转载: https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Redirections#%E5%8E%9F%E7%90%86

    展开全文
  • 转发和重定向区别详解 作为一名程序员,特别是java web开发的程序员,在使用servlet/jsp的时候,我们必须要知道实现页面跳转的两种方式的区别和联系:即转发和重定向的区别。 1、RequestDispatcher.forward方法...

    转发和重定向区别详解

            作为一名java web开发的程序员,在使用servlet/jsp的时候,我们必须要知道实现页面跳转的两种方式的区别和联系:即转发和重定向的区别。

          1、request.getRequestDispatcher().forward()方法,只能将请求转发给同一个WEB应用中的组件;而response.sendRedirect() 方法不仅可以重定向到当前应用程序中的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。

    如果传递给response.sendRedirect()方法的相对URL以“/”开头,它是相对于整个WEB站点的根目录;如果创建request.getRequestDispatcher()对象时指定的相对URL以“/”开头,它是相对于当前WEB应用程序的根目录。

          2、重定向访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL;请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。

          3、HttpServletResponse.sendRedirect方法对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求,这个过程好比有个绰号叫“浏览器”的人写信找张三借钱,张三回信说没有钱,让“浏览器”去找李四借,并将李四现在的通信地址告诉给了“浏览器”。于是,“浏览器”又按张三提供通信地址给李四写信借钱,李四收到信后就把钱汇给了“浏览器”。

    由此可见,重定向的时候,“浏览器”一共发出了两封信和收到了两次回复,“浏览器”也知道他借到的钱出自李四之手。

    request.getRequestDispatcher().forward()方法在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。这个过程好比绰号叫“浏览器”的人写信找张三借钱,张三没有钱,于是张三找李四借了一些钱,甚至还可以加上自己的一些钱,然后再将这些钱汇给了“浏览器”。

    由此可见,转发的时候,“浏览器”只发 出了一封信和收到了一次回复,他只知道从张三那里借到了钱,并不知道有一部分钱出自李四之手。

           4、request.getRequestDispatcher().forward()方法的调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程;

    而response.sendRedirect()方法调用者与被调用者使用各自的request对象和response对象,它们属于两个独立的访问请求和响应过程。对于同一个WEB应用程序的内部资源之间的跳转,特别是跳转之前要对请求进行一些前期预处理,并要使用HttpServletRequest.setAttribute方法传递预处理结果,那就应该使用request.getRequestDispatcher().forward()方法。不同WEB应用程序之间的重定向,特别是要重定向到另外一个WEB站点上的资源的情况,都应该使用response.sendRedirect()方法。

            5、无论是request.getRequestDispatcher().forward()方法,还是response.sendRedirect()方法,在调用它们之前,都不能有内容已经被实际输出到了客户端。如果缓冲区中已经有了一些内容,这些内容将被从缓冲区中。

    以上五点的论述来源于:点击查看原文论述

    转发和重定向的图解

    两种跳转获得对象的方式

    //获得转发对象getRequestDispatcher()
    HttpServletRequest(httpServletRequest).getRequestDispatcher
    ServletContext.getRequestDispatcher();
    
    //获得重定向对象sendRedirect()
    HttpServletResponse(httpServletResponse).sendRedirect();

    转发和跳转的小结

          1、转发使用的是getRequestDispatcher()方法;重定向使用的是sendRedirect();

          2、转发:浏览器URL的地址栏不变。重定向:浏览器URL的地址栏改变;

          3、转发是服务器行为,重定向是客户端行为;

          4、转发是浏览器只做了一次访问请求。重定向是浏览器做了至少两次的访问请求;

          5、转发2次跳转之间传输的信息不会丢失,重定向2次跳转之间传输的信息会丢失(request范围)。

    转发和重定向的选择

          1、重定向的速度比转发慢,因为浏览器还得发出一个新的请求,如果在使用转发和重定向都无所谓的时候建议使用转发。

          2、因为转发只能访问当前WEB的应用程序,所以不同WEB应用程序之间的访问,特别是要访问到另外一个WEB站点上的资源的情况,这个时候就只能使用重定向了。

    转发和重定向的应用场景

           在上面我已经提到了,转发是要比重定向快,因为重定向需要经过客户端,而转发没有。有时候,采用重定向会更好,若需要重定向到另外一个外部网站,则无法使用转发。另外,重定向还有一个应用场景:避免在用户重新加载页面时两次调用相同的动作。

           例如,当提交产品表单的时候,执行保存的方法将会被调用,并执行相应的动作;这在一个真实的应用程序中,很有可能将表单中的所有产品信息加入到数据库中。但是如果在提交表单后,重新加载页面,执行保存的方法就很有可能再次被调用。同样的产品信息就将可能再次被添加,为了避免这种情况,提交表单后,你可以将用户重定向到一个不同的页面,这样的话,这个网页任意重新加载都没有副作用;

           但是,使用重定向不太方便的地方是,使用它无法将值轻松地传递给目标页面。而采用转发,则可以简单地将属性添加到Model,使得目标视图可以轻松访问。由于重定向经过客户端,所以Model中的一切都会在重定向时丢失。但幸运的是,在Spring3.1版本以后,我们可以通过Flash属性,解决重定向时传值丢失的问题。

           要使用Flash属性,必须在Spring MVC的配置文件中添加一个<annotation-driven/>。然后,还必须再方法上添加一个新的参数类型:org.springframework.web.servlet.mvc.support.RedirectAttributes。

           如下所示:

    @RequestMapping(value="saveProduct",method=RequestMethod.POST)
    public String saveProduct(ProductForm productForm,RedirectAttributes redirectAttributes){
    
         //执行产品保存的业务逻辑等
      
         //传递参数
           redirectAttributes.addFlashAttribute("message","The product is saved successfully");
       
         //执行重定向
          return "redirect:/……";
    }

     

     

     

     

    展开全文
  • 重定向的作用及其意义

    千次阅读 2019-06-28 09:10:04
    (作者:苦行者;撰写时间:2019年6月28日) 1、意义 我们都知道在进入主页面之前要走“登录”这一步操作,登录的目的就是为了限制一些没有“身份”的人登录和操作主页面,登录页面是主页面要求设置的一道“关卡”。...
  • 转载自:... 脚本是: nohup /mnt/Nand3/H2000G >/dev/null 2>&1 & 对于& 1 更准确的说应该是文件描述符 1,而1 一般代表的就是STDOUT_FILENO,实际上这...
  • HTTP的重定向和跳转

    千次阅读 2019-07-08 23:12:32
    301:俗称“永久重定向”,原URI已经“永久”性地不存在了,今后的所有请求都必须改用新的URI. 302: 俗称“临时重定向”,原URI处于“临时维护”状态,新的URI是起“顶包”作用的临时工。 303 See Other: 类似...
  • 如何重定向到另一个网页?

    万次阅读 2018-05-16 12:05:24
    How can I redirect the user from one page to another using jQuery or pure JavaScript? 如何使用jQuery或纯Ja
  • 什么是重定向?请求流程及其原理

    千次阅读 2019-06-26 10:52:55
    请求流程 1、浏览器发送请求: ... 2、服务器收到请求,但是服务器因为某种原因不会让你访问url1,于是返回: ...3、浏览器根据status=301状态码判断此次请求需要重定向,于是重新向url2发送请求 ...
  • 重定向实现的三种方法

    千次阅读 2018-06-22 00:54:49
    段(Windows中的httpt.conf或Linux中的apache2.conf文件中配置)三、使用php或者其他脚本语言实现(只能实现外部重定向)一、通过.htaccess实现 cmd中创建.htaccess(因为目录不能创建):进入到网站根目录,输入 ...
  • 命令行的输出重定向和错误重定向很简单,在命令参数后直接使用“>>”(输出重定向)或“2>”(错误重定向)即可。例如将执行cmdname命令(带参数param)的结果输出到当前路径下的output.txt文件中,若出错则将错误信息...
  • LTE 重定向和切换的不同

    万次阅读 2014-02-28 12:59:03
    所谓的重定向就是:LTE中的重定向是指系统通过RRCConnectionRelease消息中的redirectedCarrierInfo指示UE在离开连接态后要尝试驻留到指定的系统/频点 重定向有两种方式,基于测量的和基于非测量的。基于非
  • 对于这种重定向接口,查看控制台可以看到,其重定向后的地址在Response Headers中的Location属性中: 查阅文档可知HttpURLConnection有如是方法: 其父类URLConnection有如是方法: 显然,可以在第一个方法中设置...
  • Spring boot重定向请求

    万次阅读 2018-09-08 10:08:17
    重定向 Redirect 表示重定向到一个地址 ThymeleafViewResolver Spring MVC的视图解析器 作用,根据视图名,得到视图对象 createView 创建视图对象 viewName,方法的返回值 得到视图名 进行一些判断 ...
  • 把标准输出重定向到一个文件中 command &amp;amp;gt;&amp;amp;gt; filename 把标准输出重定向到一个文件中(追加) command 1 &amp;amp;gt; fielname 把标准输出重定向到一个文件中 command &...
  • shell 错误输出重定向的正确方式

    万次阅读 2018-12-09 17:25:29
    Linux 的输出重定向很容易做到这点. 但有一次发现了一个奇怪的现象 # 重定向正确 $ ls nosuchfile 2&gt;logfile $ ls nosuchfile 1&gt;logfile 2&gt;&amp;1 # 重定向不正确 $ ls nosuchfi...
  • MySQL查询结果重定向到文件中

    千次阅读 2011-08-11 10:53:17
    MySQL查询结果重定向到文件中 select col1,col2 into outfile 'c:\t.txt' from tablename
  • adb logcat 重定向到文件

    千次阅读 2014-01-24 23:17:07
    adb logcat ->"D:\android project\debug_log\log.log
  • 如题spring mvc controller 怎么指向一个外网页面,并且是POST请求,还带了一些参数及值到那个页面。
  • Java-重定向(redirect)

    万次阅读 2019-06-28 17:54:19
    JavaEE-重定向(redirect) 在Java代码里: response.sendRedirect("test.jsp"); 原理: 重定向是一个客户端行为,用户请求到达服务器之后,服务器返回响应,HTTP状态码置为302,并将转发的页面保存在响应头中的...
1 2 3 4 5 ... 20
收藏数 450,185
精华内容 180,074
关键字:

重定向