SpringMvc如何进行转发和重定向

转发和重定向是页面跳转的二种实现方式

转发(forward):客户端发出请求,服务器接收到该请求,并直接做出相应的处理后进行页面跳转(在服务器端直接完成)。

重定向(redirect):客户端先发出请求,服务器接收到该请求,接收到之后并不直接做处理,而是在返回给游览器,在让游览器发出一次请求到服务器端,并找到需要处理的页面,找到之后在返回给客户端(游览器来完成)。

通俗的来说 : 比如你今天没有钱吃饭了 ,你向张三借钱,张三摸摸空荡荡的口袋,发现自己并没有多余的钱借给你,此时张三想到了李四,李四这个小逼崽子家里昨天刚拆迁,钱全部打到他卡里了,然后张三一个电话打过去说有急事借我点钱,然后张三吧从李四那借来的钱给你,这个操作就相当于转发(最终目的只找了张三,张三给你完成了借钱的操作)。
好又有一天,你有花没钱了,你又去找张三借,可是张三想起来你一次你借我的钱没还,搞的我自己从口袋掏的钱补给李四的,不知道这个小逼崽子什么时候能还,这时张三就不想给你去借,他就和你说,我吧李四的电话给你,你自己打电话去借,这操作就相当于重定向(最终找了二个人,先找的张三,张三发现上一次借我的钱都没有还,就把李四的电话给你,让你在去找李四借,最终找了二个人)。
借钱人相当于游览器,发出请求,而张三李四相当于服务器,给你完成借钱操作。

转发和重定向的区别:

  1. 转发是服务器行为,只需一次跳转,用户看不到url地址上的变化。重定向是游览器端的行为,需要进行二次跳转,用户能看到url地址上的变化。
  2. 转发的速度比重定向的速度相对要高,因为转发只需要做一次请求,而重定向需要做二次请求。
  3. 转发能够获取request作用域中的数据,因为他只发出了一次请求,而重定向无法获取request中的数据 ,因为他发出了二次请求,每一次请求对应着一次新的request
  4. 转发只能访问当前服务器中的数据,而重定向可以访问任意服务器中的数据
  5. 转发不能解决数据的重复提交问题(就是能按F5进行刷新操作),而重定向能解决数据的重复提交。

转发和重定向语句
原生转发:request.getRequestDispatcher("路径").forward(request, response);

原生重定向:response.sendRedirect("路径");

SpringMvc转发:forward:/路径

SpringMvc重定向:redirect:/路径

SpringMvc转发和重定向注意点 :
在利用SpringMvc中使用转发和重定向他会自动跳过视图解析器,它是直接从项目的跟目录中开始查找指定页面。

案例
先演示一下错误案例 看他是否会调高视图解析器

首页
在这里插入图片描述
控制器类

@Controller
public class UrlController
{

    /*错误演示*/
    @RequestMapping("/handle0")
    public String handle0(){
        System.out.println("handle0运行");
        /*
        错误演示
            视图解析器:
            <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
               <property name="prefix" value="/WEB-INF/pages/"></property>
                <property name="suffix" value=".jsp"/>
            </bean>

        如果经过了视图解析器按到理会找到/WEB-INF/pages/hello.jsp页面
        * */
        return "forward:/hello";
    }


    @RequestMapping("/handle1")
    public String handle1(){
        System.out.println("handle1运行");
        //  转发
        return "forward:/hello.jsp";
    }


    @RequestMapping("/handle2")
    public String handle2(){
        System.out.println("handle2运行");
        //  重定向
        return "redirect:/hello.jsp";
    }
}

在这里插入图片描述
在这里插入图片描述
我们发现在当我们去掉了forward之后他就会自动解析
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
正确案例

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值