我正在编写一个扩展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。
答案 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);