HttpServletRequest和与之关联的会话

时间:2015-01-28 16:24:45

标签: jsp session servlets

这是我的控制器类:

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),它们之间的会话对象如何相同?两个不同的请求对象如何给出相同的会话? 我的理解是会话对于唯一请求对象是唯一的。 有人可以请你清楚我对此的怀疑。谢谢你提前

1 个答案:

答案 0 :(得分:1)

不,你错了。

请求,如其名称所示,为HTTP请求建模。当用户单击链接时,会向服务器发送请求,由控制器和JSP处理,生成响应。然后请求消失了。

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