1

我对 servlet 的 AJAX 调用有疑问。在一个页面上,我想对同一个 servlet 进行多个 ajax 调用,但我无法让它按我想要的方式工作:

page.jsp:

...
// 按下按钮 A

 $.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

4

3 回答 3

3

一种简单的解决方案是在调用 servlet 时添加一个名为“method”的参数,例如:

$.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

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

于 2013-03-18T09:09:25.727 回答
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 中,您只需要添加 action 参数:

 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);
     }
 });
于 2013-03-18T08:58:03.303 回答
1

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

String param= request.getParameter("someParam");
            if (param.equals("someParam") {
                MethodA();
            }
于 2013-03-18T08:59:24.123 回答