2014-05-06 134 views
-1

我有两个servlet。 第一个(的doGet)显示我的样式与第二(的doPost)处理表单两个servlets之间的数据传输

这是我的第一个servlet

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    { 
     Nodes nodes = nodes_dao.start(request); 
     int id = nodes.getId_node(); 

     request.setAttribute("nodes", nodes); 
     request.setAttribute("id", id); 
     request.getRequestDispatcher(VUE).forward(request, response); 
    } 

,这里是我的第二个servlet

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    { 
     String question = null; 
     String result = null; 

     question = request.getParameter("question"); 
     result = request.getParameter("result"); 
     Node_dao dao = new Node_dao(); 

     try 
     { 
      dao.insert_result(result); 
      int left_id = dao.select_left_id(result); 
      dao.insert_question(question, left_id); 


     } 

例如,我如何在第二个servlet中获取第一个servlet的id?

感谢

+0

您可以使用会话,请求或servlet上下文共享,请参阅:http://stackoverflow.com/questions/123657/how-can-i-share-a-variable-or-object-between-two-或更多的servlets –

+0

把它放在一个隐藏的输入字段中?它不像你直接从servlet A到servlet B,在两者之间有一个提交表单数据的客户端(浏览器)。至少这就是我的想法,它非常模糊你发布的内容,因为在那里也有一个前锋... – Gimby

+0

为什么有人会建议他在添加一个隐藏的输入时明确将id添加到请求属性中,然后转发?上面的代码中甚至没有HTML表单。 – developerwjk

回答

0

你已经在第一个servlet中调用request.setAttribute("id", id);,然后转发到第二个。所以你缺少的是在第二个servlet中调用int id = (int)request.getAttribute("id");

然而,还有第二个问题。您不能通过转发神奇地更改METHOD类型。如果原始请求是GET,转发后仍然是GET。所以你的第二个servlet需要在doGet而不是doPost中处理请求。

+0

好的谢谢,我知道这个问题,但在第一个jsp中,这是一系列使用get方法的问题。在第二个jsp中,用户使用方法帖子插入一个新问题和新结果。所以,我有一个servlet与doGet和第二个与doPost。没有解决方案?谢谢 – Biohazard401