本文主要跟大家分享如何将一台Android设备打造成一个web服务器使用。

  编译i-jetty

  1、将源码download下来,http://code.google.com/p/i-jetty/downloads/list

  2、解压文件,进入pom.xml所在目录,执行命令:mvncleaninstall,参照(http://code.google.com/p/i-jetty/wiki/BuildInstructions)

  执行过程中,出现了异常导致失败,是生成classes.dex时内存溢出的问题,我们用Eclipse来解决吧。

  3、创建i-jetty的android项目,将下载的i-jetty源码覆盖进去,

  4、将下面目录下的jar引入到i-jetty项目中:

  C:\DocumentsandSettings\troyz\.m2\repository\org\eclipse\jetty

  还需要servlet-api-2.5.jar。

  5、编译并将i-jetty安装到设备中。

  将web项目发布到设备上去。参照(http://code.google.com/p/i-jetty/wiki/DownloadableWebapps)

  因为android上的java虚拟机不能直接解释执行.class文件,所以首先需要把web项目中的.class文件和.jar文件转换成虚拟机能识别的.dex文件

  这里假设web项目的目录在:E:\demo。

  1、需要将WEB-INF/classes目录和lib目录下的文件,用dx命令处理成classes.dex并放到lib目录下。

  dx.bat--dex--output=E:\demo\WEB-INF\lib\classes.zipE:\demo\WEB-INF\classesE:\demo\WEB-INF\lib

  2、打成war包。

  cd E:\demo

  jar-cvfdemo.war*.*

  3、生成classes.zip后,可以将原先的.class和.jar删除掉。

  4、通过i-jetty的download功能,把war下载到设备上去,也可以直接把demo.war放到/sdcard/jetty/webapps/目录下。

  5、启动i-jetty服务器。

  i-jetty对jsp的支持暂时似乎不完美,可能是我没有找到好的方式,对html是支持的,包括html中的js,支持servlet。

  androidtablet(sdk3.0)上,i-jetty的类加载器无法动态解压加载classes.zip,报以下异常:

  dalvikvm(22984):Can'topendexcache'/data/dalvik-cache/mnt@sdcard@JettyContext217761537@webinf@WEB-INF@lib@classes.zip@classes.dex':Nosuchfileordirectory

  原因是/data/dalvik-cache目录不可写。

  http://code.google.com/p/android/issues/detail?id=966

  有一种解决方案:在打包android项目时,把web项目中的java文件和jar文件放到android项目中一起打包,这样就避免让i-jetty动态加载dex文件了。war包中就不需要classes.zip,jar,.class文件了。但是这种方案有一个缺点:不能动态部署新的war包。

  6、如果要在Web程序中,使用android的Context,需要这样做:

Java代码
  1. public void init(ServletConfig config) throws ServletException
  2. {
  3. super.init(config);
  4. android.content.ContentResolver resolver = (android.content.ContentResolver) config.getServletContext().getAttribute("org.mortbay.ijetty.contentResolver");
  5. android.content.Context androidContext = (android.content.Context) config.getServletContext().getAttribute("org.mortbay.ijetty.context");
  6. }

Android设备上i-jetty环境的搭建-手机上的web服务器的更多相关文章

  1. 非root Android设备上Tcpdump的实现

    通常我们在Android应用中执行某个命令时会使用"Runtime.getRuntime().exec("命令路径")"这种方式,但是当我们执行抓包操作时,使用 ...

  2. 在ios android设备上使用 Protobuf (使用dll方式)

    http://game.ceeger.com/forum/read.php?tid=13479 如果你的工程可以以.Net 2.0 subset模式运行,请看这个帖子中的方法. 地址:http://g ...

  3. (转)在ios android设备上使用 Protobuf (使用dll方式)

    自:http://game.ceeger.com/forum/read.php?tid=13479 如果你的工程可以以.Net 2.0 subset模式运行,请看这个帖子中的方法. 地址:http:/ ...

  4. android设备上运行i-jetty服务

    android设备上运行i-jetty服务: 1) i-jetty安装 本人小菜一个,i-jetty源码有好几个文件,不知道怎么运行起来,于是找了一个现成可运行的i-jetty工程(感谢这位同学的分享 ...

  5. 如何查看Android设备上的分区信息

    Android设备上,一般都会存在一块eMMC存储芯片来存放系统和用户数据,甚至部分的引导程序. 一般设备出厂时,各个厂商都会将这块存储芯片分成很多的分区,每个分区内存放不同的内容.具体分区的布局每个 ...

  6. Android设备上的逐像素碰撞检测

    介绍 我正在我的Android设备上开发一款游戏,不用说,因为我想要接触到尽可能多的用户,我做到了 省略了硬件加速.因此,我需要编写能够在大多数设备上运行的最快的代码.我从一个简单的表面视图开始 并使 ...

  7. 利用 nodeJS 搭建一个简单的Web服务器(转)

    下面的代码演示如何利用 nodeJS 搭建一个简单的Web服务器: 1. 文件 WebServer.js: //-------------------------------------------- ...

  8. 如何通过Chrome远程调试android设备上的Web网站

    网上的帖子很多,但很多都是老版本的,试过了,根本不管用,花了一天时间,终于在本机试验通过了,特记录下来,以备用.有需要的朋友也可以参考.先上一张图,看看PC端chrome上调试的效果: 左边是手机的模 ...

  9. windows上JSP开发环境全搭建

    JSP开发环境全搭建 最近需要用到JSP做项目,所以要配置JSP的开发环境,总结一下配置步骤以备以后再配置需要. 配置JAVA开发环境,配置JDK 下载JDK,在这里下载开发所需的JDK,可以根据自己 ...

随机推荐

  1. poj 1129 Channel Allocation ( dfs )

    题目:http://poj.org/problem?id=1129 题意:求最小m,使平面图能染成m色,相邻两块不同色由四色定理可知顶点最多需要4种颜色即可.我们于是从1开始试到3即可. #inclu ...

  2. NOI2004 小H的小屋

    还是纯粹不会啊……到底该怎么办 http://blog.sina.com.cn/s/blog_86942b1401016m3g.html http://www.cnblogs.com/datam-cy ...

  3. RMAN数据库异机迁移步骤

    --RMAN数据库异机迁移步骤----------------------------2013/09/28 测试环境:AIX+ora11g   一. source数据库准备.   1.获取数据文件编号 ...

  4. 精简版、GHOST版win7,arduino驱动安装失败的解决方法分享

    arduino组件安装驱动不成功,总是提示系统找不到指定文件. 原因是因为精简版缺少了两个关键的系统文件,导致无法安装.mdmcpq.inf  和 usbser.sys 解决方案详见帖子http:// ...

  5. JavaEE基本了解

    1.  为什么需要JavaEE 我们编写的JSP代码中,由于大量的显示代码和业务逻辑混淆在一起,彼此嵌套,不利于程序的维护和扩展.当业务需求发生变化的时候,对于程序员和美工都是一个很重的负担. 为了程 ...

  6. [JS前端开发] js/jquery控制页面动态加载数据 滑动滚动条自动加载事件

    页面滚动动态加载数据,页面下拉自动加载内容 相信很多人都见过瀑布流图片布局,那些图片是动态加载出来的,效果很好,对服务器的压力相对来说也小了很多 有手机的相信都见过这样的效果:进入qq空间,向下拉动空 ...

  7. CCR

    不用任何与创建线程.资源互斥有关系的API写多线程程序 这次的例子,是一个很简单的控制台,她将面对瞬间提交的百万的数据,而面不改色(CPU.内存非常平稳),队列中始终只保存最新的数据,每次只处理cpu ...

  8. SQL Server 触发器:表的特定字段更新时,触发Update触发器

    create trigger TR_MasterTable_Updateon MasterTableafter updateas if update ([Type])--当Type字段被更新时,才会触 ...

  9. click事件的参数化

    Browser("XXX").Page("XXX").Frame("iframe_main").WebElement("TB-50 ...

  10. 【转】修改xampp的mysql默认密码

    http://www.cnblogs.com/hongchenok/archive/2012/08/21/2648549.html MySQL 的“root”用户默认状态是没有密码的,所以在 PHP ...