1

我用来从多个地方JQuery调用 a来调用 servlet 中的多个不同方法。Java Servlet目前,我传递了一个字符串(称为 methodName),然后使用不断增加的 IF ELSE 块来查看要调用哪个函数:

public String methodCaller(String methodName) throws SQLException, IOException
{
    if(methodName.equals("method1"))
    {
        return method1(attr("permit"));
    }
    else if(methodName.equals("method2"))
    {
        return method2(attr("ring"));
    }
    else if(methodName.equals("method3"))
    {
        return method3(attr("gridRef"));
    }
    else if(methodName.equals("method4"))
    {
        return method4(attr("ring"));
    }
    else if(methodName.equals("method6"))
    {
        return method6(attr("ring"), Integer.parseInt(attr("quantity")));
    }

然而,这对我来说似乎非常笨拙和低效,尤其是在未来方法的数量会增加的情况下。有没有更有效的方法来比较字符串?或者我应该简单地为每个方法制作一个单独的 servlet(并简单地在processRequest?

4

3 回答 3

3

我建议,您应该考虑使用 RESTful Web 服务。REST 定义了一组架构原则,您可以通过这些架构原则设计专注于系统资源的 Web 服务,包括各种客户端如何通过 HTTP 处理和传输资源状态不同语言。

有许多开源可以帮助您非常轻松地实现 restful servlet...其中之一是 Apache Wink http://incubator.apache.org/wink/

IBM Developerworks 中有同样的好文章

http://www.ibm.com/developerworks/web/library/wa-apachewink1/

http://www.ibm.com/developerworks/web/library/wa-apachewink2/index.html

http://www.ibm.com/developerworks/web/library/wa-apachewink3/index.html

其他选择:

春季MVC

阿帕奇 CXF http://cxf.apache.org/docs/jax-rs.html

于 2012-11-19T10:31:07.863 回答
2

我建议将您的每个方法都设为实现简单接口的对象。在您的类中,创建一个 HashMap 将接口的每个实现链接到其各自的键。

界面

public interface MyMethod {
   public String call();
}

执行

   public class MethodOne implements MyMethod{

   }

映射和调用

    private Map<String, MyMethod> mappings = new HashMap<String,MyMethod>();

    static{
        mappings.put("method1", new MethodOne());
        //.. other mappings
    }

   public String methodCaller(String methodName) throws SQLException, IOException
   {
      MyMethod myMethod = mappings.get(methodName);
      return myMethod.call();
   }
于 2012-11-19T10:52:20.537 回答
0

我会简单地开始使用整数。

在你的 javascript 中有这样的功能

function convertmethod(methodname)
    {
    thereturn = -1;
    switch(methodname) {
        case "Method1" : thereturn = 1;break;
        case "Method2" : thereturn = 2;break;
        case "Method3" : thereturn = 3;break;
        case "Method4" : thereturn = 4;break;
        }
    return thereturn;
    }

然后在你的java代码中你也可以使用一个开关

public String methodCaller(int methodName) throws SQLException, IOException
    {
    switch(methodName) 
        {
        case 1: return method1(attr("permit"));break;
        case 2: return method2(attr("permit"));break;
        case 3: return method3(attr("ring"));break;
        case 4: return method4(attr("gridRed"));break;
        }

    }
于 2012-11-19T10:30:47.717 回答