轻松打造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

转载请说明出处.!!

posted @   董侨  阅读(687)  评论(0编辑  收藏  举报
编辑推荐:
· 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,谁才是开发者新宠?
点击右上角即可分享
微信分享提示