Jsp HttpServletRequest及其关联的会话

Jsp HttpServletRequest及其关联的会话,jsp,session,servlets,Jsp,Session,Servlets,这是我的控制器类: public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { System.out.println("request in controller is " + request); request.setAttribute("message", "Stackoverflow");

这是我的控制器类:

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>

test1中的请求是
test1中请求消息的值为
test1中的会话值为

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>

test2中的请求是
test2中请求消息的值为
test2中的会话值为
控制器输出:: 控制器中的请求是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),那么会话对象在它们之间为什么是相同的?两个不同的请求对象如何给出相同的会话? 我的理解是会话对于唯一请求对象是唯一的。 有人能帮我澄清一下这方面的疑问吗?先谢谢你不,你弄错了

一个请求,正如它的名字所指出的,对一个HTTP请求进行建模。当用户单击一个链接时,一个请求被发送到服务器,由控制器和JSP处理,后者生成响应。然后请求消失了

会话的存在正是为了能够将来自给定浏览器的所有请求“分组”在一起。典型用例:您登录到web应用程序,将用户名存储在会话中,然后能够为该用户的所有后续请求找到该用户名,直到会话超时或无效。因此,是的,来自同一浏览器的多个请求确实共享同一会话。如果每个请求都有自己的会话,那么会话将完全无用