这是我的控制器类:
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
System.out.println("request in controller is " + request);
request.setAttribute("message", "Stackoverflow");
request.getSession().setAttribute("name", "testing");
return new ModelAndView("test1");
}
test1.jsp
<html>
request in test1 is <%=request%><br>
the value of request message in test1 is <%=request.getAttribute("message")%><br>
session value in test1 is <%=request.getSession().getAttribute("name")%>
<br><br>
<a href="test2.jsp" >next</a>
</html>
test2.jsp
<html>
request in test2 is <%=request%><br>
the value of request message in test2 is <%=request.getAttribute("message")%><br>
session value in test2 is <%=request.getSession().getAttribute("name")%>
</html>
控制器输出:: 控制器中的请求是org.apache.catalina.connector.RequestFacade@33480f22
test1.jsp输出: test1中的请求是org.apache.catalina.core.ApplicationHttpRequest@68d91bc4 test1中的请求消息的值是Stackoverflow test1中的会话值正在测试
test2.jsp输出: test2中的请求是org.apache.catalina.connector.RequestFacade@6289cd44 test2中请求消息的值为null
test2中的这里我的理解是请求对象在所有3种情况下都是不同的。但我猜控制器的请求及其后续传递给test1.jsp有点相关。(有人可以解释一下) 我完全感到困惑的是,如果请求至少在test1和test2之间是不同的(因为test1中显示的请求属性在test2中打印为null),它们之间的会话对象如何相同?两个不同的请求对象如何给出相同的会话? 我的理解是会话对于唯一请求对象是唯一的。 有人可以请你清楚我对此的怀疑。谢谢你提前
答案 0 :(得分:1)
不,你错了。
请求,如其名称所示,为HTTP请求建模。当用户单击链接时,会向服务器发送请求,由控制器和JSP处理,生成响应。然后请求消失了。
会话的存在恰恰是为了能够&#34; group&#34;来自给定浏览器的所有请求。典型用例:您登录Web应用程序,将用户名存储在会话中,然后能够为该用户的所有后续请求找到此用户名,直到会话超时或失效。所以是的,来自同一浏览器的多个请求确实共享同一个会话。如果每个请求都有自己的会话,那么会话就完全没用了。