1

サーブレット内の複数の異なるメソッドを呼び出すために、複数の場所からJQueryを呼び出すために使用しています。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")));
    }

しかし、これは私にはひどく不格好で非効率的であるように思われます。特に、メソッドの量が将来増加するためです。文字列を比較するためのより効率的な方法はありますか?または、メソッドごとに個別のサーブレットを作成する必要があります(そして、processRequest?で処理を実行するだけです。

4

3 に答える 3

3

安らかなWebサービスを検討することをお勧めします。RESTは、システムのリソースに焦点を当てたWebサービスを設計するための一連のアーキテクチャー原則を定義します。これには、リソースの状態が、異なる言語。

安らかなサーブレットを非常に簡単に実装するのに役立つ多くのオープンソースがあります...そのうちの1つはApacheWinkhttp ://incubator.apache.org/wink/です。

IBMDeveloperworksにも同じことに関する良い記事があります

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

他の選択肢:

SpringMVC

Apache 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 に答える