4

ローカル Web アプリケーションをスタンドアロン アプリケーションとして実行できるように、Tomcat 7 を Android アプリケーションに埋め込む必要があります。Tomcat を Java アプリケーションに埋め込むことができます。今、私は Android アプリケーションでも同じことを達成したいと考えています。どこから始めればよいか教えてください。I-jetty と NanoHttpd はこの目的のために既に利用可能ですが、特に Android アプリケーションに埋め込まれている Tomcat を使用する必要があります。Java アプリケーションの場合、Apache Tomcat 7 の次のコードを使用しています。この同じ埋め込み Tomcat API を Android で使用する方法を知りたいです。アクティビティの OnCreate() メソッドで Android でこの API を使用する場合

import org.apache.catalina.startup.Tomcat;
import org.apache.catalina.core.StandardServer;
import org.apache.catalina.core.AprLifecycleListener;
import org.apache.catalina.LifecycleException;
import javax.servlet.ServletException;
public class EmbeddedTomcat {
    private Tomcat tomcat;
    private void startTomcat() throws ServletException, LifecycleException {
        this.tomcat = new Tomcat();
        this.tomcat.setPort(8080); #2
        this.tomcat.setBaseDir("."); #3
        // Add AprLifecycleListener 
        StandardServer server = (StandardServer) this.tomcat.getServer();
        AprLifecycleListener listener = new AprLifecycleListener();
        server.addLifecycleListener(listener); #4
        String contextPath = "/myapp";
        String appBase = "/opt/tomcat7/webapps/examples";
        this.tomcat.addWebapp(contextPath, appBase); #5
        this.tomcat.start(); #6
    }
    private void stopTomcat() throws LifecycleException {
        this.tomcat.stop(); #7
    }
    public static void main(String args[]) {
        try {
            EmbeddedTomcat tomcat = new EmbeddedTomcat(); #8
            tomcat.startTomcat();
            Thread.sleep(100000);
            tomcat.stopTomcat();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Android で同じ組み込み Tomcat API を使用する方法を知りたいです。次のように、アクティビティの onCreate() メソッドで Android でこの API を使用する場合:

import javax.servlet.ServletException;

import org.apache.catalina.LifecycleException;
import org.apache.catalina.core.AprLifecycleListener;
import org.apache.catalina.core.StandardServer;
import org.apache.catalina.startup.Tomcat;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;

public class MainActivity extends Activity {
    private Tomcat tomcat;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        try {
            startTomcat();
        } catch (ServletException e) {
            // TODO Auto-generated catch block
        e.printStackTrace();
        } catch (LifecycleException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    private void startTomcat() throws ServletException, LifecycleException {
    this.tomcat = new Tomcat();
    this.tomcat.setPort(8080);
    this.tomcat.setBaseDir(".");
    // Add AprLifecycleListener 
    StandardServer server = (StandardServer) this.tomcat.getServer();
    AprLifecycleListener listener = new AprLifecycleListener();
    server.addLifecycleListener(listener);
    String contextPath = "/myapp";
    String appBase = "/opt/tomcat7/webapps/examples";
    this.tomcat.addWebapp(contextPath, appBase);
    this.tomcat.start();
    }
    private void stopTomcat() throws LifecycleException {
    this.tomcat.stop();
    }
}

これを実行すると、「Dalvik への変換がエラー 1 で失敗しました」というエラーが表示されます。私がやろうとしていることが不可能な場合は、Tomcat を Android アプリケーションに埋め込む他の方法を提案してください。どんな助けでも大歓迎です。

4

0 に答える 0