|
移动应用程序和Web应用程序本质上是分布式应用程序,需要客户机和服务器组件来运行。如果完全手工编写、测试和调试这样的应用程序可能会非常困难。本文介绍一些使用Sun ONE Studio 5标准版来编写、测试和调试这些应用程序的技术。 介绍
使用一个象Sun ONE Studio这样的集成的开发环境( IDE)的主要原因是能够从头到尾地开发应用程序。而象Notepad和Vi这样的文本编辑程序不提供这样的能力。虽然购买一个IDE只用来编写一个脚本会是很浪费的事情,但是如果使用Vi来编写一个联机金融应用程序那将会更加费劲。Sun ONE Studio 5提供了许多方便的特性来开发各种应用程序--不管是简单的控制台文本处理工具还是复杂的联机存储。本文说明了如何开发一个简单的Model 2体系结构应用程序,这个应用程序中有一个数据库提供数据,一个servlet/JSP容器完成处理和内容服务--所有这些都在Sun ONE Studio中完成。我们将演示下面的任务:
安装一个JDBC驱动程序并且使用数据库探测者
创建JavaBeans组件、模式和属性
创建程序包、servlets和servlet类
创建HTML页面和 JSP 创建MIDlet和MIDlet套件
调试一个Web应用程序
使用模拟器调试和测试MIDlet
编辑web.xml文件
生成并部署WAR文件到Sun ONE应用服务器中
相册示例
这个示例应用程序基于联机相册的概念,在这里客户端可以使用他们的浏览器或者移动电话上载和浏览各种类型的图像。我们将首先演示应用程序的服务器端。它是一个基于提供Web用户界面的JSP和servlet技术的两层 J2EE Web应用程序。接下来,应用程序应被扩展为包括移动服务保障。面向浏览器和MIDP客户端的服务有很大的差异。一个MIDP客户端和浏览器相比可以看作是一种瘦客户端。移动设备必须遵循MIDP 1.0来访问相册提供的服务。
在本例中使用的所有的数据和内容都被存储到一个使用遵循JDBC的驱动程序和为这个演示单独创建的JavaBeans组件SQL数据库中。它然后通过可以使用Java脚本的浏览器来重定向到提供用户界面的JSP中。理论上,任何遵循SQL92的关系数据库管理系统都能被使用,只要提供了遵循JDBC的驱动程序。然而,这个特定的示例只使用MySQL和PointBase测试。PointBase数据库被包含在Sun ONE Studio 5标准版中,很容易配置和运行。
Sun ONE Studio有许多特性并且提供了很多工具用于不同的任务--但是并不是所有任务在某一时间内都是必需的。一般而言,在着手一个新项目之前花费几分钟定制用于项目预期的必要条件的IDE是个好主意。这可能包括:
1.下载这个项目需要的辅助模块- -例如这个演示需要Mobile Edition模块。
2.禁止不使用的模块以增强性能- -例如,这个演示不需要Web服务。
3.更新浏览器数据库来包含来自导入的库的类--例如,这个演示使用com.oreilly.servlets。
本文中讨论的相册示例需要下面的准备工作(每个任务都在下面详细描述):
1.下载并且安装Sun ONE Studio5标准版
2.通过安装辅助的模块定制Sun ONE Studio5
3.安装相册应用程序--整个例子都被编档保存到一个文件中,包含了JavaBeans组件、servlets、JSP、数据库脚本、库和用于测试的示例图像。
4.配置PointBase来与Sun ONE Studio一起使用,并且创建用于应用程序的必要的数据库。
5.启动Sun ONE 应用程序服务器7,并且验证它是否适当地被配置。
准备工作
本节描述如何准备你的开发环境用于运行示例应用程序。
安装Sun ONE Studio5标准版
如果你尚未安装Sun ONE Studio5标准版,你可以从 http://wwws.sun.com/software/download/app_dev.html下载可用的免费试用版。为了安装标准版,你只需要轻松的点击几个按钮就可以了。但是一定要随IDE一起安装Sun ONE 应用程序服务器7和PointBase。把应用程序服务器 7安装到它的默认位置,保存在IDE安装目录中,并且使用安装程序提供的缺省值。这个示例将广泛应用应用程序服务器 7和PointBase。默认情况下MIDlet被设置为连接81端口,但是可以很容易地改变。

图1:安装Mobile Edition模块
使用辅助的模块定制Sun ONE Studio5
下一个任务包括下载某些模块来提供给IDE创建、测试和调试J2ME无线应用程序的能力:
1.从IDE主菜单中,更新中心Tools> Update Center来连接Sun ONE Studio Update Center。
2.输入你的注册细节并且按下一步。你必须是注册用户才能从更新中心下载模块。如果你还没有注册,你可能使用Profile and Registration页面来完成。
3.从选择图1显示的列表中选择无线模块,然后继续进行下载。
4.在下载成功完成之后,重启Sun ONE Studio。
注意:在许多Linux平台上,Sun ONE Studio 5安装程序不允许你同时安装Sun ONE 应用程序服务器 7和PointBase。它们必须分别下载和安装。PointBase被包含在Sun ONE 应用程序服务器 7。换句话说,这个示例可以被配置来运行NetBeans 3.5、Apache的Tomcat Web服务器和MySQL数据库。
安装相册示例程序
下载文件photoalbum_code.zip(http://developers.sun.com/tools/javatools/articles/photoalbum/code.zip),并且解包到你选择的目录中。这将创建一个称为photoalbum的目录,带有下面的子目录:
1.other -包含数据库脚本和示例图像
2.webapp -包含示例应用程序本身,有.java和.class文件,JSP和必需的库文件(JAR)。这是Web应用程序和服务器部分,既可以通过浏览器访问也可以通过遵循MIDP的设备访问。
3.mobapp -包含用于创建MIDlet套件的MIDlet类,可以被部署到一个无线设备中,或者在使用这些类的模拟器中运行。
配置PointBase
PointBase是Sun ONE Studio 5标准版正常安装的一部分,并且它的安装位置是<ide_root_directory>/appserver7/pointbase。
 图2:创建一个新的数据库
PointBase是一个完全使用Java编写的小型的关系数据库管理系统,Sun ONE Studio包含了PointBase,主要用于开发用途和便于使用。在本示例中被证明为很有用处的一个特性就是PointBase控制台显示BLOB作为图像的能力。从启动PointBase服务器开始。PointBase是一个完全使用Java编写的小型的关系数据库管理系统,Sun ONE Studio包含了PointBase,主要用于开发用途和便于使用。在本示例中被证明为很有用处的一个特性就是PointBase控制台显示BLOB作为图像的能力。从启动PointBase服务器开始。这可以很容易地从IDE实现,如下:
1.为了启动服务器并且打开它的管理控制台,从IDE主菜单选择Tools > PointBase Network Server > Start Server。
2.为了简化调试,设置Display Level为3。在PointBase管理控制台中选择Display > Display Level 3。
3.从可以被创建的数据库中,启动PointBase控制台。从IDE主菜单选择Tools > PointBase Network Server > Start Console。从PointBase控制台选择DBA > Create New Database并且如图⒉所示填写信息。口令是album。
4.在下载成功完成之后,重启Sun ONE Studio 5。
一旦数据库被创建,下一个任务是创建保存相册数据的表。这可以使用两个方法来完成:
 图3:创建一个新的数据库
要么使用:
复制另一个子目录中的SQL脚本photoalbum.sql;把它的内容粘贴到标为"Enter SQL Commands"的PointBase控制台窗口中;然后选择SQL > Execute All。
要么使用:
从PointBase主菜单,选择DBA > Create Table可视地创建表(参见图3)。命名这个表为pictures。 最后,确定前面的PointBase配置任务被正确的执行:最后,确定前面的PointBase配置任务被正确的执行:从PointBase控制台选择Catalog > Catalog,并且浏览photoalbum数据库和pictures表。此时,数据库就可以使用了。让控制台和服务器保持运行--它们将被应用程序使用。
配置Sun ONE应用服务器7
Sun ONE应用服务器7相比它前面的版本来说有实质性的提升。值得注意的是,安装和配置过程已经简化到除了启动服务器之外几乎不需要任何步骤的程度。当然,当开发更复杂的应用程序时,还需要一些和部署与调试相关的任务。
Sun ONE应用服务器7是一个独立的产品,可以要么在Sun ONE Studio外部运行,要么通过作为Sun ONE应用服务器7插件在ONE Studio的内部运行。对于这个演示程序来说,是从IDE内启动应用服务器:
 图4:启动Sun ONE应用服务器
1.在Explorer窗口中,Runtime选项卡,扩展这个节点,Server Registry > Installed Servers > Sun ONE Application Server 7 > hostname:4848。
2.右击节点hostname:4848,从上下文菜单中选择Start启动Admin server。
3.如果这个服务器安装正确,那么应该在hostname:4848下有个子节点名为server1(hostname)。右击server1节点并且选择Status打开 Sun ONE Application Server Instance Status对话框(参见图4)。
4.在Instance Status对话框中,点击启动Server。
一个命令窗口将打开,这个服务器将启动,并且在对话框中的状态指示器将从停止变化为运行。
5.关闭Instance Status对话框。
注意节点hostname:4848下的server1(hostname),有表示JDBC连接池、JDBC数据源Web模块等的子节点。一旦Web应用程序被部署,它将出现在这棵树上,并且可以从那里控制。
JSP Model 2体系结构
虽然JSP Model 2体系结构的讨论超出本文的范围,因为在大部分的Web应用程序中它是一个浏览器、容器和数据库之间的标准通信手段,所以我们至少要讨论一些基本的问题。这个体系结构由三个高级独立组件组成:一个浏览器、一个容器和一个数据库。这就是发生在容器组件内部的事情,是眼下更有意义的事情。下面的图表描述了包含MIDP客户端和移动服务的Photoalbum示例应用程序的体系结构(参见图5)。
 图5:JSP Model 2体系结构
这个体系结构利用定义在JSR 53中的Servlet/JSP元素。Picture和connection JavaBeans组件首先被从servlets中创建和初始化,然后在容器内持久化。connection bean处理访问数据库,并且提供方法给servlets和其它beans(例如Picture)来在关系数据库管理系统中使用存储的数据。为了简化起见,一个简单的数据库连接器被使用,不使用"连接池"。连接池通常被容器处理并且产生许多更好的性能。
这些servlet担当控制器的作用,在beans和用户界面之间传送信息,在这种情况下许多HTML页面被容器作为JSP来处理。来自数据库的查询的结果作用于servlet,然后重定向到JSP中,在这里结果被显示。没有什么非常复杂的事情。此外,Sun ONE Studio 5可以极大地简化许多任务。这个体系结构相当便于维护,并且一旦你熟悉它以后就非常有意义了。然而,了解JavaBeans组件的概念非常重要。
运行示例
一旦完全被提取,就能很容易的测试应用程序并且判断是否一切都如计划那样运行。此时IDE已经为了编译、运行和调试示例应用程序而准备并且定制好了。下面的组件将被使用并且覆盖一些细节:
Compiler类型- -编译示例源代码到Java字节代码中。
Executor类型- -映射各种JDK和服务器到用于执行的运行时环境。
Deployment - -必须被部署到容器中(在这种情况下是Sun ONE应用服务器)来运行J2EE应用程序。
Sun ONE应用服务器-用于运行应用程序。
Emulator --用于测试MIDP应用程序,能够使用一部无线电话来浏览照片。
Debugger类型- -映射各种JDK和服务器到用于调试的调试环境。
HTTP监视器--一个方便的工具,用于追踪客户端和servlet容器(在这种情况下是Tomcat)之间的通讯。
如果你想获得更详细的信息你可以在IDE的联机帮助系统中搜索它们。这将产生每一个组件的详细信息。
装载、构建和部署示例Web应用程序
为了Sun ONE Studio能够识别示例应用程序是一个Web应用程序的事实,这个目录结构必须完全地装载。这个结构是使用这个目的创建的,所以这个过程相当简单:
 图6:装载进Sun ONE Studio的示例Web应用程序
1. 在Explorer窗口中,Filesystems选项卡,右击根节点Filesystems,并且从上下文菜单中选择Mount > Local Directory。在出现新对话窗口中,选择目录<example_install_directory>/photoalbum_code/webapp并且点击OK。
2. IDE将自动地导入和装载WEB - INF/lib目录中的所有JAR,并且将显示作为Web模块加载的WEB - INF目录。在Explorer窗口中还有一个可选的视窗,Project选项卡。全部设置应该如图6。
现在我们成功地构造并加载这个应用程序的服务器部分。
3.为了构建应用程序,在Explorer窗口中,右击代表webapp目录的节点,并且从上下文菜单中选择Build All(或者Shift - F11)。构造应该在几秒钟内就完成并且不会产生错误。消息Finished将显示在编译程序输出窗口。
4.右击WEB - INFWeb模块,并且从上下文菜单中选择Properties。在属性对话框中选择Execution选项卡。在Target Server属性选择Server1 ( hostname:port number)。
5.右击WEB - INFWeb模块,并且从上下文菜单中选择Deploy。应用程序将被部署到应用服务器中;这可能要花上一段时间,所以你要耐心等待。
装载、构建和部署示例MIDP客户端程序
下一个任务是装载MIDP客户端类并且构造模拟器中执行的MIDlet套件:
1.在Explorer窗口中,Filesystems选项卡,右击根节点Filesystems,并且从上下文菜单中选择Mount > Local Directory。
在出现新对话窗口中,选择目录<example_install_directory>/photoalbum_code/mobapp并且点击OK。
2.扩展mobapp > photoalbum节点。注意到photoalbum程序包包括了所有的MIDlet类。在程序包下面的PhotoAlbum MIDlet套件中,包含从MIDlet类编译和验证的字节码。
为了运行应用程序,需要一个MIDlet套件。这件套件引用运行MIDlet所需的类,并且被部署到模拟器中。如果Web应用程序被部署到的目标服务器是在81端口,你可能使用示例带有的MIDlet套件。如果你的目标服务器在80端口,或者MIDlet套件中出现的其它问题,然后遵循下面的指示来创新创建它:
 图7:创建一个MIDlet套件
1.根据特定的系统配置,应用程序的服务器部分可以运行在不同的端口。打开httpConnection类--这是装载的一个MIDlet类--并且使用编辑器,改变字串myUrl为合适于你的配置的值,并且编译这个类。
2.右击代表mobapp目录的节点并且选择New> All templates。
3.在新建向导中,选择MIDP > MIDletSuite。
4.在Name字段中,输入PhotoAlbum并且点击下一步。
5.在新建向导的下一个页面上,选择Use Existing MIDlet单选按钮,然后浏览并且选择photoalbum.PhotoAlbumMIDlet类,点击Finish。
6.MIDlet套件现在只包含MIDlet类,而不是运行客户端所需的其它类。右击刚创建的PhotoAlbum MIDlet套件,并且从上下文菜单中选择Edit Suite打开Edit Suite对话框。选择Jar Contents选项卡并且添加必要的类(参见图7)。
7.最后,右击MIDlet套件节点并且从这上下文菜单中挑选Compile。全部应用程序现在已经可以运行了。
运行示例Web应用程序
执行应用程序所需的一切现在都被安装并且可以运行了。如果你返回演示,你可能希望确定下面的标准:
1.下载并且安装Sun ONE Studio5标准版,启动并且运行。
2.启动和运行的PointBase网络服务程序。
3.启动和运行Sun ONE应用服务器7管理服务器(localhost:4848),.
4.启动和运行Sun ONE应用服务器7应用服务器实例server1(localhost:81)。
 图8:使用Web接口浏览相册
打开浏览器窗户并且访问http://localhost:4848的Admin Server。 使用你为应用服务器管理选择的证书。将出现基于web的管理工具。确信实例server1正在运行。你还可以从IDE中的Server Registry测试。当你扩展Deployed Web Modules节点的时候,你将看到一个名为webapp的应用程序。这是运行在服务器上的我们的应用程序的服务器部份。
接下来,在另一个浏览器窗口中打开这个URL,http://localhost:81/。
注意:你的应用服务器可能运行在一个不同的端口,这取决于你的平台和系统配置。
将出现相册应用程序的Web部分。此时在相册中还没有存储图像,所以选择Upload链接来打开Upload窗体。填写一个简短的描述,这会对稍后的搜索有帮助。浏览并且选择一个图像文件上载到photoalbum数据库中,然后点击Submit Query按钮触发数据库更新。一旦你上载一些图像,你可以浏览相册来确定它们是否已经存在于数据库中了(参见图8)。使用你在上载的时候指定的名称来搜索指定的图像。一个通用特性将作为搜索屏蔽。
你可以上载photoalbum/other目录下的PNG图像,也可以提供你自己的图像。这个应用程序将接受任何图象格式,但是MIDP设备只支持PNG并且服务器中没有构建转换工作。如果你计划使用模拟器浏览相册的话,你必须确信你上载的图像是PNG格式。如果不是PNG图像,那么就不会返回基于MIDlet的查询,即使它们的名称匹配检索关键字。
MIDP客户端需要来自Web应用程序的使用特定的简短描述格式的信息- -不是提供给浏览器的HTML。这个示例应用程序包含一个servlet ImageList.java,有助于在MIDlet开发期间直接访问servlet。其URL格式如下:
http://<hostname:port>/servlets/photoalbum.mobile.ImageList?pic_name=<search_mask>
因为结果不是HTML格式,所以有必要把它们保存为一个文件,然后使用文本编辑程序察看这个文件。例如,使用下面的URL来察看搜索带有"rak"的图片名称:
http://localhost:81/servlets/photoalbum.mobile.ImageList?pic_name=rak
在示例演示中的返回的结果是:
"1059415857406","krakow","web_krakow.png","6233"
运行示例MIDP客户端
下一个阶段是启动模拟器并且运行PhotoAlbum MIDlet。为了做到这点,只要在MIDlet套件上点击右键并且从上下文菜单中选择Execute。模拟器窗口将打开并且应用程序将在模拟器中执行。应用程序启动来浏览联机相册,并且把图像存储在phone/emulator(参见图9)。它相当简单,并且演示如何使用移动设备访问服务器数据。MIDlet应用程序使用相同的服务器组件作为Web应用程序,除了浏览过程之外,被单独的servlet photoalbum.mobile.imagelist管理。
 图9a:远程的搜索结果 |
 图9b:从数据库返回的图片 |
 图9c: 浏览存储在本地的图片 |
 图9d:存储在本地的图片 |
开发示例应用程序
 图10:数据库探测者
Web应用程序通常有一个数据库系统作为它们的后端,提供业务逻辑所需要的大部分信息。自然,大部分的应用程序从数据模型开始,在众多的方法中这是决定性的。这个示例有最简单的数据模型可能:保存数据的单一表。在为PointBase Network Server配置驱动程序并且连接到photoalbum数据库之后,表属性可以使用Database Explorer察看(参见图10)。
创建JavaBeans组件
一旦数据模型最后确定下来,用于访问数据模型的事务处理就确定下来了,JavaBeans组件被创建来简化这些过程。Sun ONE Studio5有许多工具来简化bean的创建和编辑。在这个示例中,所有的Java类(包括beans)都在称为photoalbum的程序包中。这个程序包存在于WEB - INF目录的类子目录中,定义了Web模块的核心。想要创建一个代表相册中单一图像的Picture bean,需要:
1.在Explorer窗口中,扩展WEB - INF > classes > photoalbum节点。
2.右击photoalbum节点,并且从上下文菜单中选择New > All Templates打开新建向导对话框。
3.在新建向导中,选择Java Beans > Java Bean条目并且按下一步。
4.在Object Name字段中,输入Picture并且点击Finish。
Picture bean现在将被创建,带有字段的方法可以被添加。为了添加一个新字段或者方法到Picture bean中,在Explorer窗口中扩展它的节点Filesystems选项卡,直到你看到下面的节点:
1.Fields
2. Constructors
3. Methods
4. Bean Patterns
一旦上面的节点出现,右击Fields节点并且从上下文菜单中选择Add Field。输入Name、Type和任何其他的认为必需的信息,然后点击OK。扩展Fields节点,可以看到new字段。当前,这个特性只提供添加最共同的Java类型。自定义类型必须使用Source Editor来添加。大部分的bean只有私有字段并且使用公用的set和get方法来改变这些字段的值。Sun ONE Studio5提供一个生成这些方法的特性,只需要使用Source Editor添加自定义代码。
例如,让我们假定刚刚创建的字段被称为content_type,并且set和get方法都是这个字段所需要的:
1.在Explorer窗口,右击content_type字段。
2.从上下文菜单中选择Tools > Generate R/W Property for Field。
扩展Methods节点并且注意到setContent_type和getContent_type方法被添加到列表中。还要当Bean Patterns节点扩展的时候,一个新的bean模式出现在content_type属性中,可以设置读和写。通过双击新生成set/get方法,IDE将把焦点定位到Source Editor上,然后把光标直接定位到新创建的方法上。
创建servlet
servlet是使用和创建JavaBeans组件大致一样的方法来创建的。它们应该还属于photoalbum程序包,和创建Picture bean采用相同的步骤,除了在New Wizard中应该选择JSPs & Servlets > Servlet。IDE将自动地把类识别为servlet,并且显示正确的属性。这包括映射信息、正确的执行程序和请求参数。
结束语
Sun ONE Studio5提供了许多强大的特性,具有开发潜在的宽领域的项目的用途。本文和附带的相册示例应用程序,演示了如何使用Sun ONE Studio5标准版来开发一个简单的Web应用程序,可以在浏览器客户端和MIDP设备上浏览联机图像--所有的这些都是在单一的环境中。
|