SSM 返回静态页面HTML Controller 被递归调用引起的StackOverflowError
一 背景
最近在做工程实践,想实现这么一个效果:
- 前端url请求地址:localhost:8080/idevtools/search
- 后端返回一个静态页面HTML:search.html
按照网上说的,进行了一些配置,然后运行项目,出现了错误:javax.servlet.ServletException: org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.StackOverflowError;
二 原因
去网上各种查阅资料,都没找到与该问题相关的文章(这也是我发博客的原因),可能是遇到这类问题的人只有少部分。事实上,确实也只有“机缘巧合”的人会遇到这个问题。
- Controller中处理/idevtools/search请求的方法被递归调用了;
- Controller中searchHtml()方法返回的字符串"search"(对应search.html文件)经过视图解析器处理(请求转发)后刚好又变成了url:/idevtools/search,所以searchHtml()又一次被调用;
三 重现
1.在webapp/目录下存2个html文件:isearch.html,view.html,目录如下:
2.配置spring-mvc.xml,视图解析器:
<!-- 配置视图解析器 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/"/><property name="suffix" value=".html"/> </bean>
3.编写HtmlController,如下:
/*** 静态页面请求处理Controller* @author southday* @date 2019/3/4*/ @Controller public class HtmlController {@GetMapping("/search")public String searchHtml() {System.out.println("search html");return "isearch";}@GetMapping("/view")public String viewHtml() {System.out.println("view html");return "view";} }
注意看这两个请求的处理:
- /search,返回的是isearch,对应的是isearch.html
- /view,返回的是view,对应的是view.html
当你运行项目,发送请求时,只有/search可以成功返回html页面,/view则会报异常(StackOverflowError)。具体原因我没去深入了解,但觉得是:
- 视图解析器中根据Controller返回的字符串“view”,优先匹配了请求/idevtools/view,所以HtmlController中的viewHtml()方法会被递归调用,导致StackOverflowError;
- 而返回"isearch"时,没有匹配到相应的请求,进而匹配了静态页面"isearch.html",因此能正常返回html页面;
转载请说明出处!have a good time :-)
转载于:https://www.cnblogs.com/southday/p/10472727.html
SSM 返回静态页面HTML Controller 被递归调用引起的StackOverflowError相关推荐
- python3_函数_形参调用方式 / 不定长参数 / 函数返回值 / 变量作用域 / 匿名函数 / 递归调用 / 函数式编程 / 高阶函数 / gobal和nonlocal关键字 / 内置函数
1.形参的调用方式 1. 位置参数调用 2. 关键词参数调用 原则: 关键词参数调用不能写在位置参数调用的前边 def test1(name, age):print("name:" ...
- springboot返回html页面原理,SpringBoot返回html页面
一般Controller返回数据或页面,今天谈一下返回页面的场景. 一.不使用template 1. controller中定义对应的访问路由及返回的页面(使用Controller,不要使用RestC ...
- 静态Web服务器-返回固定页面数据
1. 开发自己的静态Web服务器 实现步骤: 编写一个TCP服务端程序 获取浏览器发送的http请求报文数据 读取固定页面数据,把页面数据组装成HTTP响应报文数据发送给浏览器. HTTP响应报文数据 ...
- 【函数的定义、调用(嵌套调用、递归调用)、声明、函数的分类(有无返回值、有无参数)、变量(自动变量与静态变量、局部变量与全局变量、只读变量)】(学习笔记7--函数)
第一篇博文,打卡新星计划第三季3.4~4.4,希望能有质的飞跃,顶峰相见 一.自定义函数 1.函数的定义 函数在使用前也需要定义,定义的格式如下: 数据类型 函数名([数据类型 参数1],[数据类型 ...
- express如何返回一个html文档,node.js express 返回一个静态页面
首先我们要有一个静态页面 .html 文件. 然后,我们初始化一个express 项目. 首先新建一个目录,进入它,如果没有下载express的话,使用命名下载npm install express ...
- SpringMVC:返回HTML页面
[问题] 在webapp的WEB-INF下放入一个html,通过控制层Controller返回html报错(404).但是返回jsp页面却不会报错. [原因]静态的html访问不到,但是动态的jsp可 ...
- JSP中把动态页面转换为静态页面
原文:http://www.gpxz.com/diannao/biancheng/261225.html 要自动生成静态页面,用Filter截获jsp请求并先进行预处理,自动生成Html,是个不错的主 ...
- SpringBoot--访问静态页面
原文网址:SpringBoot--访问静态页面_IT利刃出鞘的博客-CSDN博客 简介 位置与优先级 位置 spring boot的静态资源: static目录:css.js.图片等 template ...
- Day210.服务端渲染技术NUXT、整合前台主页面、名师、课程静态页面、首页整合banner数据后端部分【创建banner微服务、接口、banner后台前端实现】 -谷粒学院
谷粒学院 服务端渲染技术NUXT 一.服务端渲染技术NUXT 1.什么是服务端渲染 服务端渲染又称SSR (Server Side Render)是在服务端完成页面的内容,而不是在客户端通过AJAX获 ...
最新文章
- C++ 对象的内存布局(上)
- RESTful API -备
- 读取串口数据_自定义串口通信的相关问题整理
- Zygote启动分析
- ubuntu12.04升级后找不到共享目录
- django手机访问_Django对接支付宝电脑网站、App支付步骤详解!这个框架是真强!...
- 终于可以摆脱 Pipenv 这坑货了
- 115配额怎么增加_笔电、平板接口少怎么办,ORICO八合一多功能扩展坞助你一臂之力...
- [Python+Anaconda] 查看Python、Anaconda下python、CUDA、函数库的版本
- mapreduce程序调用各个类的功能
- Linux下如何修改ini文件,如何修改Boot.ini文件,重新引导Linux!
- 信息安全管理体系--建立
- iptv直播服务器维护,IPTV机顶盒的智能化配置和维护方案介绍【详解】
- Dism++更新扫描时提示“系统找不到指定文件”
- Iphone开发(九)理解subView,手动实现多个视图切换
- 掌握 Dojo 工具包
- 用 Python 实现朋友圈中的九宫格图片 看这一篇就够了
- java爬虫正则表达式_Java爬虫预热之正则表达式 - 菜鸟头头
- VHDL实现矩阵键盘检测
- 多周期时间序列分解算法——MSTL原理