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请求下的页面跳转只能交给前端去实现。

     
  • 相关阅读:
    javascript中的预编译问题
    五环
    两列布局
    定位以及z-index
    [vijos1234]口袋的天空<最小生成树>
    [讲解]prim算法<最小生成树>
    [noip模拟]B<构造>
    [JZOJ5343]健美猫<模拟>
    [noip模拟]心<并查集>
    [noip模拟]种花<快速幂+结论>
  • 原文地址:https://www.cnblogs.com/momoweiduan/p/9606324.html
Copyright © 2011-2022 走看看