如何 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.