레이블이 java adapter pattern인 게시물을 표시합니다. 모든 게시물 표시
레이블이 java adapter pattern인 게시물을 표시합니다. 모든 게시물 표시

2013년 9월 9일 월요일

자바FTP,자바교육,자바강좌,오엔제이프로그래밍,자바로 만든 FTP 클라이언트(파일업로드예)

자바FTP,자바교육,자바강좌,오엔제이프로그래밍,자바로 만든 FTP 클라이언트(파일업로드예)


FTP를 위한 컴포넌트는 http://www.savarese.org/downloads/NetComponents/ 에서 다운 받으시구요...

/**------------------------------------------------------------------------------------
  * 시스템명 : FTP Client
  * 작 성 자 :
  * 수 정 자 : 이종철(오엔제이프로그래밍실무교육센터,오라클자바커뮤니티)
  * 파 일 명 : OracleJavaFtpClient.java
  * 버    전 : 1.3
  * 개    요 :파일을 FTP서버의 Log 폴더에 저장한다.
   *-----------------------------------------------------------------------------------*/


package new_OracleJava.util;

import java.io.*;
import new_OracleJava.engine.OracleJavaConfig;
import com.oroinc.net.ftp.*;


public class OracleJavaFtpClient{
    static String server = "xxx.xxx.xxx.xxx";
    static int port = 21;
    public static String id = "id"
    public static String password = "pwd"
   
    FTPClient ftpClient = null;

    public OracleJavaFtpClient() {     
            ftpClient = new FTPClient();
    }

    public void sendFile() {
           
            try {                                                 
                    boolean res = false;
            String MyFile = "/use/local/logs/a.log";         
               
            File f = new File(MyFile);

            BufferedInputStream bi = new BufferedInputStream(new FileInputStream(f.getPath()));
            ftpClient.setFileType(FTP.BINARY_FILE_TYPE); 
           
            //FTP 서버의 폴더...
            ftpClient.changeWorkingDirectory("/ftpserver/usr/local");
           
            if (bi != null) {
              res = ftpClient.storeFile(OracleJavaConfig.libSystemChkFileName, bi);
            }         
            else {
                    System.out.println("FileStrema 생성 오류!!!");
            }
           
            bi.close();
                       
            //ftpClient.storeFile(OracleJavaConfig.libWAS2FTPPath, new FileInputStream(new File(MyFile)));
            if (res) {
                    Log.println("OracleJavaSystemChkThread", "FTP 전송 OK~~~");
                    System.out.println("FTP 전송 OK~~~");
            }
            else {
                    Log.println("OracleJavaSystemChkThread", "FTP 전송 실패~~~");
                    System.out.println("FTP 전송 실패~~~");
            }
                //ftp.logout();
                //ftp.disconnect(); 
                //ftp = null;
            }
            catch(Exception e) {
                Log.println("OracleJavaSystemChkThread", "*******************************************************************************");
          Log.println("OracleJavaSystemChkThread", "******************************** Exception FTP Send****************************");
          Log.println("OracleJavaSystemChkThread", "*******************************************************************************");
          Log.println("OracleJavaSystemChkThread", e.toString() + "\n");
            }
    }

    // 계정과 패스워드로 로그인
    public boolean login(String user, String password) {
        try {
            //this.connect();
            return ftpClient.login(user, password);
        }
        catch (IOException ioe) {
            ioe.printStackTrace();
        }
        return false;
    }

    // 서버로부터 로그아웃
    public boolean logout() {
        try {
            return ftpClient.logout();
        }
        catch (IOException ioe) {
            ioe.printStackTrace();
        }
        return false;
    }

    // 서버로 연결
    public void connect() {
        try {
           
            ftpClient.connect(server, port);           
            int reply;
            // 연결 시도후, 성공했는지 응답 코드 확인
            reply = ftpClient.getReplyCode();
       
            if(!FTPReply.isPositiveCompletion(reply)) {
                ftpClient.disconnect();               
                Log.println("OracleJavaSystemChkThread", "*************************************************");
                Log.println("OracleJavaSystemChkThread", "서버로부터 연결을 거부당했습니다\n");
                Log.println("OracleJavaSystemChkThread", "************************************************");
                System.exit(1);
            }
        }
        catch (IOException ioe) {
            if(ftpClient.isConnected()) {
                try {
                    ftpClient.disconnect();
                } catch(IOException f) {
                    //
                }
            }
            Log.println("OracleJavaSystemChkThread", "*************************************************");
            Log.println("OracleJavaSystemChkThread", "서버 연결 불가!!\n");
            Log.println("OracleJavaSystemChkThread", "************************************************");           
        }

// FTP의 ls 명령, 모든 파일 리스트를 가져온다
    public FTPFile[] list() {
        FTPFile[] files = null;
        try {
            files = this.ftpClient.listFiles();
            return files;
        }
        catch (IOException ioe) {
            ioe.printStackTrace();
        }
        return null;
    }

    // 파일을 전송 받는다
    public File get(String source, String target) {
        OutputStream output = null;
        try {
            File local = new File(source);
            output = new FileOutputStream(local);
        }
        catch (FileNotFoundException fnfe) {
            fnfe.printStackTrace();
        }
        File file = new File(source);
        try {
            if (ftpClient.retrieveFile(source, output)) {
                return file;
            }
        }
        catch (IOException ioe) {
            ioe.printStackTrace();
        }
        return null;
    }


    }

    // 서버로부터 연결을 닫는다
    public void disconnect() {
        try {
            ftpClient.disconnect();
        }
        catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }

}




=======================================================
=======================================================

다른 자바 프로그램에서... 다음과 같이 호출하여 이용했습니다.

                OracleJavaFtpClient ftpClient = new OracleJavaFtpClient();               
                ftpClient.connect();
                ftpClient.login(OracleJavaFtpClient.id, OracleJavaFtpClient.password);
                ftpClient.sendFile();
                ftpClient.logout();
                ftpClient.disconnect();



오라클자바커뮤니티 실전 개발 교육 - 개인80% 환급

Spring3.X, MyBatis, Hibernate실무과정

강좌명 Spring3.X, MyBatis, Hibernate실무과정(평일야간)
오라클자바커뮤니티(www.oraclejavanew.kr) 추천 실전강좌
교재 자체교재 or PDF 파일 제공
강좌 일정 09월12일(목) ~ 10월04일(금)((평일야간) 19:00~22:00, 12일) 총 36시간
강의 장소 [C강의장]구로디지털단지역2번 출구-> 미니스톱끼고 우회전 -> 100m 직진 후 골목길 끝에서 이마트방향 우회전 -> 50m 직진 후 우체국 옆골목으로 길건너서 직진 -> 150미터 직진 후 JnK 타워에서 우회전 -> 50미터 직진 후 우측에 코오롱빌란트2차 803호 (구로구 구로3동 222-8 코오롱디지털타워 빌란트2차 803호)
[약도보기]
수강절차 - 강좌내용 확인
- 전화 또는 홈페이지(www.onjprogramming.co.kr)를 통한 수강지원 및 수강료 결제(무통장입금, 온라인 카드결제)
- 고용보험 가입자(재직자)인 경우 고용보험환급 관련 서류 제출
- 수강전 : 커리큘럼 및 장소에 대해 다시 한번 공지
- 교육 전 설문 작성(간단한 개발 경력, 수강 목적, 강좌진행방식 등)
- 강좌 수강
- 수강후 : 교육 후 설문 작성
수강료 - 590,000원
[고용주환급]대기업:14만원 전후, 중소기업:187,047 원환급

[개인수강지원(개인환급)]정규직 472,000 ,비정규직:전액환급
대기업(상시근로자 300인 이상 대기업)은 개인환급 불가합니다.

재직자 내일배움카드 : 정부지원금 80% 자기부담금 20%
(구 능력개발카드 명칭이 내일배움카드로 변경 / 연간 총한도 200만원)


* 휴강 :법정공휴일
수강료
입금안내
- 온/오프라인 카드결제, 계좌이체(수강안내->입금안내 참조)
문의사항 02-851-4790 번으로 연락 부탁 드립니다.
교육개요 본과정은 자바 웹개발에서 가장 많이 사용되고 있는 자바기반 프레임워크인 Spring3.2를 학습하는데 스프링이 왜 도입되어야 하는지부터, 기본모듈구성, 아키텍처 DI, DL, IoC, 최근 개발모델의 핵심인 Spring AOP, AspectJ Annotation, 표현언어인 SpEL, Spring MVC, Spring MVC TEST Framework, Spring WebFlow, Spring JDBC, Spring Transaction등 개발에 필요한 부분을 체계적으로 실습을 통해 학습하며 SQLMapper인 MyBatis, Hibernate 까지 학습하는 Spring 최고의 교육 입니다.

[특징]
- 실무/실습에 근거한 이론 취득
- 단기간에 스프링 개발자로 양성
- 문답씩 수업으로 수강 효과 극대화
- 이론/실습 과제로 인한 개발력 UP
교육목표 - Spring의 도입배경 및 아키텍처에 대해 이해한다.
(자바빈의 태동부터 EJB, 그리고 현재까지)
- Eclipse, Maven, STS 플러그인에 대한 이해
(개발환경 설정의 이해)
- Spring IoC(DI, DL)의 이해
(실습을 통한 setter,getter,constructor injection의 이해)
- Spring AOP의 이해
(실습을 통한 Spring AOP의 이해, AOP어렵지 않습니다)
- AspectJ Annotation에 대한 이해
(Spring의 AspectJ 지원 및 Annotation 대한 이해 by 실습)
- Spring Web MVC, JDBC의 이해
(실습을 통한 Spring MVC, JDBC의 이해)
- Spring Controller에 대한 이해
(간단한 Controller의 구현을 통한 MVC Font Contrller의 이해)
- Spring Web Flow에 대한 이해
(실습을 통한 Spring Web Flow 및 JSF에 대한 이해)
- SpEL에 대한 이해
(실습을 통한 Spring SpEL의 이해)
- Servlet3 비동기 요청에 대해 이해한다.
(실습을 통한 비동기 서블릿에 대한 이해)
- MyBatis Mapper에 대해 이해한다.
(실습을 통한 MyBatis 구성, 작동원리 이해)
- Hibernate Mapper에 대해 이해한다.
(실습을 통한 Hibernate 구성, 작동원리 이해)
- 실무 개발 환경에 적응력 UP
(Spring, MyBATIS 기반 게시판 작성)
교육대상 - JAVA, JSP 개발자
- 자바개발은 오래 했지만 프레임워크에 대해 자신이 없는 개발자
- 단기간에 스프링을 박살 내고 싶은 개발자.
(스프링 혼자 공부하기는 어렵습니다!!)
선수학습 - JAVA, JSP
 

Spring3.2 J2EE Framework에 대한 흐름과 Spring Framework에 대한 이해
개발 환경 설정(Eclipse4.3 KEPLER, Tomcat7, Spring3.2 다운로드 및 설치)
Maven, STS 플러그인 설치
Spring IoC
DL(Dependency LookUp) &DI(Dependency Injection)
Dependency Pull, CDL(Contaxtualized Lookup)
Setter/Constructor/Mathod Injection
Spring 설정
Spring AOP 란 ?Code, Advice, JoinPoint, PointCut, Aspect, WeavingProxyFactoryBean
Annotation기반 AOP(AspectJ)
기타 Spring의 선언적 AOP 선언
Spring JDBC
Spring MVC
Spring Controller
Spring Webflow, JSF
Spring 표현언어 SpEL
Servlet3 비동기 요청처리
Spring3.2 Transaction 관리
Spring MVC TEST Framework
MyBatis/hibernate [MyBatis]
개요 및 소개
개발환경 설정 및 설치
Data Mapper란
sqlMapConfig 이해 및 환경설정
Spring, MyBatis 연동
SQL Map XML File 이해
SqlMapClient 이해
SQL의 실행(Insert/update/delete) 이해와 실습
고급 쿼리 사용방법의 이해와 실습
Spring MyBatis 응용예제 작성

[Hibernate]
Hibernate 소개
SessionFactory 설정
1:1, 1:다 매핑
Session Interface
Hibernate DML
Spring, Hibernate 예제 프로그램 작성

2013년 8월 8일 목요일

오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터, iPhone 하이브리드 앱 개발 실무과정(평일야간) 개강확정

iPhone 하이브리드 앱 개발 실무과정

오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)  

강좌명iPhone 하이브리드 앱 개발 실무과정(평일야간)
교재본원 자체교재 무료지원
강좌 일정08월21일(수) ~ 09월09일(월)((평일야간) 19:00~22:00, 14일) 총 42시간
강의 장소[B강의장]구로디지털단지역2번 출구-> 미니스톱끼고 우회전 -> 100m 직진 후 골목길 끝에서 이마트방향 우회전 -> 50m 직진 후 우체국 옆골목으로 길건너서 직진 -> 150미터 직진 후 JnK 타워에서 우회전 -> 50미터 직진 후 우측에 코오롱빌란트2차 803호 (구로구 구로3동 222-8 코오롱디지털타워 빌란트2차 803호)
[약도보기]
수강절차- 강좌내용 확인
- 전화 또는 홈페이지(www.onjprogramming.co.kr)를 통한 수강지원 및 수강료 결제(무통장입금, 온라인 카드결제)
- 고용보험 가입자(재직자)인 경우 고용보험환급 관련 서류 제출
- 수강전 : 커리큘럼 및 장소에 대해 다시 한번 공지
- 교육 전 설문 작성(간단한 개발 경력, 수강 목적, 강좌진행방식 등)
- 강좌 수강
- 수강후 : 교육 후 설문 작성
수강료580,000원
- 맥북무료지원
고용보험 환급(50~80% 환급)
[고용주환급]대기업:17만원 전후,중소기업:216,968원
[개인수강지원(개인환급)]정규직 464,000원 ,비정규직:전액환급

재직자 내일배움카드 : 정부지원금 80% 자기부담금 20%
(구 능력개발카드 명칭이 내일배움카드로 변경 / 연간 총한도 200만원)

* 휴강 :법정공휴일
수강료
입금안내
- 온/오프라인 카드결제, 계좌이체(수강안내->입금안내 참조)
문의사항02-851-4790 번으로 연락 부탁 드립니다.
교육개요본강좌는 아이폰과 아이팟 터치용 앱 개발을 위한 실용적인 경험을 제공하며. 쉽게 따라 해 볼 수 있도록 구성된 여러 샘플 예제를 통해서 Xcode 도구 사용법, 오브젝티브-C, 코어 프레임워크 등을 배우게 된다. 자신도 모르는 사이에 앱 개발에 필요한 기술은 물론이고 아이튠즈 앱스토어에 앱을 제출하는 과정도 알게 된다. 아이폰 프로그래밍에 첫 발을 내딛는 입문자 혹은 랭귀지 개발자에게 적합한 교육이다.

Xcode와 인터페이스 빌더 사용법, 오브젝티브-C를 이용한 모델-뷰-컨트롤러 구조, 데이터 입력 인터페이스 구현 및 입력 데이터 핸들링, 다양한 예제를 빌드를 통해 일반적으로 발생하는 문제 해결법, 앱스토어와 임시 배포에 필요한 요구 사항, 아이폰 가속도계, 근접 센서, 아이폰의 설정 앱 핸들링,이후 아이폰에서의 SQLite 활용, SQLite 관리 도구 활용, 실전에서 활용 가능한 최적화 기법 등의 내용을 배우게 됩니다.
교육목표- MAC 사용방법 실습
- Objective-C 프로그램 언어 이해
- Xcode와 인터페이스 빌더 사용법
- 오브젝티브-C를 이용한 모델-뷰-컨트롤러 구조 이해
- 데이터 입력 인터페이스 구현 및 입력 이헤
- 데이터 핸들링 이해
- 앱스토어와 임시 배포에 필요한 요구 사항
- UIKit프레임웍 이해
- 프로토콜, 델리게이트의 이해
- NSXMLParser
- 웹서버와 GET, POST 방식의 통신
- 임베디드 기기를 위한 SQLite 최적화
- SQLite 활용, SQLite 관리 도구 활용 이해
- SQLite 실전에서 활용 가능한 최적화 기법 이해
- 하이브리드앱 개발
교육대상-Objective-C 활용분야에 관심이 있는 자
-Cocoa / Xcode / iPhone 기반 애플리케이션/스마트폰 개발자
-SQLite 개발자
-SDK APP 개발자 
선수학습- c, c++
-프로그래밍 초보자
 



아이폰 개발 준비- MAC에 대한 개요와 이해
- MAC 사용방법 실습
- 개발자 라이센스 등록 절차 및 인증서 등록
- 앱의 다양한 배포방법(adHoc, Appstore, OTA)
objective-c- objective-c의 개요
- 콘솔창에서 클래스 만들고 gcc로 컴파일하기
- iPhone에 대한 개요과 구조 설명, Xcode 사용방법
- 메모리 관리(수동메모리관리)
- Foundation 프레임웍 개요
- UIKit프레임웍의 개요
- 세터와 게터 만들기
- 프로퍼티에 대한 이해, 점연산자
- 프로퍼티 속성
- 메시지 전달 방식에 대한 이해
- 프로토콜, 델리게이트의 이해 및 실습
iPhone SDK- Xcode에서 프로젝트 설정
- NSLog 및 출력 서식 사용하기
- 인터페이스 빌더, IBOutlet, IBAction에 대해 이해하기
- Immutable, Mutable 클래스의 차이
- MVC, Delegate, SingleTon, Target Action 패턴 이해
- 아이폰의 샌드박스구조에 대한 이해 및 파일처리
- UIButton, UILabel, UIImmageView 실습
- UISwitch, Webkit, UISegmetedControl 실습
- UITextField, UITextView, UISlider 실습
- main 구조파헤치기
- UIApplication 라이프 사이클 이해하기
- UIViewController , UIView 라이프 사이클 이해하기
- UIAlertView, UIActionSheet 실습
- UIPickerView 커스터마이징
- TableView 커스터마이징
- TableView Cell 커스터마이징
- UIKit Frameowork 와 Interface builder의 개연성 이해하기
- NSXMLParser
- 웹서버와 GET, POST 방식의 통신 구현
- Navigation Template 구현하기
- NSConnection을 이용한 ASynchronous 통신
SQLite3- Sqlite3 사용실습
- Sqlite3 사용실습
실무 하이브리드앱 개발- 하이브리드앱 개발
- 하이브리드앱 개발
- 하이브리드앱 개발
 

스트럿츠 예제 Constants.java [오라클자바닷넷커뮤니티강좌교육]

package oraclejavanew;

public class Constants {
        /**
        * 로그인한 사용자의 LoginForm이 저장될 세션 범위의 Attriute 이름
        */
        public static final String USER_KEY = "user";
       
        /**
        * 로그인한 사용자의 선택 상품을 보관할  세션 범위의 CART
        */
        public static final String CART_KEY = "cart";
       
        /**
        * 로그인한 사용자의 선택 상품을 보관할  세션 범위의 CART(MAP에서 빠져니온 ArrayList)
        * ArrayList안에는 CartItem이 있다.
        */
        public static final String CART_LIST = "cartlist";
       
        /**
        * 로그인한 사용자의 배송지를 보관할  세션 범위의 BAESONGJI
        */
        public static final String BAESONGJI_KEY = "baesongji";
       
        /**
        * 카드 결재시 승인 후 결과 페이지
        */
        public static final String CARD_RESULT_PAGE = "resultpage";
       
        /**
        * 주문번호 생성시 오류 발생한 경우 이동할 페이지
        */
        public static final String ORDER_NO_ERROR = "ordernoerror";
       
       
        /**
        * 무통장 주문완료 후  결과 페이지, 이곳에서 PayAction을 부름...
        */
        public static final String MU_RESULT_PAGE = "muresultpage";
       
       
        /**
        * 로그인한 사용자의 배송지를 보관할  세션 범위의 BAESONGJI
        * ArrayList안에 BaesongjiItem이 들어가 있다.
        *
        */
        public static final String BAESONGJI_LIST = "baesongjilist";
       
       
                     
        /**
        * ActionForward에서 사용되는 값       
        */
        public static final String LOGINOK      = "loginok";
        public static final String LOGIN        = "login";
        public static final String CARTOK      = "cartok";
        public static final String ORDERPAGE    = "orderpage";
        public static final String ORDERMOD    = "ordermod";
        public static final String ORDERCONFIRM = "orderconfirm";
        public static final String LOGOFFOK    = "logoffok";
        public static final String MAIN        = "main";       
        public static final String SHOPINGEND  = "shopingend"; 
        public static final String BADACTION    = "badaction";
       
        public static final String CART      = "/oraclejava/goods/cart.jsp";
        public static final String ORDER      = "/oraclejava/goods/order.jsp";
                       
}

[ORACLEJAVA커뮤티니, oraclejavanew.kr]Struts Bean 커스텀 태그

Struts Bean 커스텀 태그

자바 빈과 관련된 프로퍼티에 접근 하는데 이용되며 페이지 scope 속성들과 변수의 기술을 통해 페이지의 나머지 부분에서 쉽게 접근 할 수 있도록 자바 빈을 정의하는데 사용 됩니다.

또한 Bean 태그 라이브러리의 태그들에서는 요청 쿠키, 헤더 그리고 파라미터 값을 기반으로 하는 새로운 빈을 생성 해야 하는 경우 편리하게 이용 할 수 있는 메커니즘도 제공 합니다.

아래는 Bean 태그 라이브러리의 커스텀 태그들 입니다.


Custom tags within the Bean tag library

cookie : 지정한 요청 쿠키의 값에 근거해 변수를 정의
define : 지정한 빈 프로퍼티에 값에 근거해 변수를 정의
header : 지정한 요청 헤더의 값에 근거해 변수를 정의
include : 동적인 애플리케이션 요청의 응답을 로드해 빈으로 이용 할 수 있게 함
message  : 국제화된 메시지를 표시
page : 지정한 아이템을 빈으로써 페이지 문맥에서 꺼냄
parameter : 지정한 요청 파라미터에 근거해 변수를 정의
resource : 웹애플리케이션의 자원을 로드해 빈으로 이용 할 있게 함
size : Collection 또는 Map 요소의 개수를 포함한 빈을 정의
struts : 지정한 스트럿츠 내부 설정 객체를 빈으로
write : 지정한 빈 프로퍼티의 값을 표시


1.define 태그

지정한 빈의 프로퍼티 값을 꺼내 현재 페이지의 나머지 부분에서 접근 할  수 있도록 정의 합니다.반환되는 프로퍼티 값이 자바 원시 데이터 타입인 경우를 제외하고는 형 변환이 일어 나지 않습니다. 단 자바 원시데이터 타입인 경우엔 이 원시 데이터 타입의 래퍼형으로 변환 됩니다. (int 형이면 Integer로…)


[예:게시판의 VIEW 구현 시 이용]

<td width=490 style= "padding-left:10 ">
<bean:define id="content” name="boardForm" property="boardValue.content"/ >
<%= BoardUtils.convertHtmlBr((String)content) %>
< / t d >

2.header 태그

name으로 지정된 요청 헤더 값을 꺼내 String 타입의 페이지 scope 속성으로 정의

multiple 속성에 null이 아닌 값을 설정 한 경우 id 속성은 HttpServletRequest.getHeader() 대신 HttpServletRequest.getHeaders()를 호출하여 얻은 결과값을 포함 합니다.

[예제: 아래 예제는 요청 헤더와 헤더 값을 출력 합니다.]

<%@ page pageEncoding="euc-kr" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<html>
<body>
<%
java.util.Enumeration names =
((HttpServletRequest) request).getHeaderNames();

while (names.hasMoreElements()) {
String name = (String) names.nextElement();
%>

<bean:header id="head" name="<%= name %>"/>
 <br>Header Name : <%= name %> = <%= head %>
 
<%
}
%>
</body>
</html>

[결과]

Header Name : accept = */*
Header Name : accept-language = ko,en;q=0.5
Header Name : accept-encoding = gzip, deflate
Header Name : user-agent = Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)
Header Name : host = localhost
Header Name : connection = Keep-Alive
Header Name : cookie = JSESSIONID=EF8A4D1130ADFD06F6E78BE2A7BA9801

3.include 태그

지정한 애플리케이션 컴포넌트(또는 외부의URL)에 내부적으로 요청을 보내 수행 하고 이때 얻은 응답을 String 타입의 빈으로 만듭니다. 이때 생성된 빈은 id 속성의 값을 변수 명으로 가지며 페이지 scope에 저장 됩니다.

이 태그는 <jsp:include>와 비슷합니다. 그러나 표준 <jsp:include>에서는 해당 컴포넌트를 수행해서 얻은 응답을 직접 출력 스트림에 쓰는 반면 Bean 태그라이브러리의 include 태그에서는 페이지 범위를 가지는 빈으로 저장하는 것이 차이가 있습니다.

아래 처럼 include 태그를 이용해서 페이지 범위의 빈에 저장

<bean:include id="footerSpacer" page="/long/path/footerSpacer.jsp"/>

이제 페이지의 적절한 곳에서 <bean:write>를  이용하여 출력 할 수 있습니다.

<bean:write name="footerSpacer" />

[예제-test.jsp]
<%@page pageEncoding="euc-kr" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<html>
<body>
<bean:include id="inc" page="/include.jsp"/>
<br>
원래 페이지의 내용...<br>
<bean:write name="inc"/>
<br>========================<br>
<bean:write name="inc"/>
</body>
</html>

[include.jsp]
include되는 페이지의 출력...


4.message 태그

스트럿츠 태그 라이브러리에서 가장 널리 이용되는 태그 중 하나이며 지정된 메시지 키를 이용하여 국제화된 메시지를 꺼내와 출력 스트림에 출력 합니다. “{0}”와  같은 파라미터 치환을 5개까지 허용 합니다.

메시지를 꺼내오기 위해서는 key 속성을 사용하여 직접 지정 할 수도 있으며 name과 property 속성을 사용하여 빈에서 간접적으로 꺼내 올 수도 있습니다. 그리고 bundle 속성에는 MessageResources 객체를 얻어 올 수 있는 애플리케이션 범위의 빈의 이름을 지정 할 수도 있습니다. Locale 속성을 지정하지 않은 경우 필요한 locale은 세션에서 키 Action.LOCALE_KEY를 사용하여 얻습니다.

아래는 간단한 예 입니다.

<head>
<html:base/>
<title><bean:message key="title.login"/></title>
    </head>

5.parameter 태그

지정된 요청 파라미터의 값을 꺼내 String 타입의 페이지 범위의 속성으로 정의 합니다. 만약 multiple 속성에 null 이 아닌 값이 설정 될 경우에는 getParamter() 대신 getParameters() 메소드를 호출하고 String[] 타입의 페이지 범위 속성을 정의 합니다. 


오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)  


<bean:parameter id="param1" name="param1"/>
<bean:parameter id="param2" name="param2" multiple="true"/>
<bean:parameter id="param3" name="param3" value="UNKNOWN VALUE"/>


6.resource 태그

지정된 웹 에플리케이션 자원의 값을 꺼내 input 속성의 값에 따라 InputStream이나 String 타입의 한 형태로 사용 할 수 있게 합니다. input 속성의 값이 null이 아닌 값인 경우 InputStream을 생성하며 그 외에는 String으로 로딩 합니다.

<bean:resource id="webxml" name="/WEB-INF/web.xml"/>

얻어진 정보를 JSP 페이지에서 보기 위해서는 아래처럼 하면 됩니다.

<pre>
<bean:write name="webxml" filter=”true” />
</pre>

[예제]
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<html>
<body>
<bean:resource id="webxml" name="/WEB-INF/web.xml"/>
<pre>
<bean:write name="webxml" filter=”true” />
</pre>
</body>
</html>

7.write 태그

빈 프로퍼티의 값을 꺼내 String 형태로 출력하는 태그로써 자주 사용되는 것입니다. 즉 자바 빈에서 속성 값을 get 하는 것 입니다. 만약 filter 속성이 “true” 이면 “<” 인 경우 <로 변환 됩니다. 

2013년 8월 6일 화요일

[ORACLE SGA Tuning, 오라클자바커뮤니티]X$KSMLRU

X$KSMLRU 에 대해 알아봅니다.


오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)  


 X$KSMLRU는 Shared Pool 영역에서 다른 오브젝트를 age out 시키고 연속된 공간을 할당 받은 Object에 대한 정보를 담고 있어 많은 양의 메모리를 사용하는 Object에 대한 Flush 상태를 확인 할 수 있습니다. SYS 사용자만 질의 가능 합니다.

 많은 Object를 Flush 시키고 할당이 되는 객체들이 자주 변한다면 Response Time이 나빠지며 Flush 되었던 객체가 다시 로드 됨으로서 Library Cache Latch Contention을 일으킬 수 있습니다.

 그러므로 많은 Object들을 Flush 시키며 로드되는 Object들이 자주 사용 된다면 Memory에 KEEP 시키도록 하는 것이 유리 합니다. 이 Fixed Table(X$KSMLRU)에서 한번 조회된 ROW는 테이블에서 없어 집니다.

아래는 Object의 할당으로 인해 Flush 된 Object 수가 0보다 큰 것을 조회하는 겁니다. 즉 여기에 나타나는 것이 큰 Object이죠… 이놈을 Shared Pool에 올리려니 크기가 크니까 다른 Object를 쫓아 보리는 겁니다. 물론 그러한 새션의 아이디도 확인 할 수 있습니다.

SQL> select * from x$ksmlru where ksmlrnum > 0;

ADDR          INDX    INST_ID  KSMLRIDX  KSMLRDUR KSMLRCOM
-------- ---------- ---------- ---------- ---------- --------------------
  KSMLRSIZ  KSMLRNUM KSMLRHON                          KSMLROHV KSMLRSES
---------- ---------- -------------------------------- ---------- --------
02EE6B54          0          1          1          0 work area tabl
      4216          8                                          0 799FC2D8

02EE6B00          1          1          1          0 BAMIMA: Bam Buffer
      4132          8 BEGIN dbms_shared_pool.sizes...  335996982 799FC2D8


SQL> select * from x$ksmlru where ksmlrsiz > 5000;

선택된 레코드가 없습니다.

SQL> select * from x$ksmlru where ksmlrnum > 0;

선택된 레코드가 없습니다.   위에서 조회 했으므로 데이터가 사라 졌다.

Columns Desc

KSMLRSIZ : allocate된 연속된 memory size, 이 크기가 5K 넘으면 문제의 소지가 있으며 10K가 넘으면 심각, 20K가 넘으면 심각한 문제를 야기 시킬 가능성이 있습니다.

KSMLRNUM : 이 Object의 할당으로 인해 Flush 된 Object 수
KSMLRHON : Load되고 있는 Object의 이름(PL/SQL or Cursor)
KSMLROHV : Load되고 있는 Object의 Hash Value
KSMLRSES : 이 Object를 Load한 Session의 SADDR 값 

2013년 8월 5일 월요일

(자바프레임워크 스트럿츠, 자바교육,자바오라클교육)Struts 국제화 및 message/text의 한글화

국제화 및 VIEW의 message/text의 한글화


오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의) 




국제화란 다양한 언어 및 지역을 지원하는 것을 말합니다. 즉 언어가 바뀌더라도 코드의 수정 없이 언어에 대한 것이 지원 되어야 하며 텍스트 요소, 메시지, 이미지 등을 소스 외부에 두어 다양한 환경 변화에 능동적으로 대처가 가능 해야 합니다.

자바 언어의 java.util.ResourceBundle은 주어진 지역에 다라 리소스를 따로 그룹핑 할 수 있는 기능을 제공 합니다. 이러한 리소스는 필드명, 버튼의 레이블, 상태를 나타내는 메시지등 인데 이미지 이름이나 에러 메시지 같은 것들도 해당 됩니다.

스트럿츠에서는 자바에서 제공 하는 리소스 번들을 사용하지 않는 대신 비슷한 기능을 하는 org.apache.struts.util.MessageResources와 이를 실제 구현한 하위 클래스인 org.apache.struts.util.PropertyMessageResources를 사용 합니다.

이전 강좌인 로그인 예제의 로그인 화면(login.jsp)의 경우 텍스트 글씨를 application.properties 에서 읽어 화면에 뿌려 주었던 것을 기억 하실 겁니다. 아마 이 파일 안에 메시지를 한글로 넣으신 분들은 한글이 깨지는 것을 보셨을 거구요…

이번에는 한글도 안 깨어지면서 다양한 언어에 따라 지원 할 수 있는 국제화에 대해 알아 보기로 하겠습니다.

주의) 리소스 번들 파일의 확장자는 .properties 이며, WEB-INF/classes 아래에 package 형태로 위치해 있어야 합니다.

web.xml에서 다음과 같이 선언 되었다면….

<!-- 아래는 스트러츠 Application에서 사용할 Message Resource들을 설정 -->
<!-- 확장자가 properties인 application.properties를 만들어 넣으면 된다 -->
<message-resources parameter="resources.application"/>

WEB-INF/classes/resources 아래 application.properties 파일이 존재하고 있어야 합니다.

application.properties 파일이 다음과 같다고 했을 때…
-----------------------------------------
login.title = Login
login.login = Login
login.reset = Cancel

prompt.id = 사용자아이디  :
prompt.password= 비밀번호 :

main.title=Main


###############################################3
error.id.required=<li>ID REQUIRED.</li>
error.pwd.required=<li>PASSWORD REQUIRED</li>
error.login.invalid=<li>ID/PASSWORD NOT CORRECT</li>

errors.header=<h3><font color="red">ERROR!</font></h3>
                  You must correct the following error(s) before proceeding:<UL>
errors.footer=</ul><hr>


아마도 아래처럼  login.jsp가 구성 되어 있다면 텍스트의 한글이 깨질것입니다.

나머지 부분은 생략 했습니다.

                <tr>
                        <!-- Submit 버튼과 Reset 버튼을 생성 -->
                        <!-- 버튼의 라벨은 application.properties에서 내용을 가져 옵니다 -->
                        <th></th>
                        <td>
                            <html:submit>
                                <bean:message key="login.login" />
                                  </html:submit>
                       
                            <html:reset>
                                <bean:message key="login.reset" />
                                  </html:reset>
                        </td>
                </tr>                               
-------------------------------------------

[실행 화면]

 


이번에는 한글 문제도 해결 하고 국제화 부분도 처리하도록 하겠습니다.


/WEB-INF/classes/resources 에 application_en.properties를 다음과 같이 만듭니다.


login.title = Login
login.login = Login
login.reset = Cancel

prompt.id = User ID  :
prompt.password= Password :

main.title=Main


###############################################3
error.id.required=<li>ID REQUIRED.</li>
error.pwd.required=<li>PASSWORD REQUIRED</li>
error.login.invalid=<li>ID/PASSWORD NOT CORRECT</li>

errors.header=<h3><font color="red">ERROR!</font></h3>
                  You must correct the following error(s) before proceeding:<UL>
errors.footer=</ul><hr>


이번에는 application.properties 를 만듭니다.


login.title = Login
login.login = Login
login.reset = Cancel

prompt.id = 사용자아이디  :
prompt.password= 비밀번호 :

main.title=Main


###############################################3
error.id.required=<li>ID REQUIRED.</li>
error.pwd.required=<li>PASSWORD REQUIRED</li>
error.login.invalid=<li>ID/PASSWORD NOT CORRECT</li>

errors.header=<h3><font color="red">ERROR!</font></h3>
                  You must correct the following error(s) before proceeding:<UL>
errors.footer=</ul><hr>


명령프롬프트를 실행 하여 다음처럼 하세요…
(native2ascii는 안에 있는 내용을 \uXXXX 형식인 유니코드로 바꾸어 자바 프로그램에서 한글로 읽어 낼 수가 있도록 해 줍니다. 혹시 궁금하신 분은 Java 강좌의 “Properties 파일에서 한글 읽기”를 참고하시기 바랍니다.)

D:\Tomcat-Project\Login\WEB-INF\classes\resources>native2ascii application.properties application_kr.properties

이 명령을 실행 하면 application_kr.properties 파일이 만들어 질겁니다. 그럼 application_kr.properties 파일을 열어 전체 내용을 복사하여 application.properties에 전체 붙여 넣습니다.

여기까지 수행 하면 파일은 총3개가 만들어 졌습니다.

Default인 application.properties
브라우저의 언어가 한국어일 때 저절로 호출되는 application_kr.properties
브라우저의 언어가 영어권일 때 저절로 호출되는 application_en.properties

브라우저의 언어 설정이 한국어나 영어권이 아니면 default가 호출되며 한국어 이면 저절로 application_kr.properties 파일이 호출되며 영어권이면 application_en.properties 파일이 참조 됩니다. 그런데 _kr이 붙은 것과 default는 같은 내용으로 native2ascii 한 내용 입니다.(즉 한글을 디폴트로 했습니다.) 이 내용은 유니코드로 변환 한 것이기 때문에 한글이 깨지지 않고 나타납니다.

참고로 application_ke.properties 및 application.properties 의 내용은 아래와 같습니다.


login.title = Login
login.login = Login
login.reset = Cancel

prompt.id = \uc0ac\uc6a9\uc790\uc544\uc774\ub514  :
prompt.password= \ube44\ubc00\ubc88\ud638 :

main.title=Main


###############################################3
error.id.required=<li>ID REQUIRED.</li>
error.pwd.required=<li>PASSWORD REQUIRED</li>
error.login.invalid=<li>ID/PASSWORD NOT CORRECT</li>

errors.header=<h3><font color="red">ERROR!</font></h3>
                  You must correct the following error(s) before proceeding:<UL>
errors.footer=</ul><hr>


Tomcat을 종료 후 다시 시작 후 login.jsp를 실행 하시면 다음과 같은 결과를 얻을 수 있습니다. (사용자아이디 :, 비밀번호: 라고 한글이 잘 나타납니다.)

[결과]
 

혹시 한글이 아닌 영어가 나타나시는 분은 브라우저의 언어 설정이 영어로 되어 있어서 그러하니 도구  인터넷옵션  언어를 한글로 바꾸시기 바랍니다.

그럼 이번에는 브라우저의 언어 설정을 영어로 바꾸어 볼까요?

도구  인터넷옵션  언어를 클릭하시면 다이얼로그 창이 나타납니다.

여가서 영어가 없으신 분은 “추가”를 하셔서 영어를 추가 하시구요…

그런 다음 영어를 맨 위로 올리세요…(맨 위에 오는 언어가 기본이거든요) 

이젠 영어가 기본 언어로 설정 된 것입니다.

그런 다음 다시 login.jsp를 실행 하면(브라우저에서 reload 하세요)

아래와 같은 결과가 나타납니다. (이번엔 라벨이 User ID, Password 와 같이 영어로 나타 납니다.)

[결과]
 


이상 입니다. Native2ascii 명령 기억하시구여,,, 브라우저의 언어 설정에 따라 화면의 텍스트가 한글 또는 영어로 되는 것을 잊지 마세요…

(Java Framework 강좌, 자바교육, 오라클자바교육)Struts MessageResource 사용하기

MessageResource 사용하기 


오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의) 
 www.onjprogramming.co.kr 


웹 애플리케이션을 다중 언어가 지원 되도록 만들려고 일일이 매 페이지를 다르게 만든다고 하는 일은 대단히 수고스러운 일 입니다.

자바에서는 java.util.ResourceBundle 클래스를 통해 국제화를 지원하고 있으며 스트럿츠에서는 국제화를 지원하기 위해 org.apache.struts.util.MessageResource를 제공 합니다.

이러한 리소스 번들은 국제화 뿐 아니라 지역화된 프로그램에서도 유지 보수 시간을 줄여 주는 이점이 있습니다. 예를 들어 웹사이트 전체에 사용되는 텍스트나 라벨인 경우 변경이 필요 한 경우 단지 리소스 번들 프로퍼티 파일만 수정 함으로서 간단히 해결 할 수 있습니다.

스트럿츠 1.1 이상에서는 여러 개의 리소스 번들 파일을 지원 합니다.

아래에는 메시지들을 등록 해 놓은 리소스 번들 properties 파일 입니다.
(application.properties)


login.title = LogIn
login.login = Login
login.reset = Cancel

prompt.id= User ID :
prompt.password=Password :

main.title=Main


###############################################
error.id.required=<li>ID REQUIRED.</li>
error.pwd.required=<li>PASSWORD REQUIRED</li>
error.login.invalid=<li>ID/PASSWORD NOT CORRECT</li>

errors.header=<h3><font color="red">ERROR!</font></h3>
                  You must correct the following error(s) before proceeding:<UL>
errors.footer=</ul><hr>


아래는 이러한 메시지를 KEY값을 이용하여 VIEW에서 불러 오는 예젭니다.

(login.jsp)

<%@ page pageEncoding="euc-kr" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<html>
<head>
    <title><bean:message key="login.title" /></title>
    <html:base/>
</head>

<body>
<!-- 웹서버가 보내는 응답에 오류가 있다면 출력 -->
<html:errors/>

<!-- LoginSummit에 대해서는 struts-config.xml에 Mapping을 하게 된다 -->
<!-- focus="id" 라는 문법에 의해 자동으로  자바스크립트를 생성 합니다. -->
<html:form action="/LoginSubmit" focus="id">
        <table>
                <!-- 아래에서 텍스트 출력은 application.properties에서 가져 옵니다... -->
                <tr>                       
                        <th align="right"><bean:message key="prompt.id"/></th>                       
                        <!-- 아래는 input type=text 와 동일한 기능을 합니다 -->
                        <td><html:text property="id" value=""/></td>
                </tr>
                <tr>
                        <th align="right"><bean:message key="prompt.password"/></th>
                       
                        <!-- 만약 로그인을 실패하여 다시 돌아오는 경우 pwd 항목의 값을 비울때는 아래처럼
                        redisplay="false" 라고 하면 됩니다. HTML의 password 항목과 유사함  -->
                        <td><html:password property="pwd" redisplay="false"/></td>
                </tr>
                <tr>
                        <!-- Submit 버튼과 Reset 버튼을 생성 -->
                        <!-- 버튼의 라벨은 application.properties에서 내용을 가져 옵니다 -->
                        <th></th>
                        <td>
                            <html:submit>
                                <bean:message key="login.login" />
                                  </html:submit>
                       
                            <html:reset>
                                <bean:message key="login.reset" />
                                  </html:reset>
                        </td>
                </tr>                               
        </table>
</html:form>
</body>
</html>


다음은 리소스 파일을 사용하기 위해 struts-config.xml에 설정 한 예 입니다.

<!-- 아래는 스트러츠 Application에서 사용할 Message Resource들을 설정  -->
<!-- 확장자가 properties인 application.properties를 만들어 넣으면 된다  -->
    <message-resources parameter="resources.application"/>

2013년 8월 4일 일요일

java Brackets Balance Method

자바 스택을 이용한 괄호 체크 하는 메소드 입니다. 

public static boolean bracketsBalance (String exp) {
    ArrayStack stk = new ArrayStack(exp.length() +1);
    for (int i = 0; i < exp.length(); i++) {
         char ch = exp.charAt(i);
         //시작괄호 이면 스택에 넣음
         if (  ch== '[' || ch == '('  )  {
            stk.push( new Character(ch));
         }        
         else if(ch == ']' || ch == ')')  { 
 //파싱중 우측괄호를 봤는데, 스택이 비어있다면 오류
 if (stk.isEmpty())   return false;          
               //우선 스택에서 하나를 꺼낸다.                       
               char charFromStack = ((Character)stk.pop()).charValue();
    // 파싱한것이 ‘(‘ 인데 스택에서 꺼낸것이 ‘)’ 아니거나,
               //  파싱한것이 ‘[’ 인데 스택에서 꺼낸것이 ‘]’ 아닌경우
     if (  ch == ']' && charFromStack != '['
    ||  (ch == ')' && charFromStack != '(')  )
    return false;
 } // end if
    } // end for loop
    return stk.isEmpty();  //empty means matched,  else unmatched
}
 

재귀호출을 이용한 팩토리얼 구하기

재귀호출을 이용한 팩토리얼 구하기

 class RecursionTest {
  long factorial(int value) {
  if(value <= 1) return 1L;
  return value*factorial(value-1);
  }
  public static void main(String[] args) {
  if (args.length<1) {
  System.out.println("Usage : java RecursionTest number ");
  System.exit(1);
  }
                                    int value = Integer.parseInt(args[0]);
  RecursionTest r = new RecursionTest();
  long fact = r.factorial(value);
  System.out.println(value + "! = " + fact);
  }

2013년 8월 3일 토요일

실습과 예제를 통해 Spring Framework3.2를 배우는 과정, (개발과정)Ajax,jQuery,MyBatis&Spring3.X개발자과정(평일야간)

실습과 예제를 통해 Spring Framework3.2를 배우는 과정, (개발과정)Ajax,jQuery,MyBatis&Spring3.X개발자과정(평일야간)


강좌명 (개발과정)Ajax,jQuery,MyBatis&Spring3.X개발자과정(평일야간)
교재 자체교재 or PDF 무료 제공
강좌 일정 08월09일(금) ~ 09월04일(수)((평일야간) 19:00~22:00, 14일) 총 42시간
강의 장소 [B강의장]구로디지털단지역2번 출구-> 미니스톱끼고 우회전 -> 100m 직진 후 골목길 끝에서 이마트방향 우회전 -> 50m 직진 후 우체국 옆골목으로 길건너서 직진 -> 150미터 직진 후 JnK 타워에서 우회전 -> 50미터 직진 후 우측에 코오롱빌란트2차 803호 (구로구 구로3동 222-8 코오롱디지털타워 빌란트2차 803호)
[약도보기]
수강절차 - 강좌내용 확인
- 전화 또는 홈페이지(www.onjprogramming.co.kr)를 통한 수강지원 및 수강료 결제(무통장입금, 온라인 카드결제)
- 고용보험 가입자(재직자)인 경우 고용보험환급 관련 서류 제출
- 수강전 : 커리큘럼 및 장소에 대해 다시 한번 공지
- 교육 전 설문 작성(간단한 개발 경력, 수강 목적, 강좌진행방식 등)
- 강좌 수강
- 수강후 : 교육 후 설문 작성
수강료 - 680,000원
[고용주환급]대기업:20만원 전후,중소기업:270,000원
[개인수강지원(개인환급)]정규직 504,000 ,비정규직:전액환급
대기업(상시근로자 300인 이상 대기업)은 개인환급 불가합니다.

재직자 내일배움카드 : 정부지원금 80% 자기부담금 20%
(구 능력개발카드 명칭이 내일배움카드로 변경 / 연간 총한도 200만원)
수강료
입금안내
- 온/오프라인 카드결제, 계좌이체(수강안내->입금안내 참조)
문의사항 02-851-4790 번으로 연락 부탁 드립니다.
교육개요 (스프링 개발자 과정은 오엔제이프로그래밍 교육 센터 입니다!)

본 과정은 수료 후 자바기반 환경에서 스프링 웹개발이 가능하도록 하는 속성 스프링 개발자 과정 입니다. Ajax, jQuery를 기본으로, 스프링 개발을 위한 최소 구성요소(IoC, AOP, JDBC, MVC)를 학습하고 MyBatis, Hibernate를 학습 후 활용성이 높은 게시판 예제, XPlatform&Spring을 단계별로 학습하면서 이전에 배운 요소기술들을 하나씩 주입시켜 개발해 나가는 개발자 실습 과정 입니다. 게시판 버전을 1차, 2차로 나누어서 1차에서는 Spring DI를 중심으로 Spring JDBC, MVC요소를 결합시켜 작성하며 2차에서는 로그인 기능을 추가하고 Spring 로깅 AOP기능, MyBatis와의 결합을 구현해 나감으로써 스프링 기능 및 부가기능에 대한 응용 학습을 하게 되며, 마지막으로 최근 UI 개발의 필수 구성요소인 XPlatform과 Spring의 연동에 대해서도 학습을 하게 되어 어떠한 환경에서도 개발가능한 자바 웹 개발자를 만들어 드립니다.

본 과정을 이수 후 현장에서 즉시 개발가능한 스프링 개발자가 되는데 손색이 없도록 진행 예정입니다. (단 수강생 스스로도 열심히 학습해 주셔야 합니다)

[특징]
- 실습에 근거한 이론 취득
- 이론/실습 과제로 인한 개발력 UP
교육목표 - Ajax, jQuery 활용 능력
- Spring IoC, AOP에 대한 이해
- Spring JDBC, MVC에 대한 이해
- 스프링 웹 개발에 대한 이해
- 스프링 개발력 UP
교육대상 - Spring을 경험하지 못한 자바 개발자
- Spring을 배우고 싶은 자바 개발자
선수학습 - JAVA, JSP
 

Ajax Programming - Ajax란, 장점
- Ajax 사용예제 분석
- XMLHttpRequest 객체, 메소드, 속성
- Cross-Browsing
- innerHTML, CSV
- JavaFramework & Ajax
- Ajax 동적 XML 로딩
- Form 입력값 검증
- Auto refresh
DOM - DOM 개요
- JAVA for DOM
- Dynamic DOM 다루기
jQuery Programming - jQuery 개요, 다운로드, 설치
- $(document).ready() 메소드
- Selector
$(“*"), $("#ID"), $("DIV"),$(".classname"), $("p > a"),
$(“elementname.classname")
속성 선택자, 속성(attr)
입력양식 필터 선택자
위치와 관련된 필터 선택자
- jQuery 배열(Array) 관리
- jQuery 객체 확장
기본 필터링 메소드
특정 위치 문서 객체 선택
문서 객체에서 특정 태그를 선택하는 방법
innerHTML 속성과 관련된 jQuery 메서드
문서객체 생성 , 제거
- jQuery Event
이벤트 관련 메소드(발생, 제거)
이벤트 자동 발생
마우스/키보드/윈도우/입력양식 이벤트
- jQuery 기본효과, 사용자지정효과
- jQuery, Ajax
관련 메소드
XML 문서 다루기
입력양식 전송
Spring & ORM Basic - Spring의 도입배경 및 아키텍처에 대해 이해한다.
(자바빈의 태동부터 EJB, 그리고 현재까지)
- Eclipse, Maven, STS 플러그인에 대한 이해
(개발환경 설정의 이해)
- Spring IoC(DI, DL)
- Spring AOP
- AspectJ Annotation
- Spring Web MVC, JDBC
- Spring Controller에 대한 이해
- ORM에 대한 이해
Hibernate에 대한 이해
MyBatis에 대한 이해
Spring Project 스프링 게시판 작성하기(Step by Step으로 이해가 쏙쏙)

- 1차버전 : 기본 게시판 기능(리스트보기, 답글, 커멘트, 게시물 입력, 수정) + 게시물 내용 미리보기(Ajax연동)
기술요소 : Ajax, Spring MVC, Spring JDBC, Spring DI

[절차]
게시물 보기 화면부터 구현 후 전체 기능 추가
Controller 구현
Model 영역 구현
DAO 구현
Service 구현
Ajax Manager 구현
View 구현
web.xml, 스프링 설정 파일 작성
TEST, 시연


- 2차버전 : 기본 게시판 기능(리스트보기, 답글, 커멘트, 게시물 입력, 수정) + 로그인 기능(인증한 경우에만 글읽기, 입력,수정,삭제 가능) + 파일 업로드 + DB쪽 Spring AOP를 이용한 로깅 + SQL문을 MyBatis를 이용하여 별도 XML로 관리

기술요소 : Ajax, Spring MVC, Spring JDBC, Spring DI, Spring AOP, MyBatis 결합

[절차]
스프링 설정 파일 수정
Controller 수정
Model 영역 수정
DAO 수정
Service 수정
View 수정
TEST, 시연
 

2013년 8월 2일 금요일

자바의클래스 초기화에 대해서... (class initialize)

클래스가 어떻게 초기화 되는지 잘 알고 있어야 합니다.


오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의) 



클래스가 메모리로 적재된 후  클래스가 사용 되기 전 한번 초기화 된다.

초기화 순서
-  모든 클래스변수는 Default 초기치(0, ‘\u0000’,false, null)로 초기화 된다.
- 클래스변수 초기화수식(Static initializers)과 클래스 초기화 블럭이 실행된다.
      예) public static int PI=3.14;
          public static int facs[] = new int[10];
          static { facs[0]=1;
          for(int I=1;I<10;I++) { facs[I] = facs[I-1]*I; }


New 연산자에 의한 작업 순서

-  객체를 위한 메모리 공간 할당
-  모든 인스턴스 변수는 Default 초기치(0, ‘\u0000’,false, null)로 초기화 된다.
- 인스턴스 변수 초기화수식(instance initializers)과 초기화 블럭이 실행된다.
- 생성자의 첫문장에서 다른 생성자를 호출하는 경우엔 이를 먼저 처리(서브클래스인 경우 명시적인 상위클래스 생성자에 대한 호출이 없으면 super()를 삽입하고 이를 실행한다.)
- 생성자의 나머지 부분을 실행한다. 

자바 상속을 이용한 Adapter 패턴 예제 (java adapter pattern)


안녕하세요~ 오라클자바커뮤니티(www.oraclejavacommunity.co.kr) 입니다.
<"자바 디자인 패턴에 입문" 에 나와 있는 사례소개 합니다.>
 
 오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의) 


상속을 이용한 Adapter 패턴 예제

이미 제공 되는것과  필요로 하는것과의 사이에서 그 사이를 메꾸어 주는것이  Adapter의 역할
 Adapter 패턴은 Wrapper 패턴이라고도 한다.
 Adapter 패턴은 기존의 클래스를 이용해서 필요한 클래스를 만든다.  기존의 것과 필요한 클래스가 기능이 차이가 많은 경우에는 Adapter 패턴을 이용할수 없다. 물론 기존 클래스의 소스는 필요없다.
 Adapter 패턴은 기존버전과 새버전을 공존시키면서 S/W의 유지보수를 가능하게 해 준다.
 Adapter 패턴에는 Class에 위한 Adapter 패턴(상속이용)과 인스턴스에 의한 Adapter 패턴(위임이용) 두가지 형태가 있다.




이 예제는 기존에 제공되는 Class의 기능(주어진 문자열을 출력)을 이용하여 양쪽으로 괄호를 붙여 출력하는 간단한 예제이다.
 이미 제공되는것은 Banner Class이며 필요한것은 Print 인터페이스이고 교환장치(Adpater)는 PrintBanner Class이다.


//Banner.java
public class Banner {
private String str;
public Banner (String str) {
this.str = str;
}
public String  showString() {
return str ;
}
}
//Print.java
public interface Print {
public abstract String printString();
}
//PrintBanner.java
public class PrintBanner extends Banner implements Print {
public PrintBanner (String str) {  super(str);  }
public String  printString() {
return "(" + showString() + ")";
}
}
//Main.java
public class Main {
public static void main(String args[]) {
//PrintBanner p = new PrintBanner("hello"); ?
//만약 PrintBanner의 고유의 메소드가 있다면 
//이를 사용하기 위해서는 어떻게?
Print p = new PrintBanner("hello");
System.out.println(p.printString());
}