FLEX +SSH实践

     前言最近在网看见有人请求flex+ssh的例子,其实我自己觉得,如果要结合flex开发完全用不着struts,因为flex有开源的项目BlazeDS ,更容易和Spring Hibernate 结合,但是既然大家需要加之SSH在现在还很流行,我就把我自己所了解的分享给大家,希望大家喜欢,我自己的水平有限哈,其中有很多不足,希望大家能够指出。

           开发环境:OS(Windows7 professional), IDE(MyEclipse blue 7.5   FlashBuilder Standalone), Server(Jboss 4.2),DB(MySQL)

          所需要导入的包:JSON-lib for java(下载)     JSON-lib for as(下载)

          例子介绍:一个简单的用户注册登录,嗯,其实FLEX+SSH这样的组合,是用FLEX来取代JSP的角色

          适合对象:本文需要你对SSH开发有所了解,然后对flex开发比较感兴趣

      下面我们就详细介绍,从我们开发项目的顺序开始,先配置开发环境,这个我就不在多说了,只是说说我所用的框架版本Struts2.0  Spring2.5 Hibernate 3.2  ,结构图如下图:

                           }W[AEEX1UJR}COPUDK0Z0HB 

下面看看我们配置文件

Struts2和struts1.x不同 它是用Filter来截获请求 ,要结合Spring 就还必须加入listener ,设置applicationContext.xml的位置,我们一般放到WEB-INF下面,下面是web.xml

     
        contextConfigLocation
        /WEB-INF/applicationContext.xml
   
      
       
               org.springframework.web.context.ContextLoaderListener
       
   
10       
11        struts2
12        org.apache.struts2.dispatcher.FilterDispatcher
13    
14    
15        struts2
16        /*
17     
18    
19 
在SSH,我们一般都用Spring来创建sessionFactory,而不去用Hibernnate的  ,所以我们在导入hibernate框架时就用不着创建hibernate sessionFactory .  在applicationContext.xml里面创建一个bean就行了
 
 id="sessionFactory"
        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
         name="configLocation"
            value="classpath:hibernate.cfg.xml">
       
           

由于MyEclipse 的版本比较低 所以没有Struts2.0  ,所以只有自己导入,在这里要说一点,一定要记得到如struts2-spring-plugin-2.0.14.jar  然后在struts.xml加一句

 name="struts.objectFactory" value="spring" />

下面就是一步一步写我们的代码:

      1) 建立po: po.User.java

public class User {
 
    private String account;
    private String password;

      2)建立映射文件:po.User.hbm.xml 这里我们只是简单的测试,所以在数据库里面就保存账户和密码就行了

 version="1.0"?>
 hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
     name="po.User" table="T_USER">
         name="account" column="UACCOUNT">
             class="assigned"/> 
       
10           name="password" column="UPASSWORD"/>
11      
12 

    3)po建立完成后就写我们的dao 由于要用到Spring的注入功能和实现模块的可插拔(我们老师经常这么说),所以就要开发接口dao.UserDao.java,我们要提供用户注册登录功能,所以在Dao中包含了下面那两个函数

package dao;
 
import po.User;
 
public interface UserDao {
   
    public User getUserByAccount(String account);
    public boolean addUser(String account,String password);
 
10  }

   4)然后就写实现类daoimple.UserDaoImpl.java 这里就不必在多说了也不必插入代码了不过有点要说明 在这里UserDaoImpl不仅要实现UserDao 还要继承HibernateDaoSupport ,因为只有继承了这个类,在DAO里面才能调用Spring的sessionFactory,看看在Spring里面创建dao你就可以明白了

public class UserDaoImpl extends HibernateDaoSupport implements UserDao {

   5)在Spring中创建dao bean 这样在后面我们就方便的可以报UserDao 注入Action里面了  

 id="udao" class="daoimpl.UserDaoImpl">
        name="sessionFactory" ref="sessionFactory">
   

  6)用户有两个动作(注册登录)所以我们创建了RegisterAction LoginAction   这里重点,我在网上看见好多flex与struts结合的例子都通过getRequest().getParameter(arg0) 来获得flex请求参数 ,我们这里不,因为用flex也可以像jsp那样自动填充Action里面的属性,当说到flex代码是我会具体说说。

public class LoginAction {
 
    private String account;
    private String password;
    private UserDao udao;
    public String getAccount() {
        return account;
    }
    public void setAccount(String account) {
10          this.account = account;
11      }
12      public String getPassword() {
13          return password;
14      }
15      public void setPassword(String password) {
16          this.password = password;
17      }
18      public String execute() throws IOException{
19          HttpSession session =ServletActionContext.getRequest().getSession();
20          HttpServletResponse response = ServletActionContext.getResponse();
21     
22          Map map = new HashMap(); 
23          User u = null;
24          u = (User)session.getAttribute("user");
25          if(u!=null){
26              map.put("result", "true");
27             
28             
29          }
30          else{
31          u = udao.getUserByAccount(account);
32          if(u!=null&&u.getPassword().equals(password)){
33              map.put("result", "true");
34             
35         
36          }
37          else{
38              map.put("result", "false");
39             
40             
41          }
42         
43          }
44           JSONObject json = JSONObject.fromObject( map ); 
45           session.setAttribute("result", json.toString());
46          return "result";
47         
48         
49      }
50      public UserDao getUdao() {
51          return udao;
52      }
53      public void setUdao(UserDao udao) {
54          this.udao = udao;
55      }
56  }

Struts2与struts1.x有很大的区别,在Struts1.x中每个Action都必须继承org.apache.struts.action.Action而Struts2却不用继承任何类,我们老师说着就避免了软件工程中所谓的代码入侵,其实我也不怎么懂,说说上面的action吧 大家看见了,我在execute()函数里面用了JSON 大致是这样的 flex请求Action action返回JSON生成的对象比如登录成功就会返回{“result”:”true”}

然后看Spring怎么调用Action

我们把每个action都作为一个bean创建在Spring中,然后在struts.xml配置action只需要bean的id就行了

 id="LoginAction" class="action.LoginAction">
        name="udao" ref="udao">
   
 name="login" class="LoginAction">
        name="result"> /result.jsp
   
现在基本把SSH代码写好了 ,写jsp测试,放到服务器里面,测试通过就进行下一步,
 
现在写flex代码,我想现在有FLEX+SSH这样的组合,也是有原因的,因为FLEX开发界面是可视化编程,比开发JSP轻松松了,让我们这些不会做界面的程序员也能做出漂亮的界面
下面是简单的一个界面
2

主要代码就制作两个表单

flex我就只讲重点的部分 至于界面 我不想过多讲

先看看结构吧

                          3

初始化两个HttpService

         id="loginService" showBusyCursor="true"/>
         id="registerService" showBusyCursor="true"/>
   
 

然后对这两个Service初始化 我比较喜欢写函数初始化

//初始化函数
            private function init():void{
                //用户登陆
                loginService.method ="POST";
                loginService.url="http://localhost:8888/TestFlex/login.action";
                loginService.addEventListener(ResultEvent.RESULT,loginHandler);
                loginService.addEventListener(FaultEvent.FAULT,faultHandler);
                //用户注册
                registerService.method="POST";
10                  registerService.url ="http://localhost:8888/TestFlex/register.action";
11                  registerService.addEventListener(ResultEvent.RESULT,registerHandler);
12                  registerService.addEventListener(FaultEvent.FAULT,faultHandler);
13                 
14             
15              }

具体代码就贴出来 ,我会把我所哟的源代码提供下载,我主要想说flex请求是 怎么让Action填充属性,同过flex的URLVariables

比如我登录时

  var parameters:URLVariables = new URLVariables();
                parameters.account = loginaccount.text;
                parameters.password = loginpassword.text;
                loginService.send(parameters);

同过上述代码请求就能让Action自动填充属性

现在来操作一下吧

4

    private function loginHandler(e:ResultEvent):void{
                var obj:Object = JSON.decode(e.result.toString());
                var bol:Boolean = new Boolean(obj.result);
               
                if(bol){
                    mx.controls.Alert.show("恭喜你登陆成功!");
                }
           
            }

这里我为什么不直接从服务端返回提示信息 而是返回JSON对象了  因为在大的项目里面数据交换复杂 同过JSON能够方便的操作这些数据,我这里也是提供给大家想法 如果之际从服务端返回提示信息业可以。

注册 登录 成功!

这是我第一次写博客,还有也是第一次写技术文章 ,很多地方讲的不清楚,如果不清楚大家多多看看代码哈

下载项目(在我的MSN里面 大家可以随时下载哈)

如果感兴趣就转载吧,不过请顺便把链接给转过去哈!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值