SpringBoot如何返回页面的实现方法

SpringBoot中使用Controller和页面的结合能够很好地实现用户的功能及页面数据的传递。但是在返回页面的时候竟然会出现404或者500的错误,我总结了一下如何实现页面的返回以及这里面所包含的坑。

SpringBoot中对Thymeleaf的集成已经基本完善,但在特殊情况下,并不需要或者不能使用Thymeleaf,所以分成两种情况对页面的返回进行阐述。

首先说一下这两种情况下都会发生的错误,也是新手们经常会出现的错误。

直接上代码:

@RestController
public class TestController {
    @RequestMapping("/")
    public String index() {
        return "index";
    }
}

这个代码的初衷是返回index.html页面,但是执行的结果是在页面中输出index。

原因分析:@RestController注解相当于@ResponseBody和@Controller合在一起的作用。在使用@RestController注解Controller时,Controller中的方法无法返回jsp页面,或者html,配置的视图解析器 InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。

包括在Mapping注解使用的同时使用@ResponseBody时也会出现同样的问题。

解决办法:①去除@ResponseBody或将含有Rest的注解换成对应的原始注解;

   ②不通过String返回,通过ModelAndView对象返回,上述例子可将return语句换成下面的句子:

return new ModelAndView("index");

在使用ModelAndView对象返回的时候,不需要考虑有没有@ResponseBody类似的注解。

还有一个需要注意的点:@RequestMapping中的路径一定不要和返回的页面名称完全相同,这样会报500的错误!!!!

如下面这样是不行的:

@Controller
public class TestController {
    @RequestMapping("/index")
    public String idx() {
        return "index";
    }
}

1、在不使用模板引擎的情况下:

在不使用模板引擎的情况下,访问页面的方法有两种:

1)将所需要访问的页面放在resources/static/文件夹下,这样就可以直接访问这个页面。如:

在未配置任何东西的情况下可以直接访问:

而同样在resources,但是在templates文件夹下的login.html却无法访问:

2)使用redirect实现页面的跳转

示例代码(在页面路径和上面一致的情况下):

@Controller
public class TestController {
    @RequestMapping("/map1")
    public String index() {
        return "redirect:index.html";
    }
    @RequestMapping("/map2")
    public String map2() {
        return "redirect:login.html";
    }
}

执行结果:

这说明这种方法也需要将html文件放在static目录下才能实现页面的跳转。

当然还是有终极解决方案来解决这个存放路径问题的,那就是使用springmvc的配置:

spring:
  mvc:
    view:
      suffix: .html
    static-path-pattern: /**
  resources:
    static-locations: classpath:/templates/,classpath:/static/

这样配置后,map1和map2都可以访问到页面了。

2、使用Thymeleaf模板引擎:

先将所需要的依赖添加至pom.xml

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-thymeleaf -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
    <version>2.1.6.RELEASE</version>
</dependency>

同样的页面路径下将controller代码修改成下面的代码:

@Controller
public class TestController {
    @RequestMapping("/map1")
    public String index() {
        return "index";
    }
    /** 下面的代码可以实现和上面代码一样的功能 */
    /*public ModelAndView index() {
        return new ModelAndView("index");
    }*/
    @RequestMapping("map2")
    public String map2() {
        return "login";
    }
}

执行结果:

这又说明一个问题,所需要的页面必须放在templates文件夹下。当然也可以修改,更改配置文件:

spring:
  thymeleaf:
    prefix: classpath:/static/
    suffix: .html
    cache: false #关闭缓存

更改prefix对应的值可以改变Thymeleaf所访问的目录。但好像只能有一个目录。

综上:模板引擎的使用与否都可以实现页面的访问。区别在于页面所存放的位置以及访问或返回的时候后缀名加不加的问题。

到此这篇关于SpringBoot如何返回页面的实现方法的文章就介绍到这了,更多相关SpringBoot返回页面内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • springboot返回modelandview页面的实例

    1.添加依赖 这个应该是web项目相关的jar <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- jstl JSP标准标签库 --> <dependency> <groupId>javax.servle

  • SpringBoot如何返回页面的实现方法

    SpringBoot中使用Controller和页面的结合能够很好地实现用户的功能及页面数据的传递.但是在返回页面的时候竟然会出现404或者500的错误,我总结了一下如何实现页面的返回以及这里面所包含的坑. SpringBoot中对Thymeleaf的集成已经基本完善,但在特殊情况下,并不需要或者不能使用Thymeleaf,所以分成两种情况对页面的返回进行阐述. 首先说一下这两种情况下都会发生的错误,也是新手们经常会出现的错误. 直接上代码: @RestController public cla

  • SpringBoot中定制异常页面的实现方法

    定制异常页面,可以避免用户产生恐慌心理,使得产品有更好的用户体验.今天来学习在 SpringBoot 中如何定制开发异常页面 一.历史回顾 在 SpringMVC 年代,我们的异常页面一般配置在 web.xml 文件中,如下: <!-- 配置404页面 --> <error-page> <error-code>404</error-code> <location>/error/404.html</location> </erro

  • SpringBoot定制三种错误页面及错误数据方法示例

    目录 定制错误页面 自定义 error.html 自定义动态错误页面 自定义静态错误页面 定制错误数据 1. 自定义异常处理类 2. 自定义错误属性处理工具 我们知道 Spring Boot 已经提供了一套默认的异常处理机制,但是 Spring Boot 提供的默认异常处理机制却并不一定适合我们实际的业务场景,因此,我们通常会根据自身的需要对 Spring Boot 全局异常进行统一定制,例如定制错误页面,定制错误数据等. 定制错误页面 我们可以通过以下 3 种方式定制 Spring Boot

  • Springboot实现给前端返回一个tree结构方法

    目录 1:首先我们看一下数据库的表: 这里的pid就是代表他的父节点id,如果没有父节点,那么pid就是0,上面的表就可以看作是一个tree结构,那么我们怎样去将这个tree结构返回给前端呢? 2:首先写好数据库对应的实体类和Dto层: package com.wyr.modules.example.domain; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annot

  • PHP实现模仿socket请求返回页面的方法

    本文实例讲述了PHP实现模仿socket请求返回页面的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: <?php  $url = "www.XXXX.com"; //自己做替换  $parse = parse_url($url); //对URL进行解析,返回起组成部分.  $host = $parse['host'];  $path = $parse['path'];  $port = 80;  $timeout = 80;  $fp = @fsockope

  • 微信小程序返回多级页面的实现方法

    微信小程序返回多级页面的实现方法 微信小程序开发中,返回上一页是很普遍的操作,最常见的是点击手机的返回键和点击自定义的按钮返回上一页这两种情况.点击手机的返回键我们不需要做处理,如果是自定义按钮实现返回效果,就要调用微信提供的API: wx.navigateBack(OBJECT) 也可以通过 wx.navigateBack 方法实现返回多级页面,只要设置 delta 的值就可以: //在C页面内 navigateBack,将返回A页面,delta = 1 时与 wx.navigateBack(

  • php curl获取https页面内容,不直接输出返回结果的设置方法

    使用php curl获取页面内容或提交数据, 有时候希望返回的内容作为变量储存, 而不是直接输出. 方法:设置curl的CURLOPT_RETURNTRANSFER选项为1或true. eg: $url = 'http://www.baidu.com'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); // 不要http header 加快效率 curl_setopt($curl, CURLOPT_HEADER, 0); // htt

  • 在 asp.net core 的中间件中返回具体的页面的实现方法

    前言 在 asp.net core 中,存在着中间件这一概念,在中间件中,我们可以比过滤器更早的介入到 http 请求管道,从而实现对每一次的 http 请求.响应做切面处理,从而实现一些特殊的功能 在使用中间件时,我们经常实现的是鉴权.请求日志记录.全局异常处理等等这种非业务性的需求,而如果你有在 asp.net core 中使用过 swashbuckle(swagger).health check.mini profiler 等等这样的组件的话,你会发现,这些第三方的组件往往都提供了页面,允

  • SpringBoot接口返回结果封装方法实例详解

    rest接口会返回各种各样的数据,如果对接口的格式不加约束,很容易造成混乱. 在实际项目中,一般会把结果放在一个封装类中,封装类中包含http状态值,状态消息,以及实际的数据.这里主要记录两种方式:(效果如下) 1.采用Map对象作为返回对象. /** * Http请求接口结果封装方法 * * @param object 数据对象 * @param msgSuccess 提示信息(请求成功) * @param msgFailed 提示信息(请求失败) * @param isOperate 是否操

  • Springboot配置返回日期格式化五种方法详解

    目录 格式化全局时间字段 1.前端时间格式化(不做无情人) 2.SimpleDateFormat格式化(不推荐) 3.DateTimeFormatter格式化(不推荐) 4.全局时间格式化(推荐) 实现原理分析 5.部分时间格式化(推荐) 总结 应急就这样 格式化全局时间字段 在yml中添加如下配置: spring.jackson.date-format=yyyy-MM-dd HH:mm:ss 或者 spring: jackson: ## 格式为yyyy-MM-dd HH:mm:ss date-

随机推荐