간단하게 DB에 있는 방명록 정보를 가져오는 정도를 해보겠습니다.
개발환경 : NetBeans6.0 + JDK6u3 + NetBeans내장Tomcat6.0 + iBATIS 2.3.0.677 + MySQL(버전모름-_-) + Spring Framework 2.5
우선 NetBeans6.0이 있어야겠고, Plugin으로 SpringFramework Support를 설치해야합니다.
메뉴에서 Tools -> Plugins클릭하면 Available Plugins를 선택하면 Spring Framework Support가 있는데 체크해서 설치를 하도록 합시다.
그런다음 프로젝트를 생성해봅시다.
File -> New Project선택 후 Web -> Web Application을 선택하고 Server는 Tomcat밖에 사용할 줄 모르니 Tomcat을 선택합니다(GlassFish사용할 줄 아는사람은 고거 선택하고^^)Next를 클릭하고
Project Name은 SpringIbatisExample 이라고 해봅시다. Next를 하면
Framework를 선택하라고 나옵니다. Spring Framework 2.5를 선택하고 Finish를 클릭합시다.
lib를 추가해야합니다. 따로 사용할 것은 iBATIS와 MySQL Connector입니다.
iBATIS는 www.ibatis.com 에서 받으면 되구요. MySQL Connector는 NetBeans에 내장되어있습니다.
프로젝트이름에 대고 오른쪽버튼 클릭 -> Properties -> Libraries -> Add Library 선택 후
MySQL JDBC Driver를 선택해서 추가합니다.
iBATIS는 아무 폴더에 설치 후에 Add JAR로 추가합시다.
넷빈즈에 Manage Libraries에 추가해서 사용하고 싶을 때 추가하게 할 수도 있습니다.
DB URL과 ID, PW를 설정해봅시다.
WEB-INF폴더 아래 jdbc.properties파일이 있는데 보면 어떤걸 설정해야할지 알껍니다.
driverClassName에는 com.mysql.jdbc.Driver를 넣고, url, id, pw를 넣으면 됩니다.
※DB구조입니다.
[code]CREATE TABLE `guestbook` (
`no` int(11) NOT NULL auto_increment,
`password` varchar(20) default NULL,
`name` varchar(250) default NULL,
`subject` varchar(2000) default NULL,
`content` text,
`ip` varchar(15) default NULL,
`datetime` datetime default NULL,
PRIMARY KEY (`no`)
)[/code]
간단하게 F6을 눌러서 실행되는지 확인해봅시다.
this is the /WEB-INF/jsp/index.jsp 라고 뜨면 된 것입니다.
이제 설정을 해봅시다.
Configuration Files 밑에 applicationContext.xml파일을 열어봅시다.
applicationContext.xml
<!-- ADD PERSISTENCE SUPPORT HERE (jpa, hibernate, etc) --> 요고 밑에다가 작성해봅시다.
[code]<bean id="sqlMapClient"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="/WEB-INF/SqlMapConfig.xml"/>
</bean>
<bean id="guestbookDao" class="com.phpschool.guestbook.db.GuestbookDaoImpl">
<property name="sqlMapClient" ref="sqlMapClient" />
</bean>
<bean name="guestbookManager"
class="com.phpschool.guestbook.service.GuestbookManagerImpl">
<property name="guestbookDao" ref="guestbookDao" />
</bean>[/code]
iBATIS에서 sqlMap을 생성하는 부분입니다. 오...3줄이면 끝나는군요.
아래는 Dao를 하나 선언해줍니다. 이 Dao는 sqlMapClient를 받습니다. 그래서 이 sqlMapClient를 통해
sql문에 접근할 수 있습니다. 그리고 그 아래에 있는 bean은 Manager입니다. Dao를 이용해서 service로직을 구현하는 부분입니다.
그러면 저기 sqlMapClient property에 있는 configLocation에 SqlMapConfig.xml파일을 만들어봅시다.
Web Pages -> WEB-INF에 대고 New -> Other하고 XML Document를 선택하고 SqlMapConfig.xml파일을 생성한 뒤 다음과 같이 씁시다.
SqlMapConfig.xml
[code]<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<typeAlias alias="GuestbookVO" type="com.phpschool.guestbook.vo.GuestbookVO"/>
<sqlMap resource="com/phpschool/guestbook/db/MySQLGuestbook.xml" />
</sqlMapConfig>
[/code]
다음과 같이 sqlMapConfig를 생성합니다. alias는 아래 resource에서 사용할 클래스 이름의 별명을 사용하게 하는 것입니다. 예를 들어 ResultClass 등에서 패키지명까지 다 입력해주어야하는데 alias를 지정해주면 클래스명만 써도 됩니다.
그리고 아래는 resource, 즉 sql들을 모아둔 xml파일입니다.
우선 제끼고 ValueObject를 만들어봅시다.
Source Packages에 대고 New -> Java Package선택 후 Package Name을 com.phpschool.guestbook.vo 라고 줘서 vo라는 패키지를 만듭시다.
그리고 New -> Java Class선택 후 Class Name을 GuestbookVo라고 합시다.
GuestbookVo.java
[code]private int no;
private String password;
private String name;
private String subject;
private String content;
private String ip;
private Timestamp datetime;[/code]
위 까지만 타이핑하고, Alt + Ins 하면 Getter And Setter가 나오는데 선택하고 전체를 다 선택하면 자동으로 setter와 getter가 만들어집니다.
아 힘들어-_-; 다음 이시간에-_-;
'분류 전체보기'에 해당되는 글 547건
- 2008.01.07 [Spring] Spring + iBATIS 간단한 예제(NetBeans6.0이용) 1
- 2007.12.31 [머드초보의 일상] 오늘은 은행에서 기다리다 시간이 다갔군요 OTL...
- 2007.12.29 [AIR FLEX] AIR에서 새로생긴 File클래스와 기존에 있던 FileReference클래스 1
- 2007.12.29 [영화] 화려한 휴가(2007) 감상후기! 2
- 2007.12.28 [AIR FLEX] Flickr Open API를 이용해 업로더(Uploader)만들기 - 2 20
회사에서 31일날 놀라고 해서 은행에서 못다한 업무를 보려고 갔습니다.
우선 집에 파리의 연인 스티커가 붙어있는 돼지저금통이 "내 배를 갈라줘" 라는 눈빛으로 저를 바라보고 있었어요.
"좋아 갈라주지!" 저는 잔인하게 난도질을 했습니다.
오.....의외로 돈이 많이 나오는군요. 11만원정도 나왔습니다.
그리고 국민은행체크카드를 없애고 보증금을 받기 위해 국민은행으로 무거운 동전을 들고 달려갔습니다.
오.....국민은행에 사람이 엄청 만쿠놔!!-_-;
동전바꾸는 기계로 갔습니다. 앞에 2명의 아줌마가 있었습니다.
동전을 넣고 있는 아줌마....한 30분째 넣고 있는 것 같습니다.
100원짜리 한 몇천개를 넣으신 것 같습니다. 은행을 지키시는 아저씨는 기계를 분해해서 동전을 뺐습니다-_-;
이 아줌마 저금통이 대체 얼마나 큰거야-_-;
그 다음아줌마는 나름 보통정도의 동전을 가지고 계시더군요.
한 40분정도 기다린 후에야 드디어 제가 동전을 넣었습니다-_-;
이런 기계가 있는 줄 처음알았습니다. 오.....잘 만들었는데?-_-; 한치의 오차도 없네요.
제가 세어서 간 개수 그대로 나와요-_-;
그리고 나서 신용카드를 해지하려고 갔습니다. 아놔.....사람 왜이렇게 많지-_-;
대기인수 30명-_-; 뽑고 기다렸습니다. 약 50분정도 흐르니 제 차례가 왔습니다.
다른 사람들은 신규상담 같은 것을 해서인지 오래 걸리지만 전 5분도 안되서 끝났습니다.
체크카드 2만원 보증금 받고-_-; 아...힘들구놔...-_-;
이제 CMA통장을 만들러 갔습니다. 회사사람들이 CMA통장을 만들라고 하더군요.
그래서 저도 만들기로 했습니다. 가장 근처에 있는 굿모닝신한증권에 갔습니다.
오.....아무도 없습니다-_-; 이쁘장한 아가씨가 절 반기더군요.
만드는데 5분정도에 끝났습니다-_-;
이제 우리은행에서 2만원이 들어있는 통장을 해지하러 갔습니다.
우리은행도 사람 무쟈게 많군요. 은행은 조그만데 사람은 왜이리 많지-_-;
번호표 뽑고 기다렸습니다. 한시간이 흘렀군요....
이제 부릅니다. 해지하는데 5분도 안걸렸습니다.
말일이라서 그런지 은행에 사람이 너무 많았습니다. (원래 이렇게 많은가-_-; 평소에 가질않아서-_-;)
이제 집에와서 CMA통장에 인터넷뱅킹으로 입금을 시키려고 했습니다.
이런젠장-_-; 외환은행 통장이 1일이체한도가 딸립니다-_-;
이체 한도를 늘리러 외환은행으로 갔습니다 ㅠㅠ
외환은행은 왜이렇게 지점이 없죠?-_-;
외환은행에 가니.....역시나 사람이 많군요-_-;
번호표를 뽑고 기다렸습니다. 한 30분기다리니 차례가 옵니다-_-;
오늘 이체하려다가 이체한도때문에 못 했다고 하니 점원께서 씨익~ 웃으십니다-_-;
휴....평일휴일을 은행에서 보내다니.....ㅠㅠ
어쨌든 은행은 잘 되는군요. 금융권이 월급을 많이 주는 이유를 잘 알겠네요 ^^
PS. 덤으로 치과가서 엄마가 진단서 끊어오라고해서 치과에서도 기다렸군요-_-;
AIR에서는 File이라는 클래스를 사용할 수 있더군요.
File클래스를 자세히 보면 FileReference클래스를 상속받고 있어요.
기존에 Flash나 Flex Application에서는 보안상 문제로 파일을 Browse()를 통해서 선택이 되어도 전체경로는 나오지 않습니다. FileReference속성에는 name이라는 속성이 있는데 읽기 전용이며 Browse()통해 파일이 선택이 되면 name속성에는 파일 이름만 들어갑니다.
(어느 플래시카페를 보니까 자바스크립트로 가져오는 법을 올려놨더라구요^^)
하지만, File이라는 클래스는 nativePath라는 속성을 제공하는데 이건 전체경로까지 다나옵니다.
단, AIR에서만 됩니다-_-;
저도 전체 경로가 필요해서 찾고 있었는데 이렇더라구요 ^^
AIR에서는 FileReference를 사용하지 말고, File을 사용하세요.
그대로 상속받고 있기 때문에 다 사용할 수 있구요.
기능도 더 추가된 것 같은데-_-; 아...로컬에 있는 파일을 컨트롤 할 수 있을 껍니다 ^^
뭐 결론은 AIR에서는 File을 쓰고, Flex나 Flash에서는 FileReference(뭐 File클래스를 여기서 사용할 수 없습니다^^)를 사용해요 ^^
혹시 AIR로 뭔가 하려는 분중에 FileReference에서 전체경로를 찾고 계신 분이 있을 것 같아서 올려요^^
남들은 다 영화관에서 보고 그랬는데 저는 같이 볼 사람이 없어서 이제야 나온 DVD를 보게 되었습니다.
평이 좋길래 어떤 영화길래 하고 봤습니다.
아...정말 슬프네요. 우리나라에서 저런 일이 있었다니...
저는 역사를 너무 몰랐던 것 같습니다. 학교다닐 때도 국사시간을 좀 싫어했는데-_-;
이 영화가 그래도 역사를 알려줘서 참 고맙군요 ^^
영화를 보면 조연들의 역할이 매우 컸던 것 같습니다.
'목포는 항구다'에서 나오시는 그 분..... "이건 입에서 나는 소리가 아니여!!" 로 유명하신 분인데 조연의 감초분이시죠 ^^ 영화를 볼 때 진짜 많이 나오시는 분인데 아.....이름을 몰라요-_-;
지금 검색하니까 박철민이라는 분이시군요 ^^ 처음 알았어요-_-;
이준기도 나오는 줄 몰랐네요. 보다가 알았는데 안성기도 나오고 이요원도 나오네요-_-;
김상경만 나오는 줄 알았는데-_-;
이영화가 디워하고 맞짱 까고도 700만을 돌파한 영화라니.. 디워가 없었으면 1000만 잡을 수 있었겠네요^^
그 당시의 현장을 너무 잘 표현한 것 같습니다.
근데 마지막에 다같이 나와서 이요원과 김상경이 결혼하는 꿈같은 부분이 나오는데 이요원은 왜 웃지 않고 있는건가요?-_-; 뭐 그렇게 막을 내리더군요 ^^
앞으로 이런 좋은 영화 많이 나왔으면 하네요 ^^
이제 소스를 보도록 합시다.
아....근데 다른 언어를 이용해서 업로더를 구현해보신 분 계신가요? 플렉스에서는 이상하게 제목을 한글로 입력해서 업로드를 해버리면 업로드가 안되더군요.MD5함수를 수정하면 가능합니다. ^^
이 부분은 좀 더 삽질을 해봐야할 부분인 것 같군요.
우선 영어는 뭐 잘 되니까-_-;
[code]
<mx:Script>
<![CDATA[
import com.adobe.webapis.flickr.methodgroups.Upload;
import mx.controls.Alert;
import flash.net.navigateToURL;
import com.adobe.webapis.flickr.AuthPerm;
import com.adobe.webapis.flickr.events.FlickrResultEvent;
import com.adobe.webapis.flickr.methodgroups.Auth;
import com.adobe.webapis.flickr.FlickrService;
public var apikey:String = "해당API키";
public var secretkey:String = "해당비밀키";
public var flickrService:FlickrService;
public var frobResult:FlickrResultEvent;
public var frob:String = new String();
public var token:String = new String();
public var fileRef:FileReference;
public function Authentication():void {
flickrService = new FlickrService(apikey);
flickrService.secret = secretkey;
flickrService.addEventListener(
FlickrResultEvent.AUTH_GET_FROB, getFrobResponse);
flickrService.auth.getFrob();
}
public function getFrobResponse(event:FlickrResultEvent):void {
if (event.success) {
frob = String(event.data.frob);
var auth_url:String = flickrService.getLoginURL(frob, AuthPerm.WRITE);
navigateToURL(new URLRequest(auth_url), "_blank");
Alert.show( "인증하기위한 브라우저가 뜰꺼에요."
+ "로그인한다음에 OK버튼을 누르세요^^",
"인증",
Alert.OK | Alert.CANCEL,
null,
onCloseAuthWindow );
}
}
private function onCloseAuthWindow( event:* ):void {
if ( event.detail == Alert.OK ) {
flickrService.addEventListener(
FlickrResultEvent.AUTH_GET_TOKEN, getTokenResponse );
flickrService.auth.getToken( frob );
}
}
private function getTokenResponse( event:FlickrResultEvent ):void {
if ( event.success ) {
token = event.data.auth.token;
flickrService.token = token;
} else {
Alert.show("인증에 실패했습니다.");
}
}
public function findFile():void {
if (token == "") {
Alert.show("인증부터 하세요!");
return;
}
fileRef = new FileReference();
try {
fileRef.addEventListener(Event.SELECT, selectHandler);
fileRef.addEventListener(Event.COMPLETE, completeHandler);
fileRef.addEventListener(
DataEvent.UPLOAD_COMPLETE_DATA, onUploadCompleteData);
var success:Boolean = fileRef.browse();
} catch (error:Error) {
trace("Unable to browse for files.");
}
}
public function selectHandler(event:Event):void {
var uploader:Upload = new Upload(flickrService);
uploader.upload(fileRef);
}
public function checkTokenResponse(event:FlickrResultEvent):void {
Alert.show(event.data.auth.token);
}
public function completeHandler(event:Event):void {
trace("업로드 완료");
}
public function onUploadCompleteData(event:DataEvent):void {
Alert.show(event.data);
}
]]>
</mx:Script>
<mx:Button label="인증" click="Authentication();"/>
<mx:Button label="파일업로드" click="findFile();" />
[/code]
오.....간단합니다.
아... apikey secretkey 에는 각각 발급받은 키를 넣어주세요 ^^
인증이라는 버튼이 있는데 누르게 되면 Authentication이라는 메소드를 호출합니다.
FlickrService라는 클래스가 있는데 apikey를 인자로 받아서 생성합니다.
그러면 이놈으로 인증이 필요없는 API를 다 호출할 수 있습니다 ^^
flickrService.auth.getFrob(); 이런식으로 Frob을 얻어오고!
navigateToURL로 브라우저를 띄워서 인증url로 이동을 시킨 후 로그인을 하게 되면
flickrService.auth.getToken( frob ); 으로 인해 토큰을 가져오게 됩니다.
토큰만 가져오면 다 끝납니다-_-; 이걸로 권한에 관한 건 다할 수 있어요 ^^
이거뭐 플렉스로 해도 될 것 같아요. 안해봤는데 될 것 같아요-_-;
파일업로드 버튼을 클릭하면 파일선택창이 뜨는데 이미지사진 아무거나 선택해서 업로드하면 돼요 ^^
(참고로 이미지파일도 한글이면 안돼요. 영어로 바꿔서 선택하세요 ^^)
FileReference 요놈도 설명해야하는 나중에-_-;
되는 거 증명동영샷~-_-; (실은....좀 심심해서-_-)