转自:呼啸,原文地址: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:
- 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-INF\flex\remoting-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>
相关推荐
在探讨“Flex+J2EE获取FlexSession的方法”这一主题时,我们首先需要理解Flex与J2EE在Web开发中的角色以及如何通过它们实现会话管理。Flex是一种用于构建高度交互式的客户端应用程序的技术,而J2EE(Java 2 ...
在Flex开发中,UserInfoSys是一个常见的用户信息管理系统,它结合了Struts1.2、Spring2.0和Hibernate3.0这三大经典技术框架,构建了一个功能完备的后端数据处理系统。这篇解析将深入探讨这个系统的架构、设计模式...
这种方式不仅实现了数据的有效管理和传递,还极大地提高了Flex应用程序的灵活性和性能。对于开发者而言,掌握这种方法有助于更好地应对实际项目中的复杂需求,提升开发效率。同时,这也为今后的学习和实践提供了一个...
XIFF(eXtensible Internet Framework)是Flex中一个用于处理XMPP协议的库,它允许开发者在Flex应用程序中实现XMPP功能,比如创建用户会话、发送和接收消息、管理用户状态等。XIFF为Flex提供了与XMPP服务器交互的...
如果登录成功,可能会涉及到用户状态的管理,例如设置session或cookie来保持登录状态。Flex可以通过SharedObject或者在服务器端处理来实现。 10. **响应式设计**: 考虑到不同的设备和屏幕尺寸,Flex的布局管理器...
本文将详细介绍如何在Flex4环境中,利用Spring管理Java后端Bean,并通过BlazeDS实现Flex与服务器间的通信。 首先,我们需要理解Flex4、Spring和BlazeDS各自的角色。Flex4是Flash Builder中的一个组件,它提供了一套...
5. **错误处理和事务管理**:在整合过程中,需要考虑错误处理和事务边界。Flex客户端需要捕获并处理可能出现的服务器端异常,并且确保在分布式环境中,数据库操作的原子性和一致性。 6. **缓存策略**:为了提高性能...
在这个压缩包中,"flex"可能是指一系列与Flex编译器或Flex框架相关的示例代码或应用程序,尽管在FreeSWITCH的上下文中,这个名字可能更多地指的是其灵活性和多用途性。 FreeSWITCH的WebPhone特性允许用户通过浏览器...
总的来说,Flex3的Gilead库可能是为了解决复杂的数据库操作和会话管理问题而设计的,它提供了方便的API和可能的自定义session管理机制,使得在Flex3应用中进行多表查询和保持用户会话变得更加简单。为了充分利用这个...
SSH+Flex配置是一种常见的Java Web开发技术组合,用于构建高效...这个组合在过去的几年中被广泛应用于企业级项目中,尽管现代Web开发可能更倾向于使用React或Vue等前端框架,但SSH+Flex仍然在一些项目中占有一席之地。
通过Spring的HibernateTemplate或SessionFactoryBean,可以实现DAO层的事务管理和Session管理。 4. **实体映射**:Hibernate负责将Java对象映射到数据库表。开发者定义实体类,并使用注解或XML配置来描述对象与表的...
当涉及到与Hibernate的集成时,Spring提供了对Hibernate的全面支持,可以管理SessionFactory和Session。在配置文件中,我们可以定义数据访问层的bean,比如`SessionFactory`,并利用Spring的事务管理功能来处理...
5. **Flex客户端调用**:在Flex中,你可以使用HTTPService或WebService组件来调用Spring服务。通过AMF,这些服务请求会直接映射到Spring中的Bean方法。 6. **数据绑定**:Flex的强项在于UI交互,可以利用数据绑定...
在ASP中,可能使用了数据库连接来存储聊天记录,用户信息,以及通过Session对象来区分管理用户和一般用户。Session是ASP中的一个内置对象,用于存储用户会话期间的信息。当管理用户的Session被赋值为1时,系统就可以...
Flex4、Spring和Hibernate是构建企业级Web应用的三大核心技术,它们分别负责用户界面、业务逻辑和服务层的数据管理。在本实例项目中,这三者结合,为开发者提供了一个全面的解决方案,使得前后端能够有效地协同工作...
-- 监听Flex的session通信 --> flex.messaging.HttpFlexSession <!-- 通信服务配置文件 --> <servlet-name>MessageBrokerServlet flex.messaging.MessageBrokerServlet <param-name>services....
Flex可以使用Flex State Management或使用ASP.NET的ViewState和Session来保存和恢复用户状态。 7. **安全性**:在Flex与ASP.NET集成中,安全性是不可忽视的。可以使用ASP.NET的身份验证和授权机制,配合Flex的安全...
4. **Hibernate整合**:Spring提供了对Hibernate的全面支持,包括Session工厂、事务管理和DAO(Data Access Object)模板。通过Spring,可以更容易地管理和控制Hibernate会话,减少代码复杂性。 5. **Model-View-...
- 它包括一系列组件,如MessageBrokerServlet、HTTP Flex Session、Remoting服务等,用于实现远程方法调用、消息代理和数据推送。 4. **集成过程**: - 创建一个J2EE Web工程,如`Sample`,作为后端服务的基础。 ...
5. **改善状态管理机制**:利用Flex中的状态管理技术,改善传统页面技术中状态管理不足的问题,提高应用的整体性能。 综上所述,基于Flex的ArcIMS地图发布技术不仅解决了现有技术的局限性,还极大提升了地图发布的...