我正在使用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文件。
感谢。
答案 0 :(得分:3)
让我们从浏览器开始。它生成并发送POST请求。
您的Servlet容器(YMMV)以字节形式接收POST请求。 Servlet容器解析它,生成HttpServletRequest
和HttpServletResponse
个对象,找到处理请求的相应Servlet
,并从其HTTP工作线程池中提取Thread
来运行它英寸
它会在Thread
上发送service(..)
Servlet
。您的自定义Servlet
扩展了HttpServlet
,因此会继承其service()
方法,该方法会根据请求调用doXXX()
方法之一。
在这种情况下,将调用doPost()
。当你到达 p>
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来确定要使用的会话对象。所以是的,当您使用会话时,只要会话未过期,更改就会一直存在。