多个ajax调用servlet

时间:2013-03-18 08:51:23

标签: java javascript jquery ajax servlets

我对servlet的AJAX调用有问题。 在一个页面上,我想对同一个servlet进行多次ajax调用, 但我不能按照我的要求去工作:

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),没有框架。

主要问题: 如何让这两个ajax调用转到不同的servlet方法?

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

提前致谢, WvdL

3 个答案:

答案 0 :(得分: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);
     }
 });

答案 1 :(得分:2)

一个简单的解决方案是添加一个名为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(...){
...
}

这项基本技术的改进可能是:

  • 使用反射而不是if ... else ...来确定要调用的方法
  • 使用路径的最后一段而不是方法名称的参数:MatchingServlet / methodA

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

答案 2 :(得分:1)

尝试添加 parameters: 'someParam' ajax调用中的部分然后在Servlet上获取请求中的参数:

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