Java 对servlet的多个ajax调用
我对servlet的AJAX调用有一个问题。 在一个页面上,我想对同一个servlet进行多个ajax调用, 但我无法让它按我所希望的方式工作: page.jsp: …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);
//按下按钮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“谢谢您的回答。现在我自己做了一些调度逻辑。和你现在的情况差不多。谢谢你的回答。现在我自己做了一些调度逻辑。和你现在的情况差不多。谢谢你的回答。由于我的分数限制,我不能给你学分:(谢谢你的回答。由于我的分数限制,我不能给你学分:(