本文系转载,转载了下面这篇文章,但是修改了其中一处错误,我会在最下面指明:
转载文章的URL:http://bbs.airia.cn/home-space-uid-76976-do-blog-id-2710.html
1、 新建Web Project:
图1 新建web project
Project name命名自定,这里设定为:FlexProject,J2EE级别选择1.5,因为之后要跟Flex集成,所以source folder最好更改一下,这里改为:java_src,如图2。
图2 web project设定
2、 项目上右键,在MyEclipse的子菜单,选择增加Spring特性。
图3 选择增加Spring特性
选择必要的Spring库,并选中:Copy checked Library contents to project folder(TLDs aways copied),会自动将需要的jar包都复制到/WEB-INF/lib文件夹下,方便单独发布。
图4 新增Spring特性第一步
点击Next后,在默认选项下,根据自己的习惯,选择放置applicationContext.xml的位置,如需更改,点击Browse,如图5、图6所示。
图5 增加Spring特性第二步
图6 选择放置applicationContext.xml的位置
3、 部署BlazeDS服务,下载BlazeDS文件后,解压缩blazeds.war,得到一个文件夹
图7 BlazeDS部署第一步
将blaze文件夹下的两个目录拷贝到\FlexProject\WebRoot,覆盖同名目录。
图8 BlazeDS部署第二步
4、在MyEclipse中配置数据库源,选择MyEclipse Database Explorer,如果不能在快速切换栏里找到,可以进Windos-Open Perspective-Other中找到如图9所示。
图9 选择MyEclipse Database Explorer透视图
在右侧的DB Browse里右键,新建一个数据库连接。
图10 新建数据库连接。
在Driver template中选择你的数据库类型,Driver name自定,Connection URL
需要使用正确的路径,如现在的程序里是:jdbc:mysql://localhost:3306/apress,所以要将<hostname>与<dbname>替换为正确的名称,填写好User name 与Password,这里的用户名和密码指的是数据库的登录名与密码,点击Add JARS,选择已经下载到本地的数据库连接jar包,这里是mysql-connector-java-5.1.10-bin.jar。
图11 配置数据库连接参数
点击Test Driver,测试是否接通。
图12 数据库连接成功
点击Next,接受默认选项,点击finish,完成配置。
图13 数据库连接配置完成
5、 refresh项目,右键MyEclipse选择子菜单,增加Hibernate特性。
图14 增加Hibernate特性第一步
之前选择了Spring2.5,这里会提示需要Spring-Hibernate包支持,选中需要的库,选择Enable Hibernate Annotations Support,方便以后使用到,同时选中Copy checked Library Jars to project folder and add to build-path,点击Next。
图15 增加Hibernate特性第二步
这里可以选择使用单独的Hibernate cfg文件进行Hibernate的管理,或者直接集成Spring的applicationContext.xml中,这里使用后者。
图16 增加Hibernate特性第三步
选择Existing Spring configuration file,SessionFactory ID可以随意。
图17 增加Hibernate特性第四步
点击下一步,这里选择需要的DB Driver,选中Enable dynamic DB table creation。点击next。
图18 增加Hibernate特性第五步
配置Hibernate的SessionFactory类放置路径,可以点击new,使用Spring情况下不用Create SessionFactoryclass,所以可以吧勾选去掉,如果需要创建,可以新建一个包,这里新建包com.coarrow.hibernate.sessionFactory。
图19 增加Hibernate特性第六步
确定后finish,可能会提示jar包重复,点击replace即可。
图20 jar包的重复提示
6、 部署web服务,点击MyEclipse的部署按钮。
图21 部署web服务第一步
Project选择当前的项目:FlexProject,点击Add。
图22 部署web服务第二步
选择需要的Server,这个Server可以在Window-preferences中配置,也可以直接点击Edit server connectors进行配置。
图23 部署web服务第三步
点击finishi,完成部署。
图24 完成web服务的部署
7、 先启动Tomcat服务,然后右键项目,选择Flex Project Nature子菜单,增加Flex特性。
图25 增加Flex特性第一步
Server选择J2EE,点击Next。
图26 增加Flex特性第二步
修正Root folder、Root URL与Context root属性,与项目名一直即可,然后点击Validate Configuration,会提示是否合法。接着修正Output folder,自定,这里定义为Client,点击finish即可。
图27 增加Flex特性第三步
这时候检查Problem监视框,是否有Error级别的提示:
图28 error提示
如果出现Cannot create HTML wrapper. Right-click here to recreate folder html-template.这样的错误,右键点击错误,选择Recreate HTML Template即可。
图29 消除错误
这时右键项目,Run as – Flex Application,如果出现空白屏,说明Flex配置成功。
8,关闭Tomcat服务,编写登录范例。
第一步:数据库创建user表,包含id、username、password等字段。
第二步:在MyEclipse Database Exploring中打开数据库连接,在user表上右键,选择
Hibernate Reverse Engineering
图30 利用工具自动生成映射文件
这里使用传统的方式进行配置,具体见图31.
图31 Hibernate生成映射文件
点击Next,Id Generator 选择 increment。
图32 选择Id生成方式
点击Next,设定Class Name,将Id Generator设为increment,点击finish。
图33 生成数据库映射文件最后一步
如果发现User.java以及User.hbm.xml文件不在你想要放置的包下,可以将这两个文件移入想要放置的包内,如com.coarrow.model,然后修改User.hbm.xml文件中的:
为
<hibernate-mapping package="com.coarrow.model">
并修改applicationContext.xml文件中:
<property name="mappingResources"> <list> <value>./com/coarrow/model/User.hbm.xml</value> </list> </property>
同时将UserDAO.java放置在com.coarrow.dao包下,修改applicationContext.xml文件中的对应位置为:
<bean id="UserDAO" class="com.coarrow.dao.UserDAO"> <property name="sessionFactory"> <ref bean="sessionFactory"/> </property> </bean>
第三步:编写登录验证程序
新建com.coarrow.service包,在包下新建类LoginProxy,代码如下:
package com.coarrow.service; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.FileSystemResource; import com.coarrow.dao.UserDAO; public class LoginProxy { public String Login(String name, String pass) { //连接数据库检索用户名和密码是否正确,如果正确返回“success”,否则返回错误信息 BeanFactory bf=new XmlBeanFactory(new FileSystemResource("D:/Program Files/Apache Software Foundation/Tomcat 6.0/webapps/FlexProject/applicationContext.xml")); UserDAO us = (UserDAO) bf.getBean("UserDAO"); if (us.findByUsername(name).size() != 0) return "success"; else return "faild"; } }
新增com.coarrow.factory包,在包下新建类SpringFactory,代码如下:
package com.coarrow.factory; import org.springframework.context.ApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; import org.springframework.beans.BeansException; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import flex.messaging.FactoryInstance; import flex.messaging.FlexFactory; import flex.messaging.config.ConfigMap; import flex.messaging.services.ServiceException; public class SpringFactory implements FlexFactory { private static final String SOURCE = "source"; public void initialize(String id, ConfigMap configMap) { } public FactoryInstance createFactoryInstance(String id, ConfigMap properties) { SpringFactoryInstance instance = new SpringFactoryInstance(this, id, properties); instance.setSource(properties.getPropertyAsString(SOURCE, instance .getId())); return instance; } public Object lookup(FactoryInstance inst) { SpringFactoryInstance factoryInstance = (SpringFactoryInstance) inst; return factoryInstance.lookup(); } static class SpringFactoryInstance extends FactoryInstance { SpringFactoryInstance(SpringFactory factory, String id, ConfigMap properties) { super(factory, id, properties); } public String toString() { return "SpringFactory instance for id=" + getId() + " source=" + getSource() + " scope=" + getScope(); } public Object lookup() { ApplicationContext appContext = WebApplicationContextUtils .getWebApplicationContext(flex.messaging.FlexContext .getServletConfig().getServletContext()); String beanName = getSource(); try { return appContext.getBean(beanName); } catch (NoSuchBeanDefinitionException nexc) { ServiceException e = new ServiceException(); String msg = "Spring service named '" + beanName + "' does not exist."; e.setMessage(msg); e.setRootCause(nexc); e.setDetails(msg); e.setCode("Server.Processing"); throw e; } catch (BeansException bexc) { ServiceException e = new ServiceException(); String msg = "Unable to create Spring service named '" + beanName + "' "; e.setMessage(msg); e.setRootCause(bexc); e.setDetails(msg); e.setCode("Server.Processing"); throw e; } } } }
第四步:配置Spring与Flex的集成。
A、配置WEB-INF/flex/service-config.xml ,添加如下代码:
<factories> <factory id="springFactory" class="com.coarrow.factory.SpringFactory"/> </factories>
B、配置WEB-INF/flex/remote-config.xml,添加如下代码:
<destination id="loginService"> <properties> <factory>springFactory</factory> <source>loginProxy</source> </properties> </destination>
C、配置WEB-INF/applicationContext.xml,添加如下代码:
<bean id="loginProxy" class="com.coarrow.service.LoginProxy"/>
D、配置WEB-INF/web.xml文件,在description属性后添加如下代码:
<context-param> <param-name>contextConfigLocation</param-name> <param-value>/applicationContext.xml</param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener>
E、编写MXML文件,验证登陆程序:(RemoteObject 中的 destination="loginService" 这是原文的一处错误)
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:RemoteObject id="loginDao" destination="loginService"/> <mx:Script> <![CDATA[ import mx.rpc.events.FaultEvent; import mx.rpc.events.ResultEvent; import mx.controls.Alert; private function callRO(str:String, psw:String):void { if (str.length == 0 || str == "") { errormes.text="用户名不能为空"; } else if (psw.length == 0 || psw == "") { errormes.text="密码不能为空"; } else { loginDao.Login(str, psw); loginDao.addEventListener(ResultEvent.RESULT, resultHandler); loginDao.addEventListener(FaultEvent.FAULT, faultHandler); } } private function resultHandler(event:ResultEvent):void { if (event.message.body.toString() == "success") Alert.show("登陆成功", "成功"); else Alert.show("登陆失败", "失败"); } private function faultHandler(event:FaultEvent):void { Alert.show(event.fault.toString(), "失败"); } private function reset():void { username.text=""; psw.text=""; } ]]> </mx:Script> <mx:Panel title="登录" height="50%" width="80%" paddingTop="10" paddingLeft="10" paddingRight="10" paddingBottom="10" id="mainPanel"> <mx:Label x="34" y="33" text="用户名:"/> <mx:TextInput x="77" y="31" id="username"/> <mx:Label x="34" y="61" text="密 码:"/> <mx:TextInput x="77" y="59" displayAsPassword="true" id="psw"/> <mx:Button x="77" y="90" label="登录" click="callRO(username.text,psw.text);"/> <mx:Button x="90" y="90" label="重置" click="reset()"/> <mx:Label x="163" y="94" id="errormes" color="red"/> </mx:Panel> </mx:Application>
F、检查输出目录的WEB-INF/lib目录下是否有两个asmjar包,删除asm-2.2.3.jar,启动Tomcat。
在地址栏里输入:http://localhost:8080/FlexProject/Client/FlexProject.html