我正在使用 servlet 一段时间,并试图弄清楚 View 如何与 servlet 通信,更准确地说,我正在谈论以下实例: HttpSession、HttpServletRequest 和 HttpServletResponse 类。
1)在我的jsp文件中我有这行代码:
<% CategorieForm cf=(CategorieForm)session.getAttribute("catForm");%>
这是“ session ”在此文件中第一次出现。
当创建此 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");
}
我只是想了解这是如何工作的, View 和servlet之间的事务顺序,当创建对象“请求”和“响应”时,servlet中的HttpSession对象是否与servlet中的 session 相同jsp 文件。
谢谢。
最佳答案
让我们从浏览器开始。它生成并发送 POST 请求。
Servlet 容器 (YMMV) 以字节形式接收该 POST 请求。 Servlet容器解析它,生成HttpServletRequest
和HttpServletResponse
对象,找到合适的 Servlet
处理请求,并拉出 Thread
从其 HTTP 工作线程池中运行它。
它调度 Thread
它调用 service(..)
在您的Servlet
上。您的定制Servlet
延伸HttpServlet
因此继承了它的 service()
方法,根据请求,调用 doXXX()
之一方法。
在本例中,doPost()
将被调用。当你到达p>
HttpSession session=request.getSession();
如果 HttpSession
不存在,Servlet
容器将为您创建一个 JSESSIONID Cookie 并将其添加到 HttpServletResponse
。
当你这样做时
response.sendRedirect("Categories.jsp");
Servlet 容器将提交状态代码为 302 和 Location
的响应。包含 Categories.jsp
的 URI 的 header 根据您的主机和上下文路径解决。
如果您的客户端是浏览器,它很可能会向该 URI 发送新的 GET 请求。您的 Servlet 容器将执行我上面描述的相同操作并调用 service()
在从 jsp
生成的编译类上文件。这将生成 HTTP 响应的正文,并将其发送回客户端。
关于java - jsp 页面( View )和 servlet( Controller )之间的事务排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20644359/