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,项目中 ...
随机推荐
- Qt之滚动字幕
简述 滚动字幕,也就是传说中的跑马灯效果. 简单地理解就是:每隔一段时间(一般几百毫秒效果较佳)显示的文字进行变化(即滚动效果). 简述 实现 效果 源码 实现 利用定时器QTimer,在固定的时间 ...
- 一:Java之面向对象基本概念
1.面向对象 面向对象(Object Oriented)是一种新兴的程序设计方法,或者是一种新的程序设计规范(paradigm).其基本思想是使用对象.类.继承.封装.多态等基本概念来进行程序设计.从 ...
- log_archive_min_succeed_dest
博客上.看了一大神的文章:http://blog.csdn.net/msdnchina/article/details/45141427 我表示有疑问:归档日志路径爆满,那么对于开启归档模式的数据库, ...
- UVa 10954 Add All 贪心
贪心 每一次取最小的两个数,注意相加的数也要算' #include<cstring> #include<iostream> #include<cstdio> # ...
- Android学习路线(十二)Activity生命周期——启动一个Activity
DEMO下载地址:http://download.csdn.net/detail/sweetvvck/7728735 不像其他的编程模式那样应用是通过main()函数启动的.Android系统通过调用 ...
- 关于有的Apk无法反编译的探究
Android的apk包,其实就是zip包,只不过后缀名换了而已!使用“好压”等解压缩工具解压,就可以看到里面的内容了.简单介绍一下吧. 以下就是解压出来的apk的内容: 其中: assets ...
- BsonDocument
http://api.mongodb.com/csharp/current/html/T_MongoDB_Bson_BsonDocument.htm 如何取出document中的数据 BsonDocu ...
- EasyUI--Alert()
1.$.messager.alert(title, msg, icon, fn) 2 <script type="text/javascript"> $(functio ...
- JavaScript获取本机IP地址
<script type="text/javascript"> /** * Get the user IP throught the webkitRTCPeerConn ...
- 求第区间第k大数 TLE归并树
题 给定N个正整数构成的序列,将对于指定的闭区间查询其区间内的第K小值. 输入: 第一行包含两个正整数N.M,分别表示序列的长度和查询的个数. 第二行包含N个正整数,表示这个序列各项的数字. 接下来M ...