处理多个Post请求的Servlet

10

我有一个名为EditEvent的Servlet和一个包含两个表单的JSP页面,一个用于添加新事件,另一个用于删除事件。

使用两个单独的servlet处理一个JSP是否被认为是良好的实践? 如果不是,你会如何处理来自一个servlet的两个POST请求?即添加事件和删除事件请求。

谢谢

2个回答

14

为了处理同一servlet的多个请求,您需要约定具有请求参数“ACTION”的合同。然后在表单中添加此参数作为隐藏字段,并使用值如“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();
               }
      }

}

使用隐藏字段的聪明想法。 - Raju Kumar
2
隐藏字段是不必要的。只需使用按下按钮的名称即可。我认为这很明显/琐碎,但显然不是,所以我编辑了我的答案,并附上了HTML示例。 - BalusC

11

这完全取决于当前和未来的功能要求,您可以自行决定。一个简单的替代方案是在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}" />

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接