`
退役的龙弟弟
  • 浏览: 453804 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

FLEX中的Session管理

    博客分类:
  • flex
 
阅读更多

转自:呼啸,原文地址:http://blog.csdn.net/howlaa/article/details/8533180

 

最近做的项目需要保存从FLEX端登录进来的信息。我最先想到的是HttpServlet的Session来管理。以失败而告终。又试着用全局变量保存,也失败了。折腾的够呛。今天又在苦苦寻找,无意中看到一篇文章,终于解决。非常感谢原文作者!

我的代码因为是实际项目,牵涉点较多,可能影响你观察FLEX中的Session,你可以看原文章,较为简洁。地址:http://blog.csdn.net/zc529739024/article/details/8045227#reply

FLEX中实现Session的一个类是FlexContext类,他将SESSION保存在服务端。

1、首先,确保你的BLAZEDS搭建(将下载得到的blazeds解压,将解压得到的WEB-INF和META-INF两个文件夹拷贝到你的WEB-ROOT文件下)的利用Object 与java通讯正常。

2、新建java类 FlexSession:

 

[java] view plaincopy
  1. package com.greencloud.service;  
  2.   
  3.   
  4. import flex.messaging.FlexContext;    
  5. public class FlexSession {  
  6.     /** 
  7.      * 保存Session 
  8.      * @author wangfeng 
  9.      * @date 2013-01-23 11:12:39 
  10.      * @param name 
  11.      * @param value 
  12.      */  
  13.     public void setSession(String name,String value){    
  14.         FlexContext.getFlexSession().setAttribute(name,value);    
  15.     }  
  16.       
  17.     /** 
  18.      * 获取Session 
  19.      * @author wangfeng 
  20.      * @date 2013-01-23 11:12:50 
  21.      * @param name 
  22.      * @return 
  23.      */  
  24.     public String getSession(String name){    
  25.         String value=(String) FlexContext.getFlexSession().getAttribute(name);    
  26.         return value;    
  27.     }   
  28.       
  29.     /** 
  30.      * 清除Session 
  31.      * @author wangfeng 
  32.      * @date 2013-01-23 11:13:10 
  33.      * @param name 
  34.      */  
  35.      public void removeSession(String name){    
  36.          FlexContext.getFlexSession().removeAttribute(name);    
  37.      }  
  38. }  


3、在WBE-INF\flex\remoting-config.xml里配置:

 

 

[html] view plaincopy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <service id="remoting-service"   
  3.     class="flex.messaging.services.RemotingService">  
  4.   
  5.     <adapters>  
  6.         <adapter-definition id="java-object" class="flex.messaging.services.remoting.adapters.JavaAdapter" default="true"/>  
  7.     </adapters>  
  8.   
  9.     <default-channels>  
  10.         <channel ref="my-amf"/>  
  11.     </default-channels>  
  12.       
  13.     <destination id="serviceTest">  
  14.         <properties>  
  15.             <source>test.ServiceTest</source>  
  16.         </properties>  
  17.     </destination>  
  18.       
  19.     <destination id="UserService">  
  20.         <properties>  
  21.             <source>com.greencloud.service.UserService</source>  
  22.         </properties>  
  23.     </destination>  
  24.       
  25.      <destination id="dayReportService">  
  26.         <properties>  
  27.             <source>com.greencloud.dao.DayreportDao</source>  
  28.         </properties>  
  29.     </destination>  
  30.       
  31.     <destination id="sessionManage">  
  32.         <properties>  
  33.             <source>com.greencloud.service.FlexSession</source>  
  34.         </properties>  
  35.     </destination>  
  36. </service>  

UserService.java:

 

[java] view plaincopy
  1. package com.greencloud.service;  
  2.   
  3.   
  4. import java.sql.Connection;  
  5. import java.sql.PreparedStatement;  
  6. import java.sql.ResultSet;  
  7. import java.sql.SQLException;  
  8. import java.util.ArrayList;  
  9. import java.util.List;  
  10.   
  11. import javax.servlet.http.HttpServlet;  
  12.   
  13. import com.greencloud.db.DBUtlie;  
  14. import com.greencloud.entity.User;  
  15.   
  16. public class UserService extends HttpServlet{  
  17.     /** 
  18.      *  
  19.      */  
  20.     private static final long serialVersionUID = 1L;  
  21.     private Connection con = null;  
  22.     private PreparedStatement ps;  
  23.     private ResultSet rs;  
  24.     private User user;  
  25.     private FlexSession flexSession;  
  26.     public List<User> getUserList()throws SQLException{  
  27.         List<User> list = new ArrayList<User>();  
  28.         try{  
  29.             list = new ArrayList<User>();  
  30.             con = new DBUtlie().getConnection();  
  31.             String sql = "select * from s_user";  
  32.             ps = con.prepareStatement(sql);  
  33.             rs = ps.executeQuery();  
  34.             while(rs.next()){  
  35.                 User user = new User();  
  36.                 System.out.println("query it's ok");  
  37.                 user.setUserId(rs.getInt("userId"));  
  38.                 user.setLoginName(rs.getString("loginName"));  
  39.                 user.setPassword(rs.getString("password"));  
  40.                 user.setRealName(rs.getString("realName"));  
  41.                 user.setEmail(rs.getString("email"));  
  42.                 user.setDesc(rs.getString("desc"));  
  43.                 user.setDeptId(rs.getInt("deptId"));  
  44.                 user.setDeptName(rs.getString("deptName"));  
  45.                 user.setOrderBy(rs.getInt("orderBy"));  
  46.                 user.setIsAdmin(rs.getInt("isAdmin"));  
  47.                 user.setIsLocked(rs.getInt("isLocked"));  
  48.                 list.add(user);  
  49.             }  
  50.         }catch (Exception e) {  
  51.             e.printStackTrace();  
  52.         }finally{  
  53.             try{  
  54.                 rs.close();  
  55.                 ps.close();  
  56.                 con.close();  
  57.             }catch (Exception e) {  
  58.                 e.printStackTrace();  
  59.             }  
  60.         }  
  61.         return list;  
  62.     }  
  63.       
  64.     public String userLogin(String name,String password){  
  65.         String userName = name;  
  66.         System.out.println("loginName:"+name);  
  67.         System.out.println("password:"+password);  
  68.         List<User> list = new ArrayList<User>();  
  69.         try{  
  70.             list = new ArrayList<User>();  
  71.             con = new DBUtlie().getConnection();  
  72.             String sql = "select * from s_user where loginName = '"+userName+"'";  
  73.             ps = con.prepareStatement(sql);  
  74.             rs = ps.executeQuery();  
  75.             while(rs.next()){  
  76.                 User user = new User();  
  77.                 System.out.println("query it's ok");  
  78.                 user.setUserId(rs.getInt("userId"));  
  79.                 user.setLoginName(rs.getString("loginName"));  
  80.                 user.setPassword(rs.getString("password"));  
  81.                 user.setRealName(rs.getString("realName"));  
  82.                 user.setEmail(rs.getString("email"));  
  83.                 user.setDesc(rs.getString("desc"));  
  84.                 user.setDeptId(rs.getInt("deptId"));  
  85.                 user.setDeptName(rs.getString("deptName"));  
  86.                 user.setOrderBy(rs.getInt("orderBy"));  
  87.                 user.setIsAdmin(rs.getInt("isAdmin"));  
  88.                 user.setIsLocked(rs.getInt("isLocked"));  
  89.                 list.add(user);  
  90.             }  
  91.         }catch (Exception e) {  
  92.             e.printStackTrace();  
  93.         }finally{  
  94.             try{  
  95.                 rs.close();  
  96.                 ps.close();  
  97.                 con.close();  
  98.             }catch (Exception e) {  
  99.                 e.printStackTrace();  
  100.             }  
  101.         }  
  102.         if(list == null || list.size()<1){  
  103.             return "fail";  
  104.         }  
  105.           
  106.         for(int i=0;i<list.size();++i){  
  107.             user = list.get(i);  
  108.         }  
  109.   
  110.         System.out.println("password:"+user.getPassword());  
  111.         if(user.getPassword().equals(password)){  
  112.             flexSession = new FlexSession();  
  113.             System.out.println("login success...");  
  114.             flexSession.setSession("account", user.getRealName());  
  115.             System.out.println("flexSession is ok!");  
  116.             return "success";  
  117.         }  
  118.         else{  
  119.             System.out.println("login fail...");  
  120.             return "fail";  
  121.         }  
  122.     }  
  123.       
  124.       
  125. }  



 

FLEX端:

 

登录页:

logClient.mxml:

 

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"   
  3.                xmlns:s="library://ns.adobe.com/flex/spark"   
  4.                xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" applicationComplete="application1_applicationCompleteHandler(event)">  
  5.     <fx:Declarations>  
  6.         <!-- 将非可视元素(例如服务、值对象)放在此处 -->  
  7.     <!-- <s:RemoteObject id="sessionManage" endpoint="http://localhost:8080/log/messagebroker/amf" destination="sessionManage">  
  8.             <s:method name="setSession" result="sessionManage_resultHandler(event)" fault="sessionManage_faultHandler(event)"/>  
  9.         </s:RemoteObject>-->  
  10.           
  11.         <s:RemoteObject id="UserService" endpoint="http://localhost:8080/log/messagebroker/amf" destination="UserService">  
  12.             <s:method name="userLogin" result="userLogin_resultHandler(event)" fault="userLogin_faultHandler(event)"/>  
  13.         </s:RemoteObject>  
  14.     </fx:Declarations>  
  15.     <fx:Script>  
  16.         <![CDATA[ 
  17.             import com.greencloud.view.IndexView; 
  18.             import com.greencloud.vo.User; 
  19.             import mx.charts.CategoryAxis; 
  20.             import mx.collections.ArrayList; 
  21.             import mx.controls.Alert; 
  22.             import mx.controls.Tree; 
  23.             import mx.core.Application; 
  24.             import mx.events.FlexEvent; 
  25.             import mx.events.Request; 
  26.             import mx.managers.PopUpManager; 
  27.             import mx.rpc.events.FaultEvent; 
  28.             import mx.rpc.events.ResultEvent; 
  29.              
  30.             //初始化方法  
  31.  
  32.             protected function application1_applicationCompleteHandler(event:FlexEvent):void 
  33.             { 
  34.                  
  35.                 this.addEventListener(KeyboardEvent.KEY_DOWN,onEnterHandler); 
  36.                  
  37.             } 
  38.              
  39.             //登录 
  40.             protected function login_clickHandler(event:MouseEvent):void 
  41.             { 
  42.                  
  43.                  
  44.                 var strLoginName:String = loginName.text; 
  45.                 var strPassword:String = password.text; 
  46.                 if(strLoginName!="" && strPassword!="") 
  47.                 { 
  48.                     UserService.userLogin(strLoginName,strPassword); 
  49.                 } 
  50.                 else{ 
  51.                     Alert.show("用户名或密码不能为空","系统提示"); 
  52.                 } 
  53.             } 
  54.              
  55.             //监听回车键 
  56.             protected function onEnterHandler(event:KeyboardEvent):void 
  57.             { 
  58.                 if(event.keyCode == Keyboard.ENTER) 
  59.                 { 
  60.                     var strLoginName:String = loginName.text; 
  61.                     var strPassword:String = password.text; 
  62.                     if(strLoginName!="" && strPassword!="") 
  63.                     { 
  64.                         UserService.userLogin(strLoginName,strPassword); 
  65.                     } 
  66.                     else{ 
  67.                         Alert.show("用户名或密码不能为空","系统提示"); 
  68.                     } 
  69.                 } 
  70.             } 
  71.              
  72.              
  73.             protected function userLogin_resultHandler(event:ResultEvent):void 
  74.             { 
  75.                 var str:String = event.result as String; 
  76.                 if(str == "success") 
  77.                 { 
  78.                      
  79.                     Alert.show("this.user is..."); 
  80.                     var indexUrl:URLRequest = new URLRequest("http://localhost:8080/log/logClient-debug/IndexView.html"); 
  81.                     try 
  82.                     { 
  83.                         navigateToURL(indexUrl,"_self"); 
  84.                     } 
  85.                     catch(e:Error){ 
  86.                         Alert.show("跳转页面失败","系统提示"); 
  87.                     } 
  88.                 } 
  89.                 else 
  90.                 { 
  91.                     Alert.show("登录失败,请检查用户名和密码的正确性","系统提示"); 
  92.                 } 
  93.             } 
  94.              
  95.             protected function userLogin_faultHandler(event:FaultEvent):void 
  96.             { 
  97.                 Alert.show(event.fault.message,"出错了");  
  98.             } 
  99.              
  100.              
  101.             //重置 
  102.             protected function reset_clickHandler(event:MouseEvent):void 
  103.             { 
  104.                 loginName.text=null; 
  105.                 password.text=null; 
  106.             } 
  107.              
  108.              
  109.              
  110.         ]]>  
  111.     </fx:Script>  
  112.     <s:Panel width="100%" height="70%"  top="50" bottom="10" left="10" right="10">  
  113.         <s:layout>  
  114.             <s:HorizontalLayout paddingBottom="5" paddingLeft="5" paddingRight="5" paddingTop="5" gap="10"/>  
  115.         </s:layout>  
  116.         <s:VGroup width="100%" height="100%">  
  117.         </s:VGroup>  
  118.         <s:VGroup width="100%" height="100%">  
  119.             <s:Spacer width="100%" height="100%">  
  120.             </s:Spacer>  
  121.             <mx:FormItemLabel text="用户登录:" fontSize="15" fontWeight="normal"/>  
  122.             <s:FormItem label="用户名:" textAlign="left" fontSize="13">  
  123.                 <s:HGroup>  
  124.                     <s:Spacer width="5" height="100%"/>  
  125.                     <s:TextInput id="loginName" maxChars="250"/>    
  126.                 </s:HGroup>  
  127.             </s:FormItem>  
  128.             <s:FormItem label="密码:" textAlign="left" fontSize="13">  
  129.                 <s:HGroup>  
  130.                     <s:Spacer width="17" height="100%"/>  
  131.                     <s:TextInput id="password" maxChars="250" displayAsPassword="true"/>    
  132.                 </s:HGroup>  
  133.             </s:FormItem>  
  134.             <s:HGroup  width="100%">  
  135.                 <s:Spacer width="15" height="100%"/>  
  136.                 <s:Button id="login" label="登录" click="login_clickHandler(event)"/>  
  137.                 <s:Spacer width="35" height="100%"/>  
  138.                 <s:Button id="reset" label="重置" click="reset_clickHandler(event)"/>  
  139.             </s:HGroup>  
  140.             <s:Spacer width="100%" height="100%">  
  141.             </s:Spacer>  
  142.         </s:VGroup>  
  143.     </s:Panel>  
  144.       
  145. </s:Application>  


跳转页:IndexView.mxml

 

 

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"   
  3.                xmlns:s="library://ns.adobe.com/flex/spark"   
  4.                xmlns:mx="library://ns.adobe.com/flex/mx"  minWidth="955" minHeight="600" applicationComplete="application1_applicationCompleteHandler(event)">  
  5.     <fx:Declarations>  
  6.         <!-- 将非可视元素(例如服务、值对象)放在此处 -->  
  7.         <s:RemoteObject id="sessionManage" destination="sessionManage" endpoint="http://localhost:8080/log/messagebroker/amf">   
  8.             <s:method name="getSession" result="sessionManage_resultHandler(event)" fault="sessionManage_faultHandler(event)"/>  
  9.         </s:RemoteObject>  
  10.     </fx:Declarations>  
  11.     <fx:Script>  
  12.         <![CDATA[ 
  13.             import com.greencloud.component.PanelEx; 
  14.             import com.greencloud.vo.User; 
  15.              
  16.             import mx.collections.ArrayList; 
  17.             import mx.controls.Alert; 
  18.             import mx.controls.Tree; 
  19.             import mx.core.FlexGlobals; 
  20.             import mx.events.FlexEvent; 
  21.             import mx.rpc.events.FaultEvent; 
  22.             import mx.rpc.events.ResultEvent; 
  23.             [Bindable]private var account:String="";  
  24.              
  25.             protected function sessionManage_resultHandler(event:ResultEvent):void  
  26.             {  
  27.                 //注意获得Session的方式  
  28.                 account=event.result as String;  
  29.                 message.text=account+",欢迎您归来..."  
  30.             } 
  31.              
  32.             protected function sessionManage_faultHandler(event:FaultEvent):void  
  33.             {  
  34.                 Alert.show("获取session失败...","提示");  
  35.             }  
  36.              
  37.              
  38.              
  39.             protected function application1_applicationCompleteHandler(event:FlexEvent):void 
  40.             { 
  41.                  
  42.                 //获取session  
  43.                 sessionManage.getSession("account");  
  44.             } 
  45.              
  46.             protected function exist_clickHandler(event:MouseEvent):void  
  47.             {  
  48.                 // TODOAuto-generated method stub  
  49.                 //清除session  
  50.                 sessionManage.removeSession("account");  
  51.                 var url:URLRequest=new URLRequest("http://localhost:8080/log/logClient-debug/logClient.html");  
  52.                 navigateToURL(url,"_self");  
  53.             }  
  54.              
  55.         ]]>  
  56.     </fx:Script>  
  57.     <s:Label x="394" y="229" fontSize="18" width="229" height="31" id="message"/>    
  58.     <s:Button x="443" y="283" label="退出" id="exist" fontSize="16" click="exist_clickHandler(event)"/>   
  59. </s:Application>  
分享到:
评论

相关推荐

    Flex+J2EE获取FlexSession的方法

    在探讨“Flex+J2EE获取FlexSession的方法”这一主题时,我们首先需要理解Flex与J2EE在Web开发中的角色以及如何通过它们实现会话管理。Flex是一种用于构建高度交互式的客户端应用程序的技术,而J2EE(Java 2 ...

    flex中的UserInfoSys源码

    在Flex开发中,UserInfoSys是一个常见的用户信息管理系统,它结合了Struts1.2、Spring2.0和Hibernate3.0这三大经典技术框架,构建了一个功能完备的后端数据处理系统。这篇解析将深入探讨这个系统的架构、设计模式...

    flex中tree的数据源是xml

    这种方式不仅实现了数据的有效管理和传递,还极大地提高了Flex应用程序的灵活性和性能。对于开发者而言,掌握这种方法有助于更好地应对实际项目中的复杂需求,提升开发效率。同时,这也为今后的学习和实践提供了一个...

    Flex实现的xmpp消息发送接收

    XIFF(eXtensible Internet Framework)是Flex中一个用于处理XMPP协议的库,它允许开发者在Flex应用程序中实现XMPP功能,比如创建用户会话、发送和接收消息、管理用户状态等。XIFF为Flex提供了与XMPP服务器交互的...

    Flex做的登录表单

    如果登录成功,可能会涉及到用户状态的管理,例如设置session或cookie来保持登录状态。Flex可以通过SharedObject或者在服务器端处理来实现。 10. **响应式设计**: 考虑到不同的设备和屏幕尺寸,Flex的布局管理器...

    flex4+spring+blazeds整合技术

    本文将详细介绍如何在Flex4环境中,利用Spring管理Java后端Bean,并通过BlazeDS实现Flex与服务器间的通信。 首先,我们需要理解Flex4、Spring和BlazeDS各自的角色。Flex4是Flash Builder中的一个组件,它提供了一套...

    flex和hibernate的整合

    5. **错误处理和事务管理**:在整合过程中,需要考虑错误处理和事务边界。Flex客户端需要捕获并处理可能出现的服务器端异常,并且确保在分布式环境中,数据库操作的原子性和一致性。 6. **缓存策略**:为了提高性能...

    FreeSWITCH的Flex示范包

    在这个压缩包中,"flex"可能是指一系列与Flex编译器或Flex框架相关的示例代码或应用程序,尽管在FreeSWITCH的上下文中,这个名字可能更多地指的是其灵活性和多用途性。 FreeSWITCH的WebPhone特性允许用户通过浏览器...

    flex3多表查询Gilead使用

    总的来说,Flex3的Gilead库可能是为了解决复杂的数据库操作和会话管理问题而设计的,它提供了方便的API和可能的自定义session管理机制,使得在Flex3应用中进行多表查询和保持用户会话变得更加简单。为了充分利用这个...

    ssh+flex配置

    SSH+Flex配置是一种常见的Java Web开发技术组合,用于构建高效...这个组合在过去的几年中被广泛应用于企业级项目中,尽管现代Web开发可能更倾向于使用React或Vue等前端框架,但SSH+Flex仍然在一些项目中占有一席之地。

    Flex+spring+hibernate

    通过Spring的HibernateTemplate或SessionFactoryBean,可以实现DAO层的事务管理和Session管理。 4. **实体映射**:Hibernate负责将Java对象映射到数据库表。开发者定义实体类,并使用注解或XML配置来描述对象与表的...

    FLEX和spring、hibernate的集成

    当涉及到与Hibernate的集成时,Spring提供了对Hibernate的全面支持,可以管理SessionFactory和Session。在配置文件中,我们可以定义数据访问层的bean,比如`SessionFactory`,并利用Spring的事务管理功能来处理...

    flex与spring hibernate的整合

    5. **Flex客户端调用**:在Flex中,你可以使用HTTPService或WebService组件来调用Spring服务。通过AMF,这些服务请求会直接映射到Spring中的Bean方法。 6. **数据绑定**:Flex的强项在于UI交互,可以利用数据绑定...

    flex+asp制作的聊天室源码

    在ASP中,可能使用了数据库连接来存储聊天记录,用户信息,以及通过Session对象来区分管理用户和一般用户。Session是ASP中的一个内置对象,用于存储用户会话期间的信息。当管理用户的Session被赋值为1时,系统就可以...

    flex4+spring+hibernat实例

    Flex4、Spring和Hibernate是构建企业级Web应用的三大核心技术,它们分别负责用户界面、业务逻辑和服务层的数据管理。在本实例项目中,这三者结合,为开发者提供了一个全面的解决方案,使得前后端能够有效地协同工作...

    flex-ibatis-sping项目的创建

    -- 监听Flex的session通信 --&gt; flex.messaging.HttpFlexSession &lt;!-- 通信服务配置文件 --&gt; &lt;servlet-name&gt;MessageBrokerServlet flex.messaging.MessageBrokerServlet &lt;param-name&gt;services....

    flex + asp.net web应用开发实战详解 code p2

    Flex可以使用Flex State Management或使用ASP.NET的ViewState和Session来保存和恢复用户状态。 7. **安全性**:在Flex与ASP.NET集成中,安全性是不可忽视的。可以使用ASP.NET的身份验证和授权机制,配合Flex的安全...

    Flex+hibernate+spring整合

    4. **Hibernate整合**:Spring提供了对Hibernate的全面支持,包括Session工厂、事务管理和DAO(Data Access Object)模板。通过Spring,可以更容易地管理和控制Hibernate会话,减少代码复杂性。 5. **Model-View-...

    ssh+flex+blazed

    - 它包括一系列组件,如MessageBrokerServlet、HTTP Flex Session、Remoting服务等,用于实现远程方法调用、消息代理和数据推送。 4. **集成过程**: - 创建一个J2EE Web工程,如`Sample`,作为后端服务的基础。 ...

    基于Flex的ArcIMS地图发布研究

    5. **改善状态管理机制**:利用Flex中的状态管理技术,改善传统页面技术中状态管理不足的问题,提高应用的整体性能。 综上所述,基于Flex的ArcIMS地图发布技术不仅解决了现有技术的局限性,还极大提升了地图发布的...

Global site tag (gtag.js) - Google Analytics