我对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
答案 0 :(得分:2)
使用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中,您只需要添加动作参数:
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(...){
...
}
这项基本技术的改进可能是:
但基本上,你必须自己编写调度逻辑!
答案 2 :(得分:1)
尝试添加
parameters: 'someParam'
ajax调用中的部分然后在Servlet上获取请求中的参数:
String param= request.getParameter("someParam");
if (param.equals("someParam") {
MethodA();
}