Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从HttpServlet';s doPost()方法?_Java_Servlets_Http Post - Fatal编程技术网

Java 如何从HttpServlet';s 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

我正在编写一个java类来扩展HttpServlet,从而覆盖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
,这基本上使列表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()
返回一个
对象
;因此,在使用前需要进行类型铸造。