zoukankan      html  css  js  c++  java
  • Spring boot 页面跳转详解

    今天处理Springboot统一异常拦截的时候,遇到了页面跳转的问题,折腾了半天才大致弄明白了其中的坑坑洼洼。

    有三个方面的问题需要注意:

    一.jar包依赖:Springboot有自己默认的模板引擎。一定要引用相应的依赖包。我就是没引用,导致一直无法跳转。

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    

    二.注解:@ResponseBody

      在@Controller 控制层,是否为请求地址添加该注解也是影响跳转是否成功的因素。@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,然后直接输出到页面,并不会走视图处理器。

    例如1:

    @RequestMapping("/tiaozhuan.htm")
    @responseBody
    public ModelAndView tiaozhuan() { ModelAndView view = new ModelAndView("/403.html"); return view; }

    GET请求:http://localhost:9999/tiaozhuan.htm ;加不加@responseBody都可以正常地访问403.html页面(springboot默认访问 src/main/resources 下的 templates文件夹目录)

    例如2:

    @RequestMapping("/tiaozhuan.htm")
    public String tiaozhuan() {        
        return "/403.html";
    }

    GET请求:http://localhost:9999/tiaozhuan.htm ;不加@responseBody,可以正常访问,加上则访问的内容为:/403.html

    例如3:

    @RequestMapping("/tiaozhuan.htm")
    public String tiaozhuan() {
        return "redirect:/403.html";
    }

    GET请求:http://localhost:9999/tiaozhuan.htm ;不加@responseBody,可以正常访问(该种为重定向,默认目录为src/main/resources 下的 static文件夹目录);加上           @responseBody则访问的内容为:/403.html

    三.post与get请求:post请求与get请求也会有差别

      问题:使用Ajax向SpringMVC中Controller层发送POST请求,无论我们使用return "index.jsp"、转发、重定向还是 ModelAndView,都无法解决页面跳转的问题。

      原因:Ajax实际上就是通过XMLHttpRequest来发送请求对象向服务器发送异步请求,从服务器获取数据,然后使用JS来操作DOM而更新页面。服务器端返回的是纯文本流,可以是xml格式,html格式,js格式,也可以是字符串格式。但是客户端获取ajax异步获取结果后,不是直接显示在页面上,而是必须要先由js处理,完成之后才能显示在页面。当Ajax请求后,返回的只能是字符流,不是页面。<详细链接:https://www.cnblogs.com/boycelee/p/6243646.html>

    例如1:
    @RequestMapping("/tiaozhuan.htm")
    public ModelAndView tiaozhuan() {
        ModelAndView view = new ModelAndView("/403.html");
        return view;
    }

    POST请求:http://localhost:9999/tiaozhuan.htm ;ajax报错,但是http请求成功。但是无法跳转页面。

    例如2:
    @RequestMapping("/tiaozhuan.htm")
    public String tiaozhuan() {
        return "redirect:/403.html";
    }

    POST请求:http://localhost:9999/tiaozhuan.htm ;ajax报错304,并且无法跳转界面

      所以,当Ajax的post请求后,返回的只能是字符流,不是页面,无法实现跳转功能。

    总结:在springmvc框架下,在前端ajax的post请求下,后端是无法实现页面跳转的,只有使用get请求才能实现跳转。所以post请求下的页面跳转只能交给前端去实现。

     
  • 相关阅读:
    Easy-Mock模拟get接口和post接口实例
    本地部署Easy Mock
    用matplotlib和pandas绘制股票MACD指标图,并验证化交易策略
    向大家介绍我的新书:《基于股票大数据分析的Python入门实战》
    在windows环境里,用Docker搭建Redis开发环境(新书第一个章节)
    谈谈最近副业挣钱的感受,一要形成体系,二要找平台加持
    进大厂也就这回事,工作后2到3年进大厂操作指南
    最近录制视频挣钱的经过和体会
    以外派的身份进大厂,或许条程序员升级的途径
    面试中更多会考核相关技能的项目经验——再论程序员该如何准备面试
  • 原文地址:https://www.cnblogs.com/momoweiduan/p/9606324.html
Copyright © 2011-2022 走看看