SpringMVC与SpringBoot返回静态页面遇到的问题
1、SpringMVC静态页面响应
package com.sv.controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* 页面展示
* @author jixh
*
*/
@Controller
public class PageController { /**
* 展示首页
* @return
*/
@RequestMapping(value="/")
public String indexShow() {
return "index";
} /**
* 展示其他页面,每一个页面请求都要写一个对应的页面返回处理,这样太过麻烦,进行简化
* 方法:正如所见,将请求的URL和处理函数返回的URL写成一样的,这样一来就可以使用
* Restfaull的URL模板映射,直接将请求的URL作为返回的URL, 如此就可公用了
* 如果参数名称和表达式名称不一致时,加参数(@PathVariable(value="page") String page3)
*
*/
@RequestMapping(value="/{page}")
public String pageShow(@PathVariable String page) {
return page;
}
}
2、SpringBoot的视图控制器实现静态页面响应
如上面SpringMVC响应静态页面的方法,在SpringBoot提供了专门的视图控制器,只需要实现WebMvcConfigurer接口,重写其addViewControllers方法就可以进行配置,原理只是简单的重定向,但是在使用过程中遇到报404的问题,多次尝试,发现有个小坑,记录一下。
原因如下:
SpringBoot有很多的默认。就resources目录而言,在不配置静态资源目录的情况下,默认static目录中存公开的静态资源,而templates目录中存放模板文件。这里就有个问题,如果一个test.html文件中不涉及数据填充,只当作静态页面时,感觉放在两个目录中都可以,只是是否公开的区别而已?然而却不是这样,,,
在不引入Freemarker或Thymeleaf的jar包时,如果按照上面的方法,将test.html文件放在templates下时是不起作用的,表示找不到该文件(404),此时templates模板文件目录不起作用。必须放在static下才能被controller方法返回。使用模板引擎后,放在任意目录中都可以。
目录结构如下:

视图控制器配置类如下:
package com.huawei.myconfig; import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration//标志当前类在启动的时候会被加载
public class MyConfiguration implements WebMvcConfigurer {
//视图控制器配置
@Override
public void addViewControllers(ViewControllerRegistry registry) {
//urlPath:浏览器输入的地址 viewName:该地址跳转到的页面,不加templates文件夹和.html
//registry.addViewController("/left").setViewName("left");错误的写法
registry.addViewController("/login").setViewName("left.html");
} }
还有一件事:这种视图返回方法的urlPath和viewName不能相同,否则会报500异常(
There was an unexpected error (type=Internal Server Error, status=500).
Circular view path [left]: would dispatch back to the current handler URL [/left] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)
),
使用模板引擎时可以省略后缀名.html等,但返回静态资源时则不能省略,就像请求.css,.js文件一样。
controller类如下
package com.huawei.test; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; @Controller
public class Test {
@RequestMapping("/")
@ResponseBody
public String hello(){
return "hello Spring boot";
} @RequestMapping("/test")
@ResponseBody
public String test(){
return "举杯邀明月,对影成三人";
} @RequestMapping("/page")
public String left(){
return "left.html";
}
}
如要转载,请注明出处。
SpringMVC与SpringBoot返回静态页面遇到的问题的更多相关文章
- SpringBoot返回html页面
一般Controller返回数据或页面,今天谈一下返回页面的场景. 一.不使用template 1. controller中定义对应的访问路由及返回的页面(使用Controller,不要使用RestC ...
- SSM 返回静态页面HTML Controller 被递归调用引起的StackOverflowError
一 背景 最近在做工程实践,想实现这么一个效果: 前端url请求地址:localhost:8080/idevtools/search 后端返回一个静态页面HTML:search.html 按照网上说的 ...
- springboot返回页面
1.使用@Controller注解: @Controller必须配合模板 先导入依赖: <dependency> <groupId>org.springframework.bo ...
- shiro 静态页面资源不显示 解决方案(转)
最近做一个ssm+shiro的框架整和 不加shiro之前ssm中css和图片显示正常.加上以后无法显示. 解决方案: shiro有静态资源过滤. 配置资源匿名访问即可 <property na ...
- Django之使用celery和NGINX生成静态页面实现性能优化
性能优化原理: 当我们要给client浏览器返回一个页面时,我们需要去数据库查询数据并将数据和基本页面模板渲染形成页面返回给客户端,但如果每一个用户访问时都去查询一次首页的的数据时,当日访问量很大时那 ...
- 小记SpringMVC与SpringBoot 的controller的返回json数据的不同
近期由于项目的改动变更,在使用springmvc和springboot测试的时候发现一个有趣的现象 1.springmvc的controller使用@ResponseBody返回的仅仅是json格式的 ...
- SpringMVC访问静态页面
Spring MVC显示静态页面 在前面搭建spring MVC环境时,我们设置了spring-mvc配置,通过tomcat来访问了index.jsp 页面,但是当我将页面换成.thml的静态面之后就 ...
- SpringBoot学习------SpringBoot使用Thymleaf模块访问不了静态页面
SpringBoot使用Thymleaf模块访问不了静态页面 最近学习SpringBoot的过程中使用了Thymeleaf模块引擎,页面发送请求后老是无法显示静态页面,所有的步骤都是参考资料来执行,自 ...
- Springboot访问静态资源&WebJars&图标&欢迎页面
目录 概述 1.访问WebJar资源 2.访问静态资源 3.favicon.ico图标 4.欢迎页面 概述 使用Springboot进行web开发时,boot底层实际用的就是springmvc,项目中 ...
随机推荐
- Atitit.运行cmd 命令行 php
Atitit.运行cmd 命令行 php 1. 运行cmd 命令行,调用系统命令的基础 1 1.1. 实际运行模式 1 1.2. 空格的问题 1 1.3. 中文路径的问题.程序文件读取编码设置 1 1 ...
- 图文介绍MyEclipse (2015) 中创建简单的Maven项目的步骤(用于生成可运行jar文件)
利用MyEclipse的引导,能够非常方便的创建简单的.用于生成可运行jar文件的Maven项目: (原创文章,转载请注明转自Clement-Xu的博客:http://blog.csdn.net/cl ...
- hdu_1698线段树成段更新
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #d ...
- nios DMA使用注意事项
1.对同一个设备的多次DMA读写操作之间如果并行,有可能会导致数据传输错误.可以在程序中对每次DMA操作进行等待.如下: 点击(此处)折叠或打开 void dma_done(void *p) { in ...
- [BZOJ3884] 上帝与集合的正确用法 (欧拉函数)
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=3884 题目大意: 给出 M, 求 $2^{2^{2^{2^{...}}}}$ % M ...
- js中 '枚举' 的使用
习惯了.net编程,c#的枚举很好用,无论管理上,可读上,易用上都非常强大. JS作为弱类型解析语言,并没有严格的数据类型限定. “枚举”在JS中并不存在的. 通过定义上,枚举是一种类常量的存在,只不 ...
- 泪奔,配好了bioconductor环境
最近因为极度忙,没有写总结.今天补一下总结. 今天完成关静最后给的大project这个作业来说,结合自己的研究方向是个让我纠结一周多的事.好在找到了对应的研究内容. R的书目前还是很多的.R我一开始觉 ...
- 自动关闭Messbox
/// <summary> /// 自动关闭Messbox /// </summary> public class MessageBoxAutoClose { System.T ...
- NPashaP的二分图源码部分
源码链接:https://github.com/nelsonkuang/ant-admin/blob/master/src/utils/d3-viz.js 的二分图部分. 1.整体的级联结构 整个bp ...
- js字符串排序方法
前端开发过程中有时需自己手写排序方法 一般想到数字的字符串排序方法 我们会用到 var newArr = arr. sort(function(a,b){return a - b})来进行排序 但除此 ...