如何 return 来自 HttpServlet 的 doPost() 方法的一些数据?
How to return some data from HttpServlet's doPost() method?
我正在编写 java class 扩展 HttpServlet 从而覆盖 doPost() 方法。在 doPost() 方法内部,组装了一些数据对象,但我不确定 return 数据的更好方法是什么。例如,
public class FormSubmission extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// http request is parsed to assemble an object, e.g., a List
List L = parseRequest(request);
// Question: how to return List L for use by Server?
}
}
我能想到的一种方法是将静态变量声明为
Public static List L;
并调用 FormSubmission.L
,这基本上使列表 L 成为全局变量。
另一种方法是将数据字节写入文件,以便稍后可以将其读回列表。
但是有没有更好的方法来处理这种情况呢?
用例基于评论:
主页面"index.html"创建了两个HTTP/POST的表单,表单A和表单B。要求用户先提交表单A,再提交表单B。提交表单A触发上面的doPost()方法,使得List L 被构造。该方案是如何使此列表可用于处理表单 B 提交。具体来说,如何让表单 B 的 doPost() 方法能够访问 List L 在前一阶段从 A 创建。
你可以做一个 RequestDispatcher
RequestDispatcher rd = request.getRequestDispatcher("name.jsp");
rd.forward(request, response);
我会考虑使用会话范围并放在那里。
您可以从该会话到达对象。
final HttpSession session = req.getSession();
在您的 FormASubmission
servlet 中,将 List
保存到用户的 session
对象。
List L = parseRequest(request);
HttpSession session = request.getSession();
session.setAttribute("FormADataList", L);
然后在您的 FormBSumission
servlet 中,您可以将此 List
检索为
HttpSession session = request.getSession();
List L = (List) session.getAttribute("FormADataList");
HttpSession
是一个接口,其底层实现由容器提供。这个 scoped 对象在每次 user/browser 与应用程序交互时只创建一次。存储在此处的任何用户数据在来自同一用户的多个 HTTP 请求的 session 期间仍然可用。
HttpSession 的 javadoc 是这么说的
Provides a way to identify a user across more than one page request or visit to a Web site and to store information about that user.
我正在编写 java class 扩展 HttpServlet 从而覆盖 doPost() 方法。在 doPost() 方法内部,组装了一些数据对象,但我不确定 return 数据的更好方法是什么。例如,
public class FormSubmission extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// http request is parsed to assemble an object, e.g., a List
List L = parseRequest(request);
// Question: how to return List L for use by Server?
}
}
我能想到的一种方法是将静态变量声明为
Public static List L;
并调用 FormSubmission.L
,这基本上使列表 L 成为全局变量。
另一种方法是将数据字节写入文件,以便稍后可以将其读回列表。
但是有没有更好的方法来处理这种情况呢?
用例基于评论:
主页面"index.html"创建了两个HTTP/POST的表单,表单A和表单B。要求用户先提交表单A,再提交表单B。提交表单A触发上面的doPost()方法,使得List L 被构造。该方案是如何使此列表可用于处理表单 B 提交。具体来说,如何让表单 B 的 doPost() 方法能够访问 List L 在前一阶段从 A 创建。
你可以做一个 RequestDispatcher
RequestDispatcher rd = request.getRequestDispatcher("name.jsp");
rd.forward(request, response);
我会考虑使用会话范围并放在那里。 您可以从该会话到达对象。
final HttpSession session = req.getSession();
在您的 FormASubmission
servlet 中,将 List
保存到用户的 session
对象。
List L = parseRequest(request);
HttpSession session = request.getSession();
session.setAttribute("FormADataList", L);
然后在您的 FormBSumission
servlet 中,您可以将此 List
检索为
HttpSession session = request.getSession();
List L = (List) session.getAttribute("FormADataList");
HttpSession
是一个接口,其底层实现由容器提供。这个 scoped 对象在每次 user/browser 与应用程序交互时只创建一次。存储在此处的任何用户数据在来自同一用户的多个 HTTP 请求的 session 期间仍然可用。
HttpSession 的 javadoc 是这么说的
Provides a way to identify a user across more than one page request or visit to a Web site and to store information about that user.