Java 如何从HttpServlet';s doPost()方法?
我正在编写一个java类来扩展HttpServlet,从而覆盖doPost()方法。在doPost()方法中,组装了一些数据对象,但我不确定返回数据的更好方法是什么。比如说,Java 如何从HttpServlet';s doPost()方法?,java,servlets,http-post,Java,Servlets,Http Post,我正在编写一个java类来扩展HttpServlet,从而覆盖doPost()方法。在doPost()方法中,组装了一些数据对象,但我不确定返回数据的更好方法是什么。比如说, public class FormSubmission extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOE
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”、表单A和表单B中创建了两个带有HTTP/POST的表单。要求用户先提交表单A,然后提交表单B。提交表单A会触发上述doPost()方法,从而构建列表L。场景是如何使此列表可用于处理表格B提交。具体来说,如何使表单B的doPost()方法能够访问在前一阶段从A创建的列表L 您可以执行RequestDispatcher
RequestDispatcher rd = request.getRequestDispatcher("name.jsp");
rd.forward(request, response);
我会考虑使用会话范围并放在那里。 您可以从该会话访问对象
final HttpSession session = req.getSession();
在
表单提交
servlet中,将列表
保存到用户的会话
对象
List L = parseRequest(request);
HttpSession session = request.getSession();
session.setAttribute("FormADataList", L);
然后在FormBSumission
servlet中,您可以按如下方式检索此列表
HttpSession session = request.getSession();
List L = (List) session.getAttribute("FormADataList");
HttpSession
是一个接口,其底层实现由容器提供。每个与应用程序交互的用户/浏览器仅创建一次此作用域对象。存储在此处的任何用户数据在来自同一用户的多个HTTP请求的会话长度内保持可用
这是javadoc说的
提供一种方法,用于跨多个页面请求或访问网站来识别用户,并存储有关该用户的信息
您的用例是什么?哪些类将使用该列表?用于显示的业务服务或JSP?基本上,我创建了两个表单,表单A和表单B。如果我提交表单A,将调用上面的doPost()方法并构造列表L。然后,如果我单击提交表单B,目标是表单B的doPost()方法能够拉入从表单A创建的列表L。因此,我的问题是如何从A的doPost()传递值供B使用。表单是否提交到同一个表单提交servlet?不,它们将进入两个不同的servlet类,每个类都有自己的doPost()所以HttpSession在不同的servlet之间共享——这正是我想要的。谢谢。正确。我补充了更多的细节。还要注意,session.getAttribute()
返回一个对象
;因此,在使用前需要进行类型铸造。