2013-03-18 79 views
1

我有一个问题,对一个servlet的AJAX调用。 在页面上我想使多个Ajax调用同一个servlet, 但我不能让它为我多么希望工作:多个ajax调用servlet

page.jsp:

...
//巴顿的压制

$.ajax({ 
     type: "POST", 
     url: "MatchingServlet", 
     data: matchingData_X, 
    success: function(data) { 
    $('.input_A).html(data); 
    } 
}); 
... 
// Button B pressed 
$.ajax({ 
     type: "POST", 
     url: "MatchingServlet", 
     data: matchingData_Y, 
    success: function(data) { 
    $('.input_B).html(data); 
    } 
}); 
... 

MatchingServlet.java:

... 
MethodA(...){ 
... 
} 

MethodB(...){ 
... 
} 

在这个项目之前,我习惯了java 6和Spring MVC,在这里你可以用注释做到这一点。在这个环境中,我得到了Java 1.4.2(即将迁移到Java 6)并且没有框架。

主要问题: 如何让那些2个Ajax调用转到不同的servlet方法?

我在这里找到的所有例子都只有一个ajax调用,它转到doGet或doPost方法。所以我希望甚至可以做我想做的事情。

由于提前, WvdL

+0

你可以在url中使用参数吗? url:“MatchingServlet”+“?method = A”or url:“MatchingServlet”+“?method = B” – Curlas 2013-03-18 08:56:24

回答

1

一个简单的方法是添加一个名为eg “办法”给你打电话给servlet,如:

$.ajax({ 
     type: "POST", 
     url: "MatchingServlet?method=methodA", 
     data: matchingData_X, 
    success: function(data) { 
    $('.input_A).html(data); 
    } 
}); 

然后,在servlet的doGet方法本身,读取参数和呼叫转接至其他方法之一。

public void doGet(HttpServletRequest request, 
        HttpServletResponse response) 
     throws ServletException, IOException { 

    String method = request.getParameter("method"); 
    if(method.equals("methodA"){ 
    methodA(); 
    }else if (method.equals("methodB"){ 
    methodB(); 
    }else{ 
    throw new IllegalArgumentExcpetion("'method' parameter required, must be 'methodA' or 'methodB' !"); 
    } 

}

MethodA(...){ 
... 
} 

MethodB(...){ 
... 
} 

改进这个基本技术可以是:

  • 使用反射,而不是如果... ...其他确定方法调用
  • 使用路径,而不是方法名称参数的最后一段:MatchingServlet/
  • 了methodA

但基本上,你必须自己编写调度逻辑!

+0

感谢你的答案,现在我自己做了一些调度逻辑,有点像你有现在。 – 2013-03-18 09:41:27

2

当使用一个servlet,你需要为使用的doGetdoPost方法,但是一旦你调用这些方法的实现是由你。我只是在doPost方法中添加一个条件来描绘所需的功能。条件会根据传递给servlet的请求参数调用适当的方法。在我的示例中,我将参数action传递给servlet,然后用它来辨别使用哪种方法。

public class MyServletextends HttpServlet { 

    public void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws IOException, ServletException { 
    if(request.getParameter("action").equals("methodA"){ 
     methodA(); 
    }else if(request.getParameter("action").equals("methodB"){ 
     methodB(); 
    } 
    } 

    public void methodA(){} 
    public void methodB(){} 
} 

在JavaScript中你只需要添加动作参数:

matchingData_X.action = "methodA"; //assuming matchignData_X is an object 
$.ajax({ 
     type: "POST", 
     url: "MatchingServlet", 
     data: matchingData_X, 
    success: function(data) { 
    $('.input_A).html(data); 
    } 
}); 
... 
// Button B pressed 
matchingData_X.action = "methodB"; //assuming matchignData_X is an object 
$.ajax({ 
     type: "POST", 
     url: "MatchingServlet", 
     data: matchingData_Y, 
    success: function(data) { 
    $('.input_B).html(data); 
    } 
}); 
+0

感谢您的回答。由于我的限制我不能给你信用额度:( – 2013-03-18 09:42:50

1

尝试增加你的Ajax调用一个 parameters: 'someParam' 部分然后在这个Servlet从请求得到的参数:

String param= request.getParameter("someParam"); 
      if (param.equals("someParam") { 
       MethodA(); 
      } 
+0

这就是我现在正在做的,但它似乎并没有为我做'正确'的方式。 – 2013-03-18 09:08:23

+0

我认为皮埃尔亨利的答案更多你在寻找,他提供了更多的细节,这可能是关键的“url:”MatchingServlet?method = methodA“” – SpaceCowboy 2013-03-18 09:10:48