2012-02-24 23 views
0

我遇到了2個servlet的問題。基本上我有一個表單的jsp頁面,當我點擊提交時,我需要從這個jps獲取所有變量,以便將它們注入第二個(input type =「hidden」),最後一起提交。使用servlet通過2個表單發送變量

我的servlet 1(添加客戶端)

@Override 
protected void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    System.out.println("salut 1 "); 
    request.getRequestDispatcher("/JSP/Template/BankAdvisor/AddClient.jsp").forward(request, response); 
} 

@Override 
protected void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 

    String firstname = request.getParameter("firstname"); 
    String lastname = request.getParameter("lastname"); 
    String email = request.getParameter("email"); 
    String address = request.getParameter("address"); 
    String city = request.getParameter("city"); 
    String zipcode = request.getParameter("zipcode"); 
    String phone = request.getParameter("phone"); 

    if (firstname != null && lastname != null && email != null && address != null && city != null && zipcode != null && phone != null) { 

     if (!lastname.isEmpty() && !firstname.isEmpty() && !email.isEmpty() && !address.isEmpty() && !city.isEmpty() && !zipcode.isEmpty() && !phone.isEmpty()) { 

      request.setAttribute("firstname", firstname); 
      request.setAttribute("lastname", lastname); 
      request.setAttribute("email", email); 
      request.setAttribute("address", address); 
      request.setAttribute("city", city); 
      request.setAttribute("zipcode", zipcode); 
      request.setAttribute("phone", phone); 
      request.getRequestDispatcher("/BankAdvisor/AddAccount").forward(request, response); 

     } else { 

      response.sendRedirect(getServletContext().getContextPath() + "/BankAdvisor/AddClient"); 
     } 

    } else { 

     response.sendRedirect(getServletContext().getContextPath() + "/BankAdvisor/AddClient"); 
    } 

} 

我的servlet 2(添加帳戶)

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    request.getRequestDispatcher("/JSP/Template/BankAdvisor/AddAccount.jsp").forward(request, response); 
    String firstname = request.getParameter("firstname"); 
    String lastname = request.getParameter("lastname"); 
    String email = request.getParameter("email"); 
    String address = request.getParameter("address"); 
    String city = request.getParameter("city"); 
    String zipcode = request.getParameter("zipcode"); 
    String phone = request.getParameter("phone"); 
} 

@Override 
protected void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 

    String firstname = request.getParameter("firstname"); 
    String lastname = request.getParameter("lastname"); 
    String email = request.getParameter("email"); 
    String address = request.getParameter("address"); 
    String city = request.getParameter("city"); 
    String zipcode = request.getParameter("zipcode"); 
    String phone = request.getParameter("phone"); 

    //The two news variables 
    String accountName = request.getParameter("accountname"); 
    String accountType = request.getParameter("accounttype"); 

    if (firstname != null && lastname != null && email != null && address != null && city != null && zipcode != null && phone != null) { 

     if (!lastname.isEmpty() && !firstname.isEmpty() && !email.isEmpty() && !address.isEmpty() && !city.isEmpty() && !zipcode.isEmpty() && !phone.isEmpty()) { 

     // ACTION 
     } else { 
      response.sendRedirect(getServletContext().getContextPath() + "/BankAdvisor/AddClient"); 
     } 

    } else { 
response.sendRedirect(getServletContext().getContextPath() + "/BankAdvisor/AddClient"); 
    } 
} 

感謝

回答

0

在servlet的1你應該使用:

getServletContext().getRequestDispatcher("/BankAdvisor/AddAccount").forward(request, response); 

而不是:

request.getRequestDispatcher("/BankAdvisor/AddAccount").forward(request, response); 

因爲與ServletRequest#getRequestDispatcher(java.lang.String),如果路徑開始於「/」它被解釋爲相對於當前上下文根(即當前請求的上下文路徑)。

  • 示例:如果在http://test/myapp/toto接收到一個請求,將上轉發http://test/myapp/toto/BankAdvisor/AddAccount

而用ServletContext#getRequestDispatcher(java.lang.String)路徑被解釋爲相對於當前上下文根(即當前Web應用程序的上下文路徑)。

  • 例如:如果您在http://test/myapp/toto收到請求時,它會在http://test/myapp/BankAdvisor/AddAccount轉發如果Web應用程序上下文根是http://test/myapp
+0

究竟如何使在這種特殊情況下的區別?如果它真的解決了OP的問題(考慮到答案目前已被接受),那麼真正的原因肯定應該在其他地方。 – BalusC 2012-02-25 04:08:34

+0

我已更新我的答案以獲取更多詳細信息。 – 2014-12-30 10:01:25

+0

OP代碼中的'response.sendRedirect()'行只是不確認這一點。 – BalusC 2014-12-30 10:07:59