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

复制代码

org.springframework.boot spring-boot-starter-thymeleaf 2.1.6.RELEASE 复制代码 同样的页面路径下将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如何返回页面相关推荐

  1. 关于SpringBoot如何返回视图

    关于SpringBoot 如何返回一个视图页面(例如JSP) 首先需要在配置文件中配置这一段 spring:     mvc:     view:       prefix: /pages/     ...

  2. SpringBoot 项目 返回时间 日期、格式不正确 解决办法

    文章目录 SpringBoot 项目返回时间格式不正确 解决办法 1.遇到问题 2.解决方法 (1)问题所在 (2)如何解决 (3)效果 SpringBoot 项目返回时间格式不正确 解决办法   今 ...

  3. 返回页面顶部最简单方法

    返回页面顶部最简单方法 <a href="#">返回页面顶部</a>

  4. springboot 接口返回数据时 net.sf.json.JSONNull[“empty“]) 异常

    springboot 接口返回数据时 net.sf.json.JSONNull["empty"]) 异常 参考文章: (1)springboot 接口返回数据时 net.sf.js ...

  5. 如何通过HTML标记或JS代码实现跳转返回页面顶部

    本文介绍三款简单的返回页面顶部代码,可以使用简单的HTML锚标记,也可使用JavaScript Scroll函数动态返回,其它的还有悬浮脚本等有点复杂了,本文不再介绍,大家根据自己需要选择其中的一种即 ...

  6. php实现返回界面,PHP实现模仿socket请求返回页面的方法

    本文实例讲述了PHP实现模仿socket请求返回页面的方法.分享给大家供大家参考.具体实现方法如下: $url = "www.XXXX.com"; //自己做替换 $parse = ...

  7. 迅速返回页面顶部代码

    <迅速返回页面顶部代码> <DIV style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; FILTER: p ...

  8. 网站安全狗”响应内容保护“网页错误返回页面优化功能介绍

    网站安全狗最新版本(主程序版本号:3.2.08157)在"资源保护"模块多了一个功能叫做:响应内容保护.如下图所示: <ignore_js_op> 该模块的主要功能是, ...

  9. Thinkphp5中异常处理不返回页面返回Json格式的字符串

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/xiaopan233/article/d ...

最新文章

  1. shiro系列二、身份验证和授权
  2. 高铁订票系统css,高铁订票系统-数据库系统设计.pptx
  3. 容器技术标准化大统一,首个开放容器标准 OCI 1.0 正式发布
  4. 广西工学院c语言试题答案,广西工学院的C语言考试试题
  5. Mysql通过存储过程批量插入数据
  6. 20个开源Flutter项目推荐
  7. 进阶之路 | 奇妙的Activity之旅
  8. ubuntu 22.04设置字体为Garuda(mac字体Lucida Grande的开源替代)
  9. VUE实现简易todos
  10. 文字logo设计的作用
  11. 计算机科学基础大熊猫,大学实验室长什么样? 四川南充300多名小朋友走进西华师大感受生命与科学...
  12. python关于图像去雾
  13. 智能网联汽车信息安全学术研究现状
  14. 安全审计与安全管理平台的区别与联系
  15. FileZilla报错严重文件传输错误 550permission denied
  16. 抖音短视频如何添加抖音小程序;个人与企业该怎么运营小程序。
  17. iphone 开发之过滤html标签
  18. 主要国家/地区高端人才培育措施
  19. JavaScript实现深拷贝
  20. 音频处理软件:GoldWave,太强大了,批量处理音频

热门文章

  1. 人工智能应用实战系列-如何在新闻推荐中使用迁移学习
  2. tableau必知必会之妙用 Lookup 函数同时跨行跨列取数
  3. 朴素贝叶斯(NaiveBayes)算法总结
  4. 基于云计算的海量数据挖掘
  5. LeetCode题组:第914题-卡牌分组
  6. 虚拟机安装多了,怎么删除?
  7. python字符编码导致dict中key不同
  8. 婚姻里的潜规则:你的男人也嫌你穷【转】
  9. 机器学习实战读书笔记--k邻近算法KNN
  10. 使用JNA解决自动化测试无法做密码输入操作的问题