2012-03-17 118 views
8

我有一個Servlet名稱EditEvent和一個包含兩個表單的JSP。 一個用於添加新事件,另一個用於刪除事件。處理多個帖子請求的Servlet

使用兩個獨立的servlet處理一個JSP是否被認爲是一種很好的做法? 如果不是,你將如何處理來自一個servlet的兩個post請求?即添加事件和刪除事件請求。

歡呼

回答

10

,用來處理同一個Servlet的多個請求,你必須做出的合同,有一個像「行動」的請求參數。然後在你的表單中添加這個隱藏字段,其值爲'ADD'和'REMOVE'。因此,在doPost()中,您可以檢查此參數值,並可以在同一個servlet中調用相應的處理方法。

class YourServlet extends HttpServlet{ 

     public void doPost(HttpReq req, HttpResp resp){ 
       String action = reg.getParameter('ACTION'); 
       if('ADD'.equals(action)){ 
        addEvent(); 
       } 
       if('REMOVE'.equals(action)){ 
        removeEvent() 
       } else { 
        defaultAction(); 
       } 
     } 

} 
+0

使用隱藏字段的聰明想法。 – 2012-03-17 03:18:28

+2

隱藏的字段是不必要的。只需使用按下的按鈕的名稱即可。我認爲這是明顯的/微不足道的,但顯然不是,所以我用HTML的一個例子編輯了我的答案。 – BalusC 2012-03-17 04:07:15

9

這都是你的選擇。它取決於當前和未來的功能要求。一個簡單的替代方法是隻在servlet引入一個或兩個if嵌段,其中你檢查是被按下了哪個按鈕:

if (request.getParameter("add") != null) { 
    // Perform add. 
} 
else if (request.getParameter("remove") != null) { 
    // Perform remove. 
} 

假設按鈕看起來像這樣:

<input type="submit" name="add" value="Add" /> 
<input type="submit" name="remove" value="Remove" /> 

複雜替代方案是步入一個正常的MVC框架,您只需指定特定的操作方法。例如,JSF

<h:commandButton value="Add" action="#{bean.add}" /> 
<h:commandButton value="Remove" action="#{bean.remove}" />