2

我目前正在制作一个Java Servlet可以响应 jquery 调用并发送回我的网页使用的数据。但这只是使用该doGet方法的响应。

有没有办法在 a 中有多个方法Servlet并分别用 调用它们JQuery

即有一个名为Hello 的方法,它返回一个字符串“Hello”,另一个名为Bye 的方法返回一个字符串“Bye”。有没有办法使用Jquery或其他一些技术来做这种事情?

我对 servlet 很陌生,所以我仍然不确定它们完全能够做什么。那么doGet“进入”的唯一方法是什么,而我只是从那里分支响应?

4

3 回答 3

3

使用 Servlet,您可以调用服务方法,因此对于您的场景,您可以传递参数来决定从哪个方法调用doGet()

您还可以使用标头检查来识别请求是否来自 AJAX

还有其他可用的技术可以让您直接调用方法参见 JSF、DWR

于 2012-06-29T05:11:31.633 回答
0

Servlet 容器Http从 Servlet 3.0 开始支持自定义方法。例如,

public void doHello(HttpServletRequest req, HttpServletResponse res) {
   //implement your custom method
}

Servlet 中的上述方法可以使用hellohttp 方法调用。

但我不确定是否jquery支持调用自定义 HTTP 方法。

如果它没有,那么你唯一的选择。

  • 使用 GET 和 action 参数调用 Servlet。
  • 读取动作参数并使用反射调用方法。
于 2012-06-29T05:40:33.780 回答
0

我个人在我的控制器(servlet)中使用反射,这基本上让我实现了这一点。

如果我有一个名为 UserController 的 servlet

调用 servlet 的主 url 将是 /user。知道了这一点,我总是将我的第一个参数传递为 ?action=add

然后在我的 servlet 中,我有一个名为 add 或 actionAdd 的方法。无论您喜欢哪个。

然后我使用以下代码;

String str = String str = request.getParameter("action").toLowerCase();
Method method = getClass().getMethod(str, HttpServletRequest.class, HttpServletResponse.class);
method.invoke(this, request, response);

解释:

str 将具有动作参数值,在这种情况下添加。方法方法将是对具有给定名称(str)及其预期参数类型的方法的引用。

然后我调用该方法,传递上下文、请求和响应。

add 方法看起来像这样;

public void add(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { 
    //do add stuff

        String url = "/user/index.jsp";
        RequestDispatcher dispatcher = context.getRequestDispatcher(url);
        request.setAttribute("User", user);
        dispatcher.forward(request, response); 
}

我不知道只传回一个字符串。但这应该让你有一个基本的想法。

请注意,反射可能会让您付出代价,尽管它不应该像这样真正影响您。由于方法名称/签名需要完美匹配,因此很容易出错。

所以从 jquery 你会做一个 ajax 请求到 url:

 localhost/projectname/user/add (if you use urlrewrite)
 or
 localhost/projectname/user?action=add (if you dont)
于 2012-06-29T05:23:34.630 回答