FLEX中的Session管理

转自:呼啸,原文地址: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 plain copy
  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 plain copy
  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 plain copy
  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 plain copy
  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 plain copy
  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>  

你可能感兴趣的:(session)