2013-03-18 81 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