FLEX +SSH实践

来源:互联网 发布:淘宝助理关联电子面单 编辑:程序博客网 时间:2024/06/16 05:31

     前言最近在网看见有人请求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        struts212        org.apache.struts2.dispatcher.FilterDispatcher13    14    15        struts216        /*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 {2   3      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;2   3  import po.User;4   5  public interface UserDao {        public User getUserByAccount(String account);    public boolean addUser(String account,String password);9   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 {2   3      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里面 大家可以随时下载哈)

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