- notice 스킨변경~
[FlexSession]검색결과, 1건
플렉스 세션에 대한 예제가 별로 없어서 찾기 힘들었는데 그냥 서블릿세션처럼 쓰면 되는 것이더군요-_-;
우선 플렉스세션을 만들어야하는데 서버측 프로그래밍할 때 그냥 FlexSession쓸라고하면 에러납니다. LCDS깔 때 있는 flex.war파일에 포함되어있는 jar파일을 서버측 프로그래밍 할 때 즉 컴파일할 때 필요합니다.
저는 작업할 때 Flex Builder2랑 Eclipse랑 두개 띄워놓고 작업합니다-_-;
자바 프로그래밍 하기 위해서 Eclipse에서 세션을 만들어봅시다.
우선 Dynamic Web Project로 프로젝트를 하나 만듭니다.
그리고 필요한 jar파일을 넣어야합니다. flex.war가 디플로이 되면 WEB-INF\LIB폴더에 JAR파일이 있는데 여기서 message관련된거 이클립스에서 만든 프로젝트 lib에다가 복사합니다(사실 잘 몰라서 다 복사했습니다-_-;)
flex-messaging.jar, flex-messaging-common.jar, flex-messaging-opt.jar, flex-messaging-req.jar ^^
package flex.session;
import flex.messaging.FlexSession;
import flex.messaging.FlexContext;
public class SessionRO {
public void setSession(String id) {
FlexSession session = FlexContext.getFlexSession();
session.setAttribute("id", id);
System.out.println("세션설정성공");
}
public String getSession() {
FlexSession session = FlexContext.getFlexSession();
String id = session.getAttribute("id").toString();
System.out.println("세션가져오기성공");
return id;
}
public void removeSession() {
FlexSession session = FlexContext.getFlexSession();
session.invalidate();
}
}
간단합니다. setSession은 세션을 설정(로그인시)하는 것이고, getSession은 세션을 가져오는 것이고(있으면!), removeSession은 세션을 삭제(로그아웃시)하는 것입니다.
근데 문제점은 이놈을 테스트하려면 {was}/webapp/flex/WEB-INF/classes/에 복사해놓고 mxml이나 as에서 밖에 테스트를 못합니다-_-; jsp에서 테스트를 하려니 안되더군요 ^^ 꽤 고생했습니다-_-;
아 그리고 DB구조는 이렇게 되어있습니다.
CREATE TABLE `bs_Member` (
`id` varchar(20) NOT NULL,
`pwd` varchar(20) default NULL,
`name` varchar(20) default NULL,
`age` int(10) unsigned default NULL,
`sex` varchar(20) default NULL,
`tel` varchar(20) default NULL,
PRIMARY KEY (`id`)
)
로그인 메소드를 보도록 합시다.
public int Login(String id, String pw) {
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
String jdbcDriver = "jdbc:apache:commons:dbcp:/pool";
con = DriverManager.getConnection(jdbcDriver);
pstmt = con.prepareStatement("SELECT pwd FROM bs_Member WHERE id = binary(?)");
pstmt.setString(1, id);
rs = pstmt.executeQuery();
rs.last();
int rowCount = rs.getRow();
rs.beforeFirst();
if(rowCount != 0) {
rs.next();
if(pw.equals(rs.getString("pwd"))) {
return 1;
} else {
return 2;
}
}
else {
return 3;
}
} catch (SQLException e) {
e.printStackTrace();
return 0;
} finally {
if (rs != null) try { rs.close(); } catch(SQLException ex) {}
if (pstmt != null) try { pstmt.close(); } catch(SQLException ex) {}
if (con != null) try { con.close(); } catch(SQLException ex) {}
}
}
bs_Member테이블에서 로그인한 id가 있는지 검사를 하고 id가 있으면 3를 리턴하고, 없으면 비밀번호가 같은지 검사하고 같으면 1을 리턴하고, 틀리면 2를 리턴합니다. 플렉스 as에서 1을 받으면 성공이라고 뿌리고 이런식으로 했습니다.
자 그러면 flex에서 보도록 합시다.
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="100%"
height="100%" xmlns:comp="*" backgroundColor="#c0c0c0"
backgroundAlpha="0.7" creationComplete="initWindow()">
<mx:Script>
<![CDATA[
import mx.rpc.events.ResultEvent;
import mx.rpc.events.FaultEvent;
import mx.rpc.remoting.RemoteObject;
import mx.controls.Alert;
private function initWindow():void {
loginwindow.x = this.width / 2 - 150;
loginwindow.y = this.height / 2 - 150;
}
private function RequestLogin():void {
var srv:RemoteObject = new RemoteObject();
loginbtn.enabled = false;
joinbtn.enabled = false;
srv.destination = "booksystem";
srv.Login(idtext.text, pwtext.text);
srv.addEventListener("result", resultHandler);
srv.addEventListener("fault", faultHandler);
}
private function resultHandler(event:ResultEvent):void {
var result:int = int(event.result);
var srv:RemoteObject = new RemoteObject();
srv.destination = "session";
switch (result) {
case 0 :
Alert.show("DB오류입니다.");
break;
case 1 :
Alert.show(idtext.text + "님 환영합니다.");
srv.addEventListener("result", sessionresultHandler);
srv.addEventListener("fault", sessionfaultHandler);
srv.setSession(idtext.text);
loginbtn.enabled = true;
joinbtn.enabled = true;
break;
case 2 :
Alert.show("비밀번호가 틀립니다.");
pwtext.text = "";
loginbtn.enabled = true;
joinbtn.enabled = true;
break;
case 3 :
Alert.show("ID가 없습니다.");
pwtext.text = "";
loginbtn.enabled = true;
joinbtn.enabled = true;
break;
}
}
private function faultHandler(event:FaultEvent):void {
Alert.show("실패 메세지: " + event.fault.message);
loginbtn.enabled = true;
joinbtn.enabled = true;
}
private function sessionresultHandler(event:ResultEvent):void {
parentApplication.loginid = idtext.text;
parentApplication.infota.text = idtext.text + "님 방가방가!";
idtext.text = "";
pwtext.text = "";
visible = false;
}
private function sessionfaultHandler(event:FaultEvent):void {
Alert.show("실패 메세지: " + event.fault.message);
}
]]>
</mx:Script>
<mx:TitleWindow id="loginwindow" width="300" height="200" layout="absolute"
title="M.C the MAX공연 예매 시스템에 오신 것을 환영합니다.">
<mx:Label x="64.5" y="35" text="ID : "/>
<mx:Label x="64.5" y="65" text="PW : "/>
<mx:TextInput id="idtext" x="103.5" y="33" width="112"/>
<mx:TextInput id="pwtext" x="103.5" y="63" width="112"
displayAsPassword="true" enter="RequestLogin();"/>
<mx:Button id="loginbtn" x="64.5" y="93" label="로그인"
width="73" click="RequestLogin();"/>
<mx:Button id="joinbtn" x="145.5" y="93" label="회원가입"
click="parentApplication.showJoin();"/>
</mx:TitleWindow>
</mx:Canvas>
id, pw를 입력하고 엔터 또는 로그인버튼을 클릭하게 되면 RemoteObject를 통해서 Login메소드를 호출하게 됩니다. 호출을 해서 성공적으로 리턴하면 resultHandler함수에 리턴값을 받아 그 리턴값에 따라 Alert을 해줍니다. 로그인을 성공해버리면 setSession을 통해 세션을 설정합니다.
이게 다군요-_-; 로그인을 성공하게 되면 자기자신은 visible을 false로 바꿔버립니다. 그래서 뒤에 있는 실제 메뉴를 건드릴 수 있게 했죠-_-; 아....진짜 이따구로도 가능하다는 것을 보여주는군요.
http://mudchobo.tomeii.com/tt/108
-
-
-
yuria
머드초보님의 블로그에서 정말 좋은정보 많이 배워갑니다..
저는 아직까지 자바초보에 Flex초보라서 자세히는 모르지만 머드초보님 자바에서 쓰이는 왠만한 framework 다 다루실 줄 아는듯합니다.. 부러울 따름입니다..ㅜ.ㅜ 현업에 계시면 혹시 자체 framework도 개발해 보셨나요?.. 그럼 정말 왕부러움..^^-
머드초보
제가 삽질한게 도움이 되셨다니 다행입니다 ㅠㅠ
저는 현업에 있는데 Java나 Flex쪽이 아니라 unix c쪽을 하고있어요^^
자체 framework는 꿈도 못꾸죠-_-;
어쨌든 도움이 되셔서 제가 뿌듯하네요^^
-
-
고고마
머드초보님 로그인 세션 처리 부분에서 질문이 있습니다.
Session에 저장된 id를 다른 자바 클래스에서 가져와서 DB쿼리문에 넣고 싶은데
일반 HTTPService방식과는 달라서 계속 오류가 나는 거 같습니다.
클래스 간에 세션 id를 받을 수 있는 방법에 대해 조언 좀 부탁드릴께요-
머드초보
클래스간 세션id를 받는 건 안해봐서 잘 모르겠네요.
세션은 저도 그냥 저장하고, 가져오는 것 밖에 안해봤습니다 ㅠ
죄송합니다 ㅠ
-
-
flex 초보
struts 를 이용하여 프로그램을 하고 있는데
struts의 액션 폼에서
FlexSession session = FlexContext.getFlexSession();
session.setAttribute("id", "aaa"
;
이렇게 선언을 하였습니다.
그런데 session이 널포인트가 뜨네요;;;;
뭐가 잘못된걸 까요..?? -

