码头在外部 java 库(a.k.a jar 文件)中设置资源库,而在 Android 中
jetty set resource base within an external java lib (a.k.a jar file) while in Android
我在 Android 上成功部署了 Jetty 7 嵌入式服务器,问题是我无法将其设置为访问 jar 文件 (jar文件在 PC 上运行完美,并具有独立的依赖项,作为外部库添加到 android)。我希望将此文件夹设置为我的嵌入式 Web 应用程序 resourceBase
这里是完整的代码
System.out.println(" server init attempt on port:"+curPort);
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
Server server = new Server(curPort);
server.setHandler(context);
context.setContextPath("/");
System.out.println(" servlet main initing");
DSSServer servlet = new DSSServer();
context.addServlet(new ServletHolder(servlet), "/DSS");
ResourceHandler res = new ResourceHandler();
System.out.println(" getting resBase:");
//[code above works fine]
//[!ATTENTION HERE!]
String resDir = "/dss_core/HTML5/webapp";
//This runs on PC fine but creates a null pointer exception in Android
String resurl = DSSServer.class.getResource(resDir).toExternalForm();
//Here is another non-working varient
//String resurl = servlet.getClass().getClassLoader().getResource(resDir).toExternalForm();
//[code below works fine]
res.setResourceBase(resurl);
res.setDirectoriesListed(true);
context.setHandler(res);
System.out.println(" servlet main inited");
这是造成空指针异常的代码块
String resDir = "/dss_core/HTML5/webapp";
//This runs on PC fine but creates a null pointer exception in Android
String resurl = DSSServer.class.getResource(resDir).toExternalForm();
//Here is another non-working variant
//String resurl = servlet.getClass().getClassLoader().getResource(resDir).toExternalForm();
在 Android 中访问外部 java 库资源文件夹的正确方法是什么,我知道 Android 有它自己的资源管理系统,但我不能把本机 Android 代码在我的外部 java 库中,因为它是专门用于 PC 的 jar 文件。
我可能会做的另一种方法是将我的资源库提取到本地文件夹,但我不想这样做,因为它会留下大量临时文件
顺便说一句 Android 从我的 java lib
中一次访问一个文件没有问题
//Accessing individual files work on Android
InputStream input = DatabaseManager.class.getResourceAsStream("/h2db.mv.db");
这似乎是不可能的,我最终将文件提取到 Android 中的某处(例如 /mnt/sdcard/.myApp/temp)并手动复制每个文件到那里
String resDir = "/dss_core/HTML5/webapp";
String resurl = dss_core.util.DRYcode.platformIsAndroid()?"file:/mnt/sdcard/protected/"+servletName:
DRYcodeWeb.class.getResource(resDir).toString();
if (dss_core.util.DRYcode.platformIsAndroid())
for (String str:resourceList)
DRYcode.copy_("/dss_core/HTML5/webapp/"+str,"/mnt/sdcard/protected/"+servletName+"/"+str);
我在 Android 上成功部署了 Jetty 7 嵌入式服务器,问题是我无法将其设置为访问 jar 文件 (jar文件在 PC 上运行完美,并具有独立的依赖项,作为外部库添加到 android)。我希望将此文件夹设置为我的嵌入式 Web 应用程序 resourceBase
这里是完整的代码
System.out.println(" server init attempt on port:"+curPort);
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
Server server = new Server(curPort);
server.setHandler(context);
context.setContextPath("/");
System.out.println(" servlet main initing");
DSSServer servlet = new DSSServer();
context.addServlet(new ServletHolder(servlet), "/DSS");
ResourceHandler res = new ResourceHandler();
System.out.println(" getting resBase:");
//[code above works fine]
//[!ATTENTION HERE!]
String resDir = "/dss_core/HTML5/webapp";
//This runs on PC fine but creates a null pointer exception in Android
String resurl = DSSServer.class.getResource(resDir).toExternalForm();
//Here is another non-working varient
//String resurl = servlet.getClass().getClassLoader().getResource(resDir).toExternalForm();
//[code below works fine]
res.setResourceBase(resurl);
res.setDirectoriesListed(true);
context.setHandler(res);
System.out.println(" servlet main inited");
这是造成空指针异常的代码块
String resDir = "/dss_core/HTML5/webapp";
//This runs on PC fine but creates a null pointer exception in Android
String resurl = DSSServer.class.getResource(resDir).toExternalForm();
//Here is another non-working variant
//String resurl = servlet.getClass().getClassLoader().getResource(resDir).toExternalForm();
在 Android 中访问外部 java 库资源文件夹的正确方法是什么,我知道 Android 有它自己的资源管理系统,但我不能把本机 Android 代码在我的外部 java 库中,因为它是专门用于 PC 的 jar 文件。
我可能会做的另一种方法是将我的资源库提取到本地文件夹,但我不想这样做,因为它会留下大量临时文件
顺便说一句 Android 从我的 java lib
中一次访问一个文件没有问题 //Accessing individual files work on Android
InputStream input = DatabaseManager.class.getResourceAsStream("/h2db.mv.db");
这似乎是不可能的,我最终将文件提取到 Android 中的某处(例如 /mnt/sdcard/.myApp/temp)并手动复制每个文件到那里
String resDir = "/dss_core/HTML5/webapp";
String resurl = dss_core.util.DRYcode.platformIsAndroid()?"file:/mnt/sdcard/protected/"+servletName:
DRYcodeWeb.class.getResource(resDir).toString();
if (dss_core.util.DRYcode.platformIsAndroid())
for (String str:resourceList)
DRYcode.copy_("/dss_core/HTML5/webapp/"+str,"/mnt/sdcard/protected/"+servletName+"/"+str);