FLEX中的Session管理
发布时间:2020-12-15 04:30:52 所属栏目:百科 来源:网络整理
导读:最近做的项目需要保存从FLEX端登录进来的信息。我最先想到的是 HttpServlet的Session来管理。以失败而告终。又试着用全局变量保存,也失败了。折腾的够呛。今天又在苦苦寻找,无意中看到一篇文章,终于解决。非常感谢原文作者! 我的代码因为是实际项目,牵涉
最近做的项目需要保存从FLEX端登录进来的信息。我最先想到的是HttpServlet的Session来管理。以失败而告终。又试着用全局变量保存,也失败了。折腾的够呛。今天又在苦苦寻找,无意中看到一篇文章,终于解决。非常感谢原文作者! 我的代码因为是实际项目,牵涉点较多,可能影响你观察FLEX中的Session,你可以看原文章,较为简洁。地址:http://www.voidcn.com/article/p-gejtrhta-pv.html FLEX中实现Session的一个类是FlexContext类,他将SESSION保存在服务端。 1、首先,确保你的BLAZEDS搭建(将下载得到的blazeds解压,将解压得到的WEB-INF和META-INF两个文件夹拷贝到你的WEB-ROOT文件下)的利用Object 与java通讯正常。 2、新建java类 FlexSession: package com.greencloud.service; import flex.messaging.FlexContext; public class FlexSession { /** * 保存Session * @author wangfeng * @date 2013-01-23 11:12:39 * @param name * @param value */ public void setSession(String name,String value){ FlexContext.getFlexSession().setAttribute(name,value); } /** * 获取Session * @author wangfeng * @date 2013-01-23 11:12:50 * @param name * @return */ public String getSession(String name){ String value=(String) FlexContext.getFlexSession().getAttribute(name); return value; } /** * 清除Session * @author wangfeng * @date 2013-01-23 11:13:10 * @param name */ public void removeSession(String name){ FlexContext.getFlexSession().removeAttribute(name); } } 3、在WBE-INFflexremoting-config.xml里配置: <?xml version="1.0" encoding="UTF-8"?> <service id="remoting-service" class="flex.messaging.services.RemotingService"> <adapters> <adapter-definition id="java-object" class="flex.messaging.services.remoting.adapters.JavaAdapter" default="true"/> </adapters> <default-channels> <channel ref="my-amf"/> </default-channels> <destination id="serviceTest"> <properties> <source>test.ServiceTest</source> </properties> </destination> <destination id="UserService"> <properties> <source>com.greencloud.service.UserService</source> </properties> </destination> <destination id="dayReportService"> <properties> <source>com.greencloud.dao.DayreportDao</source> </properties> </destination> <destination id="sessionManage"> <properties> <source>com.greencloud.service.FlexSession</source> </properties> </destination> </service> UserService.java: package com.greencloud.service; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServlet; import com.greencloud.db.DBUtlie; import com.greencloud.entity.User; public class UserService extends HttpServlet{ /** * */ private static final long serialVersionUID = 1L; private Connection con = null; private PreparedStatement ps; private ResultSet rs; private User user; private FlexSession flexSession; public List<User> getUserList()throws SQLException{ List<User> list = new ArrayList<User>(); try{ list = new ArrayList<User>(); con = new DBUtlie().getConnection(); String sql = "select * from s_user"; ps = con.prepareStatement(sql); rs = ps.executeQuery(); while(rs.next()){ User user = new User(); System.out.println("query it's ok"); user.setUserId(rs.getInt("userId")); user.setLoginName(rs.getString("loginName")); user.setPassword(rs.getString("password")); user.setRealName(rs.getString("realName")); user.setEmail(rs.getString("email")); user.setDesc(rs.getString("desc")); user.setDeptId(rs.getInt("deptId")); user.setDeptName(rs.getString("deptName")); user.setOrderBy(rs.getInt("orderBy")); user.setIsAdmin(rs.getInt("isAdmin")); user.setIsLocked(rs.getInt("isLocked")); list.add(user); } }catch (Exception e) { e.printStackTrace(); }finally{ try{ rs.close(); ps.close(); con.close(); }catch (Exception e) { e.printStackTrace(); } } return list; } public String userLogin(String name,String password){ String userName = name; System.out.println("loginName:"+name); System.out.println("password:"+password); List<User> list = new ArrayList<User>(); try{ list = new ArrayList<User>(); con = new DBUtlie().getConnection(); String sql = "select * from s_user where loginName = '"+userName+"'"; ps = con.prepareStatement(sql); rs = ps.executeQuery(); while(rs.next()){ User user = new User(); System.out.println("query it's ok"); user.setUserId(rs.getInt("userId")); user.setLoginName(rs.getString("loginName")); user.setPassword(rs.getString("password")); user.setRealName(rs.getString("realName")); user.setEmail(rs.getString("email")); user.setDesc(rs.getString("desc")); user.setDeptId(rs.getInt("deptId")); user.setDeptName(rs.getString("deptName")); user.setOrderBy(rs.getInt("orderBy")); user.setIsAdmin(rs.getInt("isAdmin")); user.setIsLocked(rs.getInt("isLocked")); list.add(user); } }catch (Exception e) { e.printStackTrace(); }finally{ try{ rs.close(); ps.close(); con.close(); }catch (Exception e) { e.printStackTrace(); } } if(list == null || list.size()<1){ return "fail"; } for(int i=0;i<list.size();++i){ user = list.get(i); } System.out.println("password:"+user.getPassword()); if(user.getPassword().equals(password)){ flexSession = new FlexSession(); System.out.println("login success..."); flexSession.setSession("account",user.getRealName()); System.out.println("flexSession is ok!"); return "success"; } else{ System.out.println("login fail..."); return "fail"; } } } FLEX端: 登录页: logClient.mxml: <?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" applicationComplete="application1_applicationCompleteHandler(event)"> <fx:Declarations> <!-- 将非可视元素(例如服务、值对象)放在此处 --> <!-- <s:RemoteObject id="sessionManage" endpoint="http://localhost:8080/log/messagebroker/amf" destination="sessionManage"> <s:method name="setSession" result="sessionManage_resultHandler(event)" fault="sessionManage_faultHandler(event)"/> </s:RemoteObject>--> <s:RemoteObject id="UserService" endpoint="http://localhost:8080/log/messagebroker/amf" destination="UserService"> <s:method name="userLogin" result="userLogin_resultHandler(event)" fault="userLogin_faultHandler(event)"/> </s:RemoteObject> </fx:Declarations> <fx:Script> <![CDATA[ import com.greencloud.view.IndexView; import com.greencloud.vo.User; import mx.charts.CategoryAxis; import mx.collections.ArrayList; import mx.controls.Alert; import mx.controls.Tree; import mx.core.Application; import mx.events.FlexEvent; import mx.events.Request; import mx.managers.PopUpManager; import mx.rpc.events.FaultEvent; import mx.rpc.events.ResultEvent; //初始化方法 protected function application1_applicationCompleteHandler(event:FlexEvent):void { this.addEventListener(KeyboardEvent.KEY_DOWN,onEnterHandler); } //登录 protected function login_clickHandler(event:MouseEvent):void { var strLoginName:String = loginName.text; var strPassword:String = password.text; if(strLoginName!="" && strPassword!="") { UserService.userLogin(strLoginName,strPassword); } else{ Alert.show("用户名或密码不能为空","系统提示"); } } //监听回车键 protected function onEnterHandler(event:KeyboardEvent):void { if(event.keyCode == Keyboard.ENTER) { var strLoginName:String = loginName.text; var strPassword:String = password.text; if(strLoginName!="" && strPassword!="") { UserService.userLogin(strLoginName,strPassword); } else{ Alert.show("用户名或密码不能为空","系统提示"); } } } protected function userLogin_resultHandler(event:ResultEvent):void { var str:String = event.result as String; if(str == "success") { Alert.show("this.user is..."); var indexUrl:URLRequest = new URLRequest("http://localhost:8080/log/logClient-debug/IndexView.html"); try { navigateToURL(indexUrl,"_self"); } catch(e:Error){ Alert.show("跳转页面失败","系统提示"); } } else { Alert.show("登录失败,请检查用户名和密码的正确性","系统提示"); } } protected function userLogin_faultHandler(event:FaultEvent):void { Alert.show(event.fault.message,"出错了"); } //重置 protected function reset_clickHandler(event:MouseEvent):void { loginName.text=null; password.text=null; } ]]> </fx:Script> <s:Panel width="100%" height="70%" top="50" bottom="10" left="10" right="10"> <s:layout> <s:HorizontalLayout paddingBottom="5" paddingLeft="5" paddingRight="5" paddingTop="5" gap="10"/> </s:layout> <s:VGroup width="100%" height="100%"> </s:VGroup> <s:VGroup width="100%" height="100%"> <s:Spacer width="100%" height="100%"> </s:Spacer> <mx:FormItemLabel text="用户登录:" fontSize="15" fontWeight="normal"/> <s:FormItem label="用户名:" textAlign="left" fontSize="13"> <s:HGroup> <s:Spacer width="5" height="100%"/> <s:TextInput id="loginName" maxChars="250"/> </s:HGroup> </s:FormItem> <s:FormItem label="密码:" textAlign="left" fontSize="13"> <s:HGroup> <s:Spacer width="17" height="100%"/> <s:TextInput id="password" maxChars="250" displayAsPassword="true"/> </s:HGroup> </s:FormItem> <s:HGroup width="100%"> <s:Spacer width="15" height="100%"/> <s:Button id="login" label="登录" click="login_clickHandler(event)"/> <s:Spacer width="35" height="100%"/> <s:Button id="reset" label="重置" click="reset_clickHandler(event)"/> </s:HGroup> <s:Spacer width="100%" height="100%"> </s:Spacer> </s:VGroup> </s:Panel> </s:Application> 跳转页:IndexView.mxml <?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" applicationComplete="application1_applicationCompleteHandler(event)"> <fx:Declarations> <!-- 将非可视元素(例如服务、值对象)放在此处 --> <s:RemoteObject id="sessionManage" destination="sessionManage" endpoint="http://localhost:8080/log/messagebroker/amf"> <s:method name="getSession" result="sessionManage_resultHandler(event)" fault="sessionManage_faultHandler(event)"/> </s:RemoteObject> </fx:Declarations> <fx:Script> <![CDATA[ import com.greencloud.component.PanelEx; import com.greencloud.vo.User; import mx.collections.ArrayList; import mx.controls.Alert; import mx.controls.Tree; import mx.core.FlexGlobals; import mx.events.FlexEvent; import mx.rpc.events.FaultEvent; import mx.rpc.events.ResultEvent; [Bindable]private var account:String=""; protected function sessionManage_resultHandler(event:ResultEvent):void { //注意获得Session的方式 account=event.result as String; message.text=account+",欢迎您归来..." } protected function sessionManage_faultHandler(event:FaultEvent):void { Alert.show("获取session失败...","提示"); } protected function application1_applicationCompleteHandler(event:FlexEvent):void { //获取session sessionManage.getSession("account"); } protected function exist_clickHandler(event:MouseEvent):void { // TODOAuto-generated method stub //清除session sessionManage.removeSession("account"); var url:URLRequest=new URLRequest("http://localhost:8080/log/logClient-debug/logClient.html"); navigateToURL(url,"_self"); } ]]> </fx:Script> <s:Label x="394" y="229" fontSize="18" width="229" height="31" id="message"/> <s:Button x="443" y="283" label="退出" id="exist" fontSize="16" click="exist_clickHandler(event)"/> </s:Application> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |