Java Web应用在ARM Linux平台上的实现


1引言
随着网络信息技术的飞速发展,Web技术越来越多的用在控制领域,客户端只需连接以太网,取得访问权限,就可以访问服务
器,查阅现场有关信息,并可以对服务器的操作进行控制,给维护和管理工作带来方便。而Javaweb应用是互联网中的首选技术,
它具有面相对象、平台无关、多线程、分布、安全等特点,而这些特点恰恰满足了互联网发展的需求。同时,嵌入式系统以其实时性
强,可靠性高,结构小巧等优点,在各个领域都得到了广泛应用。Javaweb技术和嵌入式系统的结合,充分发挥了两者各自的优
势,从而为远端数据监控的发展开辟了一片天空。构建基于Arm Linux的嵌入式iava Web服务器,为嵌入式系统的Internet接人
提供了一种方便快捷的实现方法。
2 Arm Linux平台和Java Web应用概述
2.1 ARM Linux平台概述
嵌入式平台没有足够的硬件资源运行开发工具和调试工具,所以嵌入式Linux系统的软件开发通常采用交叉编译调试的方式,
交叉编译调试环境建立在宿主机(即一台PC机)上,对应的开发板叫做目标板,宿主机与开发板之间通过网线、串口线连接,进行应
用程序开发和调试。
论文中的硬件平台为处理器为三星s3c2440,内核为ARM920T开发板。嵌入式操作系统是基于Linux 2.6内核的utu Linux操
作系统。
2.2Java Web应用概述
Java Web应用有一组servlet、html页、类,以及其他可以被绑定的资源构成,它可以在各种供应商提供实现servlet规范的web
应用容器中运行。通常的java web应用的平台包括:java虚拟机,java web容器,数据库等。为在Arm Linux平台上实现java web应
用,选择移植开源的java虚拟机jamvm,java web容器winstone和嵌入式数据库sqlite以及sqlite数据库的jdbc驱动程序sqlit~dbc。
Jamvm符合JVM规范第二版本,虽小但支持完整的规范。Winstone是一个Servlet容器,它的目的是提供isp和Servlet组件功
能,它支持servlet2.4与JSP2.0规范。SQLite是一个自包含、无服务器、零配置、事务支持的进程内数据库引擎,支持绝大多数的标准
SQL92语句,采用单个文件存放数据库的表、视图、触发器等,速度也优于MySQL等其它数据库,最大可支持2TB的数据库。
3 Java web平台的搭建
3.1 Jamvm 虚拟机的移植配置
在嵌入式平台使用Java开发应用程序需要Java虚拟机的支持,将Java虚拟机iamvm移植到ARM Linux上。
3.1.1宿主机上安装Java编译器JDK
在宿主机Linux上安装SUN公司的jdk一1_5一o_16-linux—i586.bin。
3.1.2编译和安装Java核心类库GNU Classpath
假设在目录/root/work(本文没有说的的情况下默认为宿主机目录)已有Java核心类库GNU Classpath(classpath一0.92.tar.gz)和
Java虚拟机JamVM(jamvm—1.4.3.tar.gz),进入该目录运行以下命令解压:

1. #cd~root/work 
2. #tar —xzvf classpath一0.92.tar.gz 
3. #cd classpath-0.92 
4. 再运行configure脚本生成Makef’de: 
5. #CC=arm-linux-gcc CPP=armv-linux-cpp LD=arm-linux—ld.&onfigure一一host=arm—linux–disable—gtk-peer一一disable—gconf— 
6. peer————disable—-plugin.-——with–jni————prefix=/root/classpath 
7. 交叉编译并安装到/root/classpath下: 
8. #make&& make instal

复制代码

3.1.3安装Java虚拟机JamVM
解压JamVM并运行configure脚本生成Makefile:

#cd/root/work 
 #tar—xzvf jamvm-1.4.3.tar.gz 
 #cd jamvm一1.4.3 
 #CC=arm—linux-gcc CPP=armv,linux-cpp LD=arm-linux—ld./configure一一host=arm—linux–prefix=/root/jamvm一一witll—classpath— 
 install-dir=-/root/classpath


其中,选项with—classpath—install—dir指定classpath的安装目录。
交叉编译JamVM并安装~lJ/root/jamvm下:
#make&& make install
安装成功后,可以在/root/jamvm下看到bin和share目录,bin目录下的iamvm文件是目标板上的可执行文件,用于解释执行
Java字节码,相当于Windows平台的iava.exe。用arltl—linux—strip命令去掉调试信息的iamvm可执行文件在130KB左右。
3.1.4目标板上配置Java虚拟机
将/toot下生成的文件iamvm 和classpath复制到目标板的/home/work目录,然后在目标板设置以下环境变量:
#export PATH=$PATH:/home/work/jamVm/bin
#export B00 rCIASSPATH=/home/work/jamvm/share/jamvm/classes.zip:
/home/work/classpath/share/classpath/glil~i.zip
#export LD— LIBRARY— PATH=/home/work/classpath/lib/classpath
经过以上四个步骤,Java虚拟机就成功移植到ARM Linux平台。Java字节码是跨平台的,所以嵌入式Java应用开发没有交叉编
译的概念。实际应用中,使用宿主机上的集成开发工具(如Eclipse)编码、调试完毕,生成Java字节码.class文件,然后直接上传到嵌
入式目标板运行。
3.2 java web容器winstone的移植配置
编译winstone需要有maven的支持。这里下载maven一1.1.tar.gz~U/maven目录下解压maven一1.1.tar.gz到当前目录
#tar-zxvf maven-1.1.tar.gz
设置环境变量:#export PATH=$PATH:/maven/maven一1.1/bin ’
下载winstone—src一0.9.10.tar.gz到/winstone目录下
并解压文件到当前目录下:机ar—zxvf winstone—src一0.9:10.tar.gz
在当前目录下运行:#maven clean iar
在当前目录下生成一个子目录/target,里面包含了winstone.iar等文件,这样winstone就编译完成。
为了能解析jsp servelt程序还需要增加一些相关的jar包,在winstone/targef 录下新建目录lib,把jasper-compiler.jar,jaspermntime.
jar,antjar,jsp-apijar commons-logging-api.jar,commons-e1.jar等jar包复制到lib目录下。
最后把target目录下的文件复制到目标板/target目录下,这样winstone在目标板上移植配置完成。
3.3 sqlite数据的移植配置
以root权限在根目录下创建一个jdbcPort文件夹,并将SQLite源代码sqlite—amalgamation一3.6.2.tar.gz解压到该目录下,运行自
动配置命令生成Mak胡le:
CC=ann-linux-gce LD=arm—linux-ld CPP=arm—linux-cpp./configure–host=ann-linux一一pz℃fix=/jdbcPoa/arm Sqlite
编译生成动态库并安装到prefix指定的目录:#make&&make install
构建成功将在/jdbePort/armSqlite下生成bin,include、lib三个目录,bin下面是命令行工具sqlite3,lib下有一个静态库libsqlite3.
a和一个动态库libsqlite3_s0.0.8.6.用arm —linux—strip命令去除调试信息,动态库可减小到360 KB。把bin下的sqlite3复制到目标板
的bin目录下.把libsqlite3.a和libsqlite3.SO.0.8.6复制到目标板1ib目录下,这样sqlite数据移植配置完成。
3.4 Java jdbc的移植
为了在ARM Linux平台运用JDBC开发数据库应用程序,需要将JDBC驱动程序移植到ARM Linux上,并对系统环境进行设置。
嵌入式ARM Linux上sqlitejdbc驱动程序的移植较复杂,涉及到Makefile的修改。首先将驱动程序javasqlite一200810O6.tar.gz解
压到idbcPort下,执行配置脚本生成Makefile:
#CC=arm-linux—gec LD=arm—linux—ld CPP=arm—linux-cpp./configure–host=arm -linux–prefix=/jdbePortJsqlitejdbc一一with—
sqlite3-/jdbcPort/armSqlite
需要注意的是with—sqlite3选项,用于指定交叉编译的SQLite引擎位置,此处指定的目录是idbc驱动移植时SQLite的安装路
径。此时生成的Makefile并不能用于交叉编译环境,要对native/mkeonst这个规则进行修改,将原规则:
native/mkconst:native/mkconst.C
$(LIBTOOL)一一mode=link$(CC)-g-02$(SQLITE_INC)$(SQLITE3_INC)\
- DHAVE_ SQLITE2=0-DHAVE—SQLITE3=I|
一o native/mkconst native/mkconst.e$(LIBS1
修改为: . 、
native/mkconst:native/mkconst.C
gcc-g-02$(SQLITE_INC)$(SQLITE3_INC)、
- DHAVE_ SQLITE2=0-DHAVE—SQLITE3=I|
一O native/mkconst native/mkconst.e
即将生成目标的编译器修改为gcc,删除$(LIBS),再执行make
及make install把sqlitejdbc驱动安装到/jdbcPort/sqlitejdbc目录下。
该驱动主要有两个文件,一个是用于ARM Linux平台的动态库libsqlite
_
.jni.SO,去掉调试信息后有36KB,一个是纯Java驱动包sqlite.
ar,有59KB。把libsqlite_.jni.SO和sqlite3.jar复制到目标板的lib目

4测试
iava web应用平台在ARM Linux上移植配置完成,为验证其正
确性,下面做运行isp、servlet测试和通过sqlitejdbc访问sq】ite数据
库的测试。
编写好{sp测试程序testjsp.jsp、servlet测试程序testservlet和数
据库访问程序jspdb.jsp文件放~k./target/testwebapp/目录下,在/target
目录下运行命令:
#iamvm —iar winstone一0.9.10.jar一一useJasper一-webroot=/target/
testwebapp/..——commonLibFolder=-/target/lib
这样B/S结构的服务器启动起来.在服务器端显示的信息如图1
服务器端显示信息所示。
而在客 端用浏览器可以得到JSP的测试结果如图2 jsp测试
结果所示。
servlet测试结果如图3 servlet测试结果所示。
jsp访问sqlite数据库测试结果如图4 jsp访问数据库结果所示。
5结束语
随着Internet技术的兴起,在嵌入式设备上基于Web方式的应
用变得越来越重要。在ARM Linux上搭建好 ava web应用程序的运
行平台.在嵌入式设备上运行一个支持脚本或CGI功能的Web服务
器winstone。能够生成动态页面,在用户端只需要通过Web浏览器就
可以对嵌入式设备进行管理监控和访问,非常方便实用,在嵌入式设
备的管理与交互中,这种基于Web方式的应用将成为主流。