ssm返回html页面,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请求的方法被递归调用了;

而导致其被递归调用的原因竟然是:返回的html文件名(search.html)与url请求地址中的search相同;

三 重现

1.在webapp/目录下存2个html文件:isearch.html,view.html,目录如下:

20190304204345963324.png

2.配置spring-mvc.xml,视图解析器:

3.编写HtmlController,如下:

/*** 静态页面请求处理Controller

*@authorsouthday

* @date 2019/3/4*/@Controllerpublic classHtmlController {

@RequestMapping(value= "/search", method =RequestMethod.GET)publicString searchHtml() {

System.out.println("search html");return "isearch";

}

@RequestMapping(value= "/view", method =RequestMethod.GET)publicString 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页面;

20190304204350258410.png

20190304204350388298.png

转载请说明出处!have a good time :-)

原文:https://www.cnblogs.com/southday/p/10472727.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值