我需要将 Tomcat 7 嵌入到 android 应用程序中,以便它可以将本地 Web 应用程序作为独立应用程序运行。我能够在 Java 应用程序中嵌入 Tomcat。现在,我想为 Android 应用程序实现相同的目标。请建议我从哪里开始。I-jetty 和 NanoHttpd 已经可用于此目的,但我需要专门使用也嵌入在 android 应用程序中的 Tomcat。对于 Java 应用程序,我使用 Apache Tomcat 7 中的以下代码。我想知道如何在 Android 中使用相同的嵌入式 Tomcat API。如果我在 Activity 的 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 中使用相同的 Embedded Tomcat API。如果我在我的 Activity 的 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 应用程序。任何帮助表示赞赏。