如何从HttpServlet的doPost()方法返回一些数据?

时间:2015-03-11 15:19:07

标签: java servlets http-post

我正在编写一个扩展HttpServlet的java类,从而覆盖了doPost()方法。在doPost()方法中,组装了一些数据对象,但我不确定返回数据的更好方法是什么。例如,

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,这基本上使List L成为全局变量。

另一种方法是将数据字节写入文件,以便以后可以将其读回到List中。

但是有更好的方法来应对这种情况吗?

基于评论的用例:

在主页" index.html",表格A和B中创建两个带有HTTP / POST的表格。要求用户先提交表格A,然后提交表格B.提交表格A触发上述 doPost() 方法,以构建 列表L 。该方案是如何使此列表可用于处理表单B提交。具体来说,如何让表格B doPost() 方法能够访问 列表L 创建在上一阶段从A。

3 个答案:

答案 0 :(得分:1)

我会考虑使用Session范围并放在那里。 您可以从该会话中访问对象。

final HttpSession session = req.getSession();

答案 1 :(得分:1)

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接口,其底层实现由容器提供。每个用户/浏览器与应用程序交互时,只创建一个范围的对象。此处存储的任何用户数据在来自同一用户的多个HTTP请求中仍可用于会话的长度。

HttpSession的javadoc说了

  

提供一种方法,可以跨多个页面请求识别用户或访问网站并存储有关该用户的信息。

答案 2 :(得分:0)

你可以做一个RequestDispatcher

RequestDispatcher rd = request.getRequestDispatcher("name.jsp");
    rd.forward(request, response);