为了账号安全,请及时绑定邮箱和手机立即绑定

非常诡异的内存溢出,希望有大佬教育一波

非常诡异的内存溢出,希望有大佬教育一波

汪汪一只猫 2019-01-16 10:13:46
项目框架 spring boot 2.0 我写了 父类 BaseController 里面自动注入 request 和 response public class BaseController{ @Autowired public HttpServletRequest request; @Autowired public HttpServletResponse response; } IndexController 都继承 BaseController public class IndexController extends BaseController { @RequestMapping("/index") public String index(Model model) { return "index"; } @RequestMapping("login") public String login() throws ServletException, IOException { request.getRequestDispatcher("/admin/index").forward(request, response); return null; } index 页面,没有任何数据操作,纯一个静态页面 <!DOCTYPE html><html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="renderer" content="webkit"> <title>500</title> </head> <body style="background: #FFFFFF; color: red; font-size: 40em; text-align: center"> <p> TEST </p> </body></html> 访问 http://localhost:9090/admin/login出现如下错误,循环引用导致内存溢出java.lang.StackOverflowError: null at org.springframework.web.context.support.WebApplicationContextUtils.currentRequestAttributes(WebApplicationContextUtils.java:312) at org.springframework.web.context.support.WebApplicationContextUtils.access$400(WebApplicationContextUtils.java:65) at org.springframework.web.context.support.WebApplicationContextUtils$RequestObjectFactory.getObject(WebApplicationContextUtils.java:328) at org.springframework.web.context.support.WebApplicationContextUtils$RequestObjectFactory.getObject(WebApplicationContextUtils.java:323) at org.springframework.beans.factory.support.AutowireUtils$ObjectFactoryDelegatingInvocationHandler.invoke(AutowireUtils.java:305) at com.sun.proxy.$Proxy100.setAttribute(Unknown Source) at org.apache.catalina.core.ApplicationHttpRequest.setAttribute(ApplicationHttpRequest.java:304) at sun.reflect.GeneratedMethodAccessor95.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.beans.factory.support.AutowireUtils$ObjectFactoryDelegatingInvocationHandler.invoke(AutowireUtils.java:305) at com.sun.proxy.$Proxy100.setAttribute(Unknown Source) at org.apache.catalina.core.ApplicationHttpRequest.setAttribute(ApplicationHttpRequest.java:304) at sun.reflect.GeneratedMethodAccessor95.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.beans.factory.support.AutowireUtils$ObjectFactoryDelegatingInvocationHandler.invoke(AutowireUtils.java:305) at com.sun.proxy.$Proxy100.setAttribute(Unknown Source) at org.apache.catalina.core.ApplicationHttpRequest.setAttribute(ApplicationHttpRequest.java:304) at sun.reflect.GeneratedMethodAccessor95.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.beans.factory.support.AutowireUtils$ObjectFactoryDelegatingInvocationHandler.invoke(AutowireUtils.java:305) at com.sun.proxy.$Proxy100.setAttribute(Unknown Source) at org.apache.catalina.core.ApplicationHttpRequest.setAttribute(ApplicationHttpRequest.java:304) at sun.reflect.GeneratedMethodAccessor95.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) 1.注意看我的login 就使用request转发到首页(注意,此时request 和 response 是父类的BaseController) 注意问题不是地址循环跳引发的问题 3.使用方法注入request 和 response就不会有问题@RequestMapping("login") public String login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.getRequestDispatcher("/admin/index").forward(request, response); return null; } 有没有大佬解释一波。
查看完整描述

5 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

你先试试接口,

    @RequestMapping("cc")
    @ResponseBody
    public Object z() {
        String parameter = request.getParameter("zz");
        System.out.println(parameter);
        return "你好";
    }

springboot 2.0.6 没有问题,先一步一步的排查,世界是科学的

查看完整回答
反对 回复 2019-02-12
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

@justjavac ac[justjavac]

查看完整回答
反对 回复 2019-02-12
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

估计你这个 request.getRequestDispatcher("/admin/index").forward(request, response); forward到admin之后又redirect回login了吧?

查看完整回答
反对 回复 2019-02-12
?
交互式爱情

TA贡献1712条经验 获得超3个赞

你这种写法相当于:@RequestMapping("/index")
public String index(Model model) {

//重点
request.getRequestDispatcher("/admin/index").forward(request, response);
return "index";

}

@RequestMapping("login")
public String login() throws ServletException, IOException {

request.getRequestDispatcher("/admin/index").forward(request, response);
return null;

}

查看完整回答
反对 回复 2019-02-12
  • 5 回答
  • 0 关注
  • 597 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信