項目框架 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 沒有問題,先一步一步的排查,世界是科學的
慕田峪4524236
TA貢獻1875條經驗 獲得超5個贊
估計你這個 request.getRequestDispatcher("/admin/index").forward(request, response); forward到admin之后又redirect回login了吧?
交互式愛情
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;
}
添加回答
舉報
0/150
提交
取消
