本文系转载,转载了下面这篇文章,但是修改了其中一处错误,我会在最下面指明:
转载文章的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