jsp页面(视图)和servlet(Controller)之间的事务排序

时间:2013-12-17 20:48:49

标签: java jsp session servlets

我正在使用servlet一段时间,并试图弄清楚视图如何与servlet通信,更准确我正在谈论的实例: HttpSession,HttpServletRequest和HttpServletResponse类。

1)在我的jsp文件中,我有这行代码:

<% CategorieForm cf=(CategorieForm)session.getAttribute("catForm");%>

这是此文件中第一次出现'session'。

创建此会话对象时。

2)同样在我的servlet中我有这个方法:

doPost(HttpServletRequest request, HttpServletResponse response)
{
/*
code that get the resuest parameters using the 'request.getParameter()' method, calls   the model ans store the results in formBean
*/
HttpSession session=request.getSession();
session.setAttribute("catForm",cf);
response.sendRedirect("Categories.jsp");
}

我只是想了解它是如何工作的,视图和servlet之间的事务顺序,当创建对象的'request'和'response'时,servlet中的HttpSession对象与会话中的HttpSession对象相同。 jsp文件。

感谢。

3 个答案:

答案 0 :(得分:3)

让我们从浏览器开始。它生成并发送POST请求。

您的Servlet容器(YMMV)以字节形式接收POST请求。 Servlet容器解析它,生成HttpServletRequestHttpServletResponse个对象,找到处理请求的相应Servlet,并从其HTTP工作线程池中提取Thread来运行它英寸

它会在Thread上发送service(..) Servlet。您的自定义Servlet扩展了HttpServlet,因此会继承其service()方法,该方法会根据请求调用doXXX()方法之一。

在这种情况下,将调用doPost()。当你到达

HttpSession session=request.getSession();

如果HttpSession不存在,Servlet容器将为您创建一个,并向HttpServletResponse添加一个JSESSIONID Cookie。

然后你做

response.sendRedirect("Categories.jsp");

Servlet容器将提交状态代码为302的响应和包含针对您的主机和上下文路径解析的Location URI的Categories.jsp标头。

如果您的客户端是浏览器,它很可能会向该URI发送新的GET请求。您的Servlet容器将执行我上面描述的相同操作,并对从service()文件生成的已编译类调用jsp。这将生成HTTP响应的主体,该响应将被发送回客户端。

答案 1 :(得分:2)

  

创建此会话对象时。

会话是在第一次提出请求时创建的,没有关联的会话

  

我只是想了解它是如何工作的,视图和servlet之间的事务顺序,当创建对象的'request'和'response'时,servlet中的HttpSession对象与会话中的HttpSession对象相同。 jsp文件。

在该代码段中,您要为会话设置一些属性,然后将用户重定向到Categories.jsp

答案 2 :(得分:1)

创建用户会话的第一个请求。 Session的行为类似于hashmap,可以存储键/值对。会议还有一个ID。创建会话后,服务器会要求客户端创建具有会话ID的cookie(如果cookie不可用,则有另一种选择)。

在每个后续请求中,服务器使用该cookie来确定要使用的会话对象。所以是的,当您使用会话时,只要会话未过期,更改就会一直存在。