HttpServletRequest 和与之关联的会话

HttpServletRequest and session associated with it

这是我的控制器 class :

public ModelAndView handleRequest(HttpServletRequest request,
        HttpServletResponse response) throws Exception {

    System.out.println("request in controller is " + request);
    request.setAttribute("message", "Whosebug");
    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 中请求消息的值是 Whosebug test1 中的会话值正在测试

test2.jsp 输出: test2 中的请求是 org.apache.catalina.connector.RequestFacade@6289cd44 test2中请求消息的值为空

test2 中的会话值正在测试

这里我的理解是请求对象在所有 3 种情况下都是 different.But 我想控制器的请求和它随后传递给 test1.jsp 是某种相关的。(有人可以解释一下吗) 我完全困惑的是,如果请求至少在 test1 和 test2 之间是不同的(因为 test1 中显示的请求属性在 test2 中打印为 null),为什么它们之间的会话对象相同?两个不同的请求对象如何给出相同的会话? 我的理解是会话对于唯一请求对象是唯一的。 有人可以提前打消我对this.thanks的疑虑吗

不,你错了。

请求,顾名思义,模拟 HTTP 请求。当用户点击 link 时,一个请求被发送到服务器,由控制器和 JSP 处理并生成一个响应。然后请求就消失了。

会话的存在正是为了能够 "group" 来自给定浏览器的所有请求。典型用例:您登录到 Web 应用程序,将用户名存储在会话中,然后可以为该用户的所有后续请求找到该用户名,直到会话超时或失效。所以是的,来自同一个浏览器的多个请求确实共享同一个会话。如果每个请求都有自己的session,那么session就完全没用了。