Servlet处理多个帖子请求

Raj*_*mar 10 jsp servlets java-ee

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

使用两个单独的servlet来处理一个JSP被认为是一种好习惯吗?如果没有,你将如何处理来自一个servlet的两个post请求?即添加事件和删除事件请求.

干杯

Pok*_*uri 13

为了处理同一个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();
               }
      }

}
Run Code Online (Sandbox Code Playgroud)

  • 隐藏的字段是不必要的.只需使用按下按钮的名称即可.我认为这很明显/琐碎,但显然不是,所以我用HTML的例子编辑了我的答案. (2认同)

Bal*_*usC 11

这都是你的选择.这完全取决于当前和未来的功能要求.一个简单的替代方法是if在servlet中引入一个或两个块,在其中检查按下了哪个按钮:

if (request.getParameter("add") != null) {
    // Perform add.
}
else if (request.getParameter("remove") != null) {
    // Perform remove.
}
Run Code Online (Sandbox Code Playgroud)

假设按钮看起来像这样:

<input type="submit" name="add" value="Add" />
<input type="submit" name="remove" value="Remove" />
Run Code Online (Sandbox Code Playgroud)

一个复杂的替代方案是转向普通的MVC框架,您只需指定特定的操作方法即可.例如,JSF:

<h:commandButton value="Add" action="#{bean.add}" />
<h:commandButton value="Remove" action="#{bean.remove}" />
Run Code Online (Sandbox Code Playgroud)