BlazeDS + Hibernet + Flex 开发Web应用
网上有关于集成BlazeDS和Flex的示例,但是大部分都是将客户端和服务器代码放置到一个项目,这种方式使我们在编码时容易产生混淆,并且也不利于大的项目的开发与管理。下面通过一个简单的例子演示一下,建立客户端和服务器端分离的,服务器端采用Hibernet+BlazeDS的Flex Web项目。希望对大家有所帮助。
一、开发环境准备
1. 安装MyEclipse8.0插件版、FlashBuider4插件版。注意,这里最好不要安装独立安装版本,要不开发的时候要打开几个IDE,很不方便;
2. 下载BlazeDS 3.2(更高版本也可以),并解压blazeds.war文件,备用;
3. 安装Tomcat 6.0 服务器;
4. 安装DBMS。这里我用的是MSSqlServer 2000。建立测试数据库flex,建立一个login表格,CREATE TABLE login (id char(10), name char(20), pwd char(20))。随便输入一点数据,做测试用。
二、J2EE服务器端开发
进入到Eclipse开发环境,切换到MyEclipse视图。
1. 新建Web Project,然后将blazeds.war解压后的WEB-INF、META-INF两个文件夹拷贝到项目中,覆盖原来的项目文件;
如果你使用的是blazeds3.2这些版本,那么等你把服务器所有工作完成的时候,你会发现客户端仍然连接不上,这是因为3.2版本的blazeds.war文件解压后的blazeds/WEB-INF/lib的目录下面缺少一个flex-rds-server.jar的文件,你可以解压其它更高版本的blazeds.war文件,然后将这个文件复制到相应的文件夹。
2. 修改web.xml文件。
1) 注释或者删除<!DOCTYPE行;
2) 将<display-name>BlazeDS</display-name>
修改为<display-name>JeeServer</display-name>
3) 加入以下内容
<servlet>
<servlet-name>RDSDispatchServlet</servlet-name>
<servlet-class>flex.rds.server.servlet.FrontEndServlet</servlet-class>
<init-param>
<param-name>useAppserverSecurity</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>10</load-on-startup>
</servlet>
<servlet-mapping id="RDS_DISPATCH_MAPPING">
<servlet-name>RDSDispatchServlet</servlet-name>
<url-pattern>/CFIDE/main/ide.cfm</url-pattern>
</servlet-mapping>
3. 持久层建立。
为工程加入Hibernate capability,建立com.zs.hibernate包,对login表进行hibernate反向工程,将生成的文件放置于com.zs.hibernate包之中;
4. 服务层建立。
新建com.zs.service的数据包,用来放置服务器端服务层的代码类,用来读取数据库数据,响应客户端请求。此处可以根据自己的需要编码,这里只提供简单的演示函数。
新建LoginService类,建立String login(String username, String password)方法,用来对输入数据进行判断,如果用户名、密码存在就返回允许登录字符串,如果不存在就返回不允许登录字符串。
5. 为Service层的相关类建立服务器端remoting映射,提供给flex客户端调用。
打开WEB-INF/flex/remoting-config.xml文件,加入如下代码:
<destination id="loginService">
<properties>
<source>com.zs.service.LoginService</source>
</properties>
</destination>
6. 部署J2EE服务器端代码。
在通过MyEclipse或者手动的方式将服务器端代码部署到Tomcat服务器中,并启动Tomcat服务器。这里一定要注意一定要启动Tomcat服务器,要不客户端将无法连接。
三、Flex客户端开发
将Eclipse开发环境切换到Flash视图。
1. 新建Flex 项目。
1) 在新建Flex项目窗口中将项目命名为FlexClient,应用程序服务器类型选择J2EE,勾选“使用远程对象访问服务”,并选择BlazeDS项。由于我们将J2EE服务器端和Flex客户端放到两个不同的项目里,因此要将“使用WTP创建Java/Flex组合项目”项取消。
2) 点选“下一步”开始配置J2EE服务器。这是Flex客户端文件将要发布到目的地,这些Flex代码将和JEE服务器端代码构成一个完整的应用。
根文件夹:C:/Program Files/Apache/Tomcat 6.0/webapps/JeeServer
根URL:http://localhost:8080/JeeServer/
上下文根目录:JeeServer
这些参数根据自己机器情况配置,需要注意的是根URL字符串需要在最后加上”/”符号。
3) 点“验证配置”后进行下一步,完成客户端项目建立。
2. 将JEE服务器端服务器端通过remoting映射的Service类转化为本地Flex调用类。
1) 点击Eclipse IDE中 数据à连接数据/服务 菜单项,打开“选择服务类型”窗口,选择BlazeDS项,点击“下一步”;
2) 在“导入BlazeDS/LCDS服务”窗口,勾选需要导入的服务类。在“服务详细信息”部分配置导入后生成的本地类名称及包。点击完成即可,这样客户端就可以像调用本地Flex类一样使用远程服务了。
3. 运行客户端程序。
有时候客户端程序代码经过修改之后,运行显示的仍然是原来老版本的界面,这个时候应该清空浏览器缓存,基本可以解决问题。
如果还不行,那么可以到Tomcat目录下删除Flex发布的调试的文件夹目录(我这里是C:/Program Files/Apache/Tomcat 6.0/webapps/JeeServer/FlexClient-debug),然后右键点击项目,选择“属性”,然后选中Flex服务器项目,不用改动任何参数就可以重新生成调试文件夹了。当然也可以将项目发布到Tomcat服务器端程序文件夹中。
所有的办法都看起来不是特别的顺畅,如果有找到更好办法的朋友告诉本人一下,非常感谢!:)
四、有关调试
调试时有时会提示找不到调试版本的Flash Player,可以卸载原来的Flash Player,然后
安装新的调试版本的Flash Player。
在安装Flash Player的调试版本时,经常会因为之前的版本问题导致安装不上,提示去获取最新的版本。等你下载到debug版本时,发现仍然提示你不是最新的版本,需要下载等等。解决方法如下:删除注册表中之前安装的版本记录即可
注册表路径:HKEY_LOCAL_MACHINE/SOFTWARE/Macromedia/FlashPlayer/SafeVersions
删除最高版本的键值,例如下面的9.0,再执行下载的调试版本Flash Player
当然有时候安装的调试版Flash IE插件不能应用到一些扩展浏览器中,比如Maxthon中,这个时候你可以将项目调试的浏览器指定为IE。修改方法:窗口à首选项,选择“常规”àWeb浏览器,然后选择IE即可。
调试时服务器可以用System.out.println(“”)、客户端可以使用trace() 向系统控制台窗口输入一些重要的信息。注意在Eclipse IDE主界面中的“控制台”面板的右上角有一个“显示选择的控制台”按钮,点击这个按钮可以在Flex客户端控制台和JEE服务器端控制台之间切换,从而看到不同的信息。