轻松打造J2EE的 SSH 与flash builder整合(由Spring类管理)
在此将我所配置方法,,告知大家..让大家少走弯路
下面将由我来 手把手教大家 如果 配置SSH 以及将flash builder整合到一起
并由Spring类来管理,,使flash builder直接通过AMF访问java后台类方
环境:
My Eclipse 8.5
Struts 1.2
Spring 2
hibernate 3.1
flash builder 4 / 或插件版
1.前期环境
新建项目名为: MyWeb
建包:
com.sshf.study.entity (实体包)
com.sshf.study.dao(数据访问包)
com.sshf.study.biz(业务逻辑)
并在 com.sshf.study.biz 包下
新建接口 IHelloWord.java
并再建包 impl, HellWordImpl.java 类(全速路径 com.sshf.study.biz.impl.HellWordImpl). 并实现IHelloWord接口
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 | package com.sshf.study.biz; import com.sshf.study.biz.IHelloWord; public class HelloWordImpl implements IHelloWord{ /** * 测试方法 * @param name * @return */ public String sayHello(String name){ return "HelloHello! " + name; } } |
稍后我们会 测试调用这个方法!
2.开始SSH搭建.
a.首先加入Spring框架
自己加入DataSource sessionFactory 实体bean DAOBean 以及事务..养成好习惯
以下是我的初期配置(稍后会添加):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | <?xml version= "1.0" encoding= "UTF-8" ?> <!-- 导入命名空间--> <beans xmlns= "http://www.springframework.org/schema/beans" xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" xmlns:aop= "http://www.springframework.org/schema/aop" xmlns:tx= "http://www.springframework.org/schema/tx" xsi:schemaLocation="http: //www.springframework.org/schema/beans http: //www.springframework.org/schema/beans/spring-beans-2.0.xsd http: //www.springframework.org/schema/tx http: //www.springframework.org/schema/tx/spring-tx-2.0.xsd http: //www.springframework.org/schema/aop http: //www.springframework.org/schema/aop/spring-aop-2.0.xsd"> <!-- 配置事务管理 --> <bean id= "myHibTxManager" class = "org.springframework.orm.hibernate3.HibernateTransactionManager" > <property name= "sessionFactory" ref= "sessionFactory" /> </bean> <!--配置事务管理策略--> <tx:advice id= "txAdvice" transaction-manager= "myHibTxManager" > <tx:attributes> <tx:method name= "to*" propagation= "SUPPORTS" read-only= "true" /> <tx:method name= "add*" propagation= "REQUIRED" /> <tx:method name= "find*" propagation= "REQUIRED" /> </tx:attributes> </tx:advice> <aop:config> <!--指定用于那些地方--> <aop:pointcut id= "bizMethods" expression= "execution(* com.sshf.study.*.impl.*.*(..))" /> <!-- 织入 --> <aop:advisor advice-ref= "txAdvice" pointcut-ref= "bizMethods" /> </aop:config> <!-- dataSource --> <bean id= "dataSource" class = "org.apache.commons.dbcp.BasicDataSource" > <property name= "driverClassName" value= "com.microsoft.sqlserver.jdbc.SQLServerDriver" > </property> <property name= "url" value= "jdbc:sqlserver://localhost:1433" ></property> <property name= "username" value= "sa" ></property> <property name= "password" value= "dongqiao" ></property> </bean> <bean id= "sessionFactory" class = "org.springframework.orm.hibernate3.LocalSessionFactoryBean" > <property name= "dataSource" > <ref bean= "dataSource" /> </property> <property name= "hibernateProperties" > <props> <prop key= "hibernate.dialect" > org.hibernate.dialect.SQLServerDialect </prop> </props> </property> <property name= "mappingResources" > <list> <value>entity/ConfigQuestionSecondKind.hbm.xml</value> <value>entity/EngageSubjects.hbm.xml</value> <value>entity/ConfigQuestionFirstKind.hbm.xml</value></list> </property> </bean> <!-- DAO --> <!-- biz --> <bean id= "HW" class = "com.sshf.study.biz.impl.HellWordImpl" > </bean> <!-- action --> </beans> |
b.添加Struts支持
如用到Action 一定不要忘了改 代理类 org.springframework.web.struts.DelegatingActionProxy
c.添加hibernate支持.
以上二步省略.. 相信大家都会配..
3.开始将flash builder整合到SSH中
a.下载blazeDS包 将WEB-INF 文件夹下的所有文件夹和文件 拷贝到/WebRoot/WEB-INF/目录下
注意:包括web.xml 全覆盖
b.打开Web.xml 进行配置spring
1 2 3 4 5 6 7 8 9 10 11 12 13 | <!--在web.xml中引入Spring的代码--> <context-param> <!-- 参数名为contextConfigLocation --> <param-name>contextConfigLocation</param-name> <!-- 配置多个文件之间,以 "," 隔开 --> <param-value>/WEB-INF/classes/app.xml</param-value> </context-param> <listener> <listener- class > org.springframework.web.context.ContextLoaderListener </listener- class > </listener> |
(此处app.xml为spring配置文件名 默认为applicationContext.xml)
到此为止..SSH配置完毕..部署运行一下..看是否有错误..
如有错误 自己 改正. 在确保SSH集成后无错 方可 继续.!!
以下步骤很重要
b.新建包com.sshf.study.flash
在该包下新建二个类 SpringFactoryInstance.java FlexFactoryImpl.java
SpringFactoryInstance.java代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | package com.sshf.study.flash; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.BeansException; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.context.ApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; import flex.messaging.FactoryInstance; import flex.messaging.FlexContext; import flex.messaging.FlexFactory; import flex.messaging.config.ConfigMap; import flex.messaging.services.ServiceException; public class SpringFactoryInstance extends FactoryInstance { private Log log = LogFactory.getLog(getClass()); SpringFactoryInstance(FlexFactory factory, String id, ConfigMap properties) { super (factory, id, properties); } public Object lookup() { System.out.println( "3---spring工厂类的方法lookup" ); ApplicationContext appContext = WebApplicationContextUtils.getRequiredWebApplicationContext(FlexContext.getServletConfig().getServletContext()); String beanName = getSource(); try { log.info( "Lookup bean from Spring ApplicationContext: " + beanName); return appContext.getBean(beanName); } catch (NoSuchBeanDefinitionException nex) { ServiceException e = new ServiceException(); String msg = "Spring service named '" + beanName + "' does not exist." ; e.setMessage(msg); e.setRootCause(nex); e.setDetails(msg); e.setCode( "Server.Processing" ); throw e; } catch (BeansException bex) { ServiceException e = new ServiceException(); String msg = "Unable to create Spring service named '" + beanName + "'." ; e.setMessage(msg); e.setRootCause(bex); e.setDetails(msg); e.setCode( "Server.Processing" ); throw e; } catch (Exception ex) { ServiceException e = new ServiceException(); String msg = "Unexpected exception when trying to create Spring service named '" + beanName + "'." ; e.setMessage(msg); e.setRootCause(ex); e.setDetails(msg); e.setCode( "Server.Processing" ); throw e; } } } |
FlexFactoryImpl.java代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | package com.sshf.study.flash; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import flex.messaging.FactoryInstance; import flex.messaging.FlexFactory; import flex.messaging.config.ConfigMap; public class FlexFactoryImpl implements FlexFactory { private Log log = LogFactory.getLog(getClass()); /*override interface method*/ public void initialize(String id, ConfigMap configMap) { System.out.println( "1---flex工厂实现类重写的方法initialize" ); } /*override interface method*/ public FactoryInstance createFactoryInstance(String id, ConfigMap properties) { System.out.println( "2---flex工厂实现类重写的方法createFactoryInstance" ); log.info( "Create FactoryInstance." ); SpringFactoryInstance instance = new SpringFactoryInstance( this , id, properties); instance.setSource(properties.getPropertyAsString(SOURCE, instance.getId())); return instance; } /*override interface method*/ public Object lookup(FactoryInstance instanceInfo) { System.out.println( "4---flex工厂实现类重写的方法lookup" ); log.info( "Lookup service object." ); return instanceInfo.lookup(); } } |
打开/WEB-INF/flex/services-config.xml 配置文件
加入FlexFactory实现类
1 2 3 | < factories > < factory id="flexFactoryImpl" class="com.sshf.study.flash.FlexFactoryImpl"/> </ factories > |
打开/WEB-INF/flex/remoting-config.xml 配置文件
然后将 services中的factory的实现类所调用的类配置关联
1 2 3 4 5 6 7 8 9 | < destination id="flash"> < properties > <!-- flexFactory实现类 --> < factory >flexFactoryImpl</ factory > <!-- 对外的访问类 为spring配置中的bean id --> < source >HW</ source > < scope >application</ scope > </ properties > </ destination > |
到此为止 配置完毕
部署运行..有错误改之
4.新建一个flex 项目
并新建一个mxml
不一一做介绍了..添加一个 文本框 和一个 按钮..
点击 按钮 将 文本框中 字符串 传入到 HelloWordImpl 的 sayHello中.并取返回值 输出
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | <?xml version= "1.0" encoding= "utf-8" ?> <s:Application xmlns:fx= "http://ns.adobe.com/mxml/2009" xmlns:s= "library://ns.adobe.com/flex/spark" xmlns:mx= "library://ns.adobe.com/flex/mx" minWidth= "955" minHeight= "600" > <fx:Script> <!--[CDATA[ import mx.controls.Alert; import mx.rpc.events.FaultEvent; import mx.rpc.events.ResultEvent; protected function button1_clickHandler(event:MouseEvent): void { var remote:RemoteObject = new RemoteObject(); remote.destination = "flash" ; //remoting-config中destination ID //访问地址可改 在web.xml中修改 这里默认 remote.endpoint = "http://localhost:8080/myWeb/messagebroker/amf" ; remote.addEventListener(ResultEvent.RESULT, myResult); //添加访问成功后回调函数 remote.addEventListener(FaultEvent.FAULT,fault); //添加访问失败后回调函数 remote.sayHello(u.text); //执行 服务器类的 sayHell方法, } private function myResult(evt:ResultEvent): void { Alert.show(evt.result.toString()); } private function fault(evt:FaultEvent): void { Alert.show(evt.fault.message); } ]]--> </fx:Script> <fx:Declarations> <!-- 将非可视元素(例如服务、值对象)放在此处 --> <mx:RemoteObject id= "say" destination= "Test" > </mx:RemoteObject> </fx:Declarations> <s:Button x= "451" y= "251" label = "按钮" click= "button1_clickHandler(event)" /> <s:TextInput x= "290" y= "250" id= "u" /> </s:Application> |
以上为整合内容.
由于本人最近较忙..故没有多少时间!!
有时间给大家做一些 控件 以及 其它 与java后台高级交互文章..
that's all ! 董侨 QQ5596152
转载请说明出处.!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?