【问题标题】:Servlet handling multiple post requests处理多个 post 请求的 Servlet
【发布时间】:2012-04-02 13:33:18
【问题描述】:

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

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

干杯

【问题讨论】:

    标签: jsp jakarta-ee servlets


    【解决方案1】:

    这都是你的选择。这完全取决于当前和未来的功能需求。一个简单的替代方法是在 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}" />
    

    【讨论】:

      【解决方案2】:

      要通过同一个 servlet 处理多个请求,您必须签订合同以具有像“ACTION”这样的请求参数。然后在您的表单中将此添加为隐藏字段,其中包含“添加”和“删除”等值。因此,在 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();
                     }
            }
      
      }
      

      【讨论】:

      • 巧妙地使用隐藏字段。
      • 隐藏字段是不必要的。只需使用按下按钮的名称即可。我认为这很明显/微不足道,但显然不是,所以我用 HTML 示例编辑了我的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-28
      • 1970-01-01
      • 2018-10-17
      相关资源
      最近更新 更多