2012-03-17 85 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}" />