Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对servlet的多个ajax调用_Java_Javascript_Jquery_Ajax_Servlets - Fatal编程技术网

Java 对servlet的多个ajax调用

Java 对servlet的多个ajax调用,java,javascript,jquery,ajax,servlets,Java,Javascript,Jquery,Ajax,Servlets,我对servlet的AJAX调用有一个问题。 在一个页面上,我想对同一个servlet进行多个ajax调用, 但我无法让它按我所希望的方式工作: page.jsp: … //按下按钮A $.ajax({ type: "POST", url: "MatchingServlet", data: matchingData_X, success: function(data) { $('.input_A).html(data);

我对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:

在这个项目之前,我已经习惯了Java6和SpringMVC,在这里你可以通过注释来完成这项工作。在这种环境下,我得到了Java1.4.2(迁移到Java6Soonish)而没有框架

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

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

提前感谢,,
WvdL

当使用servlet时,您需要使用
doGet
doPost
方法,但是一旦调用这些方法,实现取决于您。我只需在
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);
     }
 });

当使用servlet时,您需要使用
doGet
doPost
方法,但是一旦调用这些方法,实现就取决于您了。我只需在
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);
     }
 });
尝试添加一个
参数:“someParam”
在ajax调用中,然后在Servlet上从请求中获取参数:

String param= request.getParameter("someParam");
            if (param.equals("someParam") {
                MethodA();
            }
尝试添加一个
参数:“someParam”
在ajax调用中,然后在Servlet上从请求中获取参数:

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

一个简单的解决方案是向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' !");
  }
}

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

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

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

一个简单的解决方案是在调用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' !");
  }
}

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

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

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

可以在url中使用参数吗?url:“MatchingServlet”+“?方法=A”或url:“MatchingServlet”+“?方法=B”您可以在url中使用参数吗?url:“MatchingServlet”+“?method=A”或url:“MatchingServlet”+“?method=B”这是我现在正在做的,但它似乎不是为我做这件事的“正确”方式。我认为Pierre Henry的答案更符合你的要求。他提供了更多的细节。这可能是关键的“url:“MatchingServlet?method=methodA”“这是我现在正在做的,但它似乎不是为我做这件事的“正确”方式。我认为皮埃尔·亨利的答案更符合你的要求。他提供了更多的细节。这可能是关键的“url:”MatchingServlet?method=methodA“谢谢您的回答。现在我自己做了一些调度逻辑。和你现在的情况差不多。谢谢你的回答。现在我自己做了一些调度逻辑。和你现在的情况差不多。谢谢你的回答。由于我的分数限制,我不能给你学分:(谢谢你的回答。由于我的分数限制,我不能给你学分:(