2014년 6월 30일 월요일

[JAVA교육학원,JAVA학원교육추천,평일주간재직자100%환급진행,오라클자바커뮤니티]자바에서 최대값,JAVA에서 MAX값구하기,물론 MATH클래스의 MAX함수도 가능하지만^^ 최대값구하는 3가지 예제입니다.

[JAVA교육학원,JAVA학원교육추천,평일주간재직자100%환급진행,오라클자바커뮤니티]자바에서 최대값,JAVA에서 MAX값구하기,물론 MATH클래스의 MAX함수도 가능하지만^^ 최대값구하는 3가지 예제입니다.
 
 
import java.io.*;
import java.util.*;
class Max1 {
 public static void main(String[] args) throws IOException {
  int max = -2147483648;
  int[] array = new int[20];
  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  System.out.println("콤마(,)로 구분하여 숫자들을 입력하세요...");
  String digits = br.readLine();
  StringTokenizer st = new StringTokenizer(digits, ",");
  for(int i=0; st.hasMoreElements(); i++) {
   array[i] = Integer.parseInt(st.nextToken());
  }
  for(int i=0; i < array.length; i++) {
   if (array[i] > max) {
    max = array[i];
   }
  }
  System.out.println("최대값은 : " + max);         
 }
}
 
 
 
 
 
import java.io.*;
import java.util.*;
class Max2 {
 public static void main(String[] args) throws IOException {
  int[] array = new int[20];
  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  System.out.println("콤마(,)로 구분하여 숫자들을 입력하세요...");
  String digits = br.readLine();
  StringTokenizer st = new StringTokenizer(digits, ",");
  for(int i=0; st.hasMoreElements(); i++) {
   array[i] = Integer.parseInt(st.nextToken());
  }
 
  int tmp=0;
  for(int i=0; i < array.length-1; i++) {
   if (array[i] > array[i+1]) {
    tmp = array[i];
    array[i] = array[i+1];
    array[i+1] = tmp;
   }
  }
  System.out.println("최대값은 : " + array[array.length-1]);         
 }
}
 
 
3.
 
 
 
import java.io.*;
import java.util.*;
class Max3 {
 public static void main(String[] args) throws IOException {
  int[] array = new int[20];
  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  System.out.println("콤마(,)로 구분하여 숫자들을 입력하세요...");
  String digits = br.readLine();
  StringTokenizer st = new StringTokenizer(digits, ",");
  for(int i=0; st.hasMoreElements(); i++) {
   array[i] = Integer.parseInt(st.nextToken());
  }
  int [] newArray = new int[array.length];
    System.arraycopy(array, 0, newArray, 0, array.length);
  int tmp=0;
  for(int i=0; i < newArray.length-1; i++) {
   if (newArray[i] > newArray[i+1]) {
    tmp = newArray[i];
    newArray[i] = newArray[i+1];
    newArray[i+1] = tmp;
   }
  }
  System.out.println("최대값은 : " + newArray[array.length-1]);         
 }
}
오라클자바커뮤니티교육센터, 개발자전문교육, 개인80%환급
www.oraclejavacommunity.com


평일주간(9:30~18:10) 개강
(7/07)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍
(7/07)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(7/07)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
(7/07)[채용예정교육]오라클자바개발잘하는신입뽑기프로젝트,교육전취업확정
(7/14)[기업100%환급]SQL기초에서 Schema Object까지
(7/14)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(7/14)[기업100%환급]안드로이드개발자과정

평일야간(19:00~21:50) 개강
(7/01)닷넷(C#,Network,ADO.NET,ASP.NET)마스터과정
(7/02)Spring3.X, MyBatis, Hibernate실무과정
(7/03)웹퍼블리싱 마스터
(7/10)JAVA,Network&WEB&Framework(자바기초에서웹스프링까지)
(7/15)SQL기초에서실무까지
(7/15)안드로이드개발자과정
(7/15)MyBatis3.X, Hibernate4.X ORM실무과정
(7/22)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지

주말(10:00~17:50) 개강
(7/05)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(7/05)SQL초보에서 Schema Object까지
(7/12)MyBatis3.X, Hibernate4.X ORM실무과정
(7/12)개발자를위한PLSQL,SQL튜닝,힌트
(7/13)C#,ASP.NET마스터
(7/19)Spring3.X, MyBatis, Hibernate실무과정
(7/19)웹퍼블리싱 마스터
(7/19)안드로이드개발자과정

주말저녁(18:30~22:20) 개강
(7/19)JAVA,Network&WEB&Framework
(8/09)SQL기초에서실무까지

(ORACLEJAVACOMMUNITY.COMJAVA부트스트랩클래스,사용자클래스,JAVA확장클래스자바에서클래스찾는방식)Java Launcher의 클래스 찾기(클래스 검색 방식),jre/lib/ext

(ORACLEJAVACOMMUNITY.COMJAVA부트스트랩클래스,사용자클래스,JAVA확장클래스자바에서클래스찾는방식)Java Launcher의 클래스 찾기(클래스 검색 방식),jre/lib/ext

우선 부트스트랩 클래스에서 기본 자바 플랫폼에 있는 API 클래스들을 찾아 메모리에 로딩하며 여기에서 찾지 못할 경우 확장 클래스에서 찾으며 여기서도 찾지 못한다면 사용자가 정의한 클래스패스에서 클래스를 찾아 메모리에 로딩한다.
 
Bootstrap classes(부트스트랩 클래스) 찾기

 - 자바 플랫폼을 구성하는 클래스들이며 rt.jar와 i18n.jar에 포함되어 있는 클래스 이다.
 - jar 압축 파일들은 bootstrap class path에 의해 sun.boot.class.path 시스템 프로퍼티에 저장된다
extension classes(확장 클래스) 찾기
 - 자바 플랫폼을 확장한 클래스들 이다.
 - jre/lib/ext 확장 디렉토리에서 모든 jar 파일들을 자바2 확장 클래스로 가정한다.
 
user classes(사용자 클래스) 찾기

 - -cp 또는 –classpath 명령행 옵션은 기본 환경 설정과 클래스 패스 환경변수 설정을 재정의 한다.
 - jar 압축 파일은 다른 환경 설정을 압축 파일 내에 포함 하고 있다.


오라클자바커뮤니티교육센터, 개발자전문교육, 개인80%환급
www.oraclejavacommunity.com


평일주간(9:30~18:10) 개강
(7/07)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍
(7/07)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(7/07)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지 
(7/07)[채용예정교육]오라클자바개발잘하는신입뽑기프로젝트,교육전취업확정
(7/14)[기업100%환급]SQL기초에서 Schema Object까지
(7/14)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(7/14)[기업100%환급]안드로이드개발자과정

평일야간(19:00~21:50) 개강
(7/01)닷넷(C#,Network,ADO.NET,ASP.NET)마스터과정
(7/02)Spring3.X, MyBatis, Hibernate실무과정
(7/03)웹퍼블리싱 마스터
(7/10)JAVA,Network&WEB&Framework(자바기초에서웹스프링까지)
(7/15)SQL기초에서실무까지
(7/15)안드로이드개발자과정
(7/15)MyBatis3.X, Hibernate4.X ORM실무과정
(7/22)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지

주말(10:00~17:50) 개강
(7/05)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(7/05)SQL초보에서 Schema Object까지
(7/12)MyBatis3.X, Hibernate4.X ORM실무과정
(7/12)개발자를위한PLSQL,SQL튜닝,힌트
(7/13)C#,ASP.NET마스터
(7/19)Spring3.X, MyBatis, Hibernate실무과정
(7/19)웹퍼블리싱 마스터
(7/19)안드로이드개발자과정

주말저녁(18:30~22:20) 개강
(7/19)JAVA,Network&WEB&Framework
(8/09)SQL기초에서실무까지

[JAVA기초교육,자바실무강좌,재직자100%환급진행,평일주간야간주말]자바 원시 자료형,기본 자료형,void 자료형,참조형, void형, 자바변수

[JAVA기초교육,자바실무강좌,재직자100%환급진행,평일주간야간주말]자바 원시 자료형,기본 자료형,void 자료형,참조형, void형, 자바변수
 
1. 기본 자료형(원시자료형)
 
byte : 8비트, 2의 보수 (-128 ~ 127)
short : 16비트 (-32768 ~ 32767)
char : 16비트, 유니코드 (0 ~ 65535)
int : 32비트 (-2147483648 ~ 2147483647)
long : 64비트 (-9223372036854775808 ~ 9223372036854775807)
float : 32비트
double : 64비트
boolean : true, false

2. void 자료형(원시자료형)
 
아무런 값도 반환하지 않는 메쏘드 정의
 
3. 참조형
 
객체의 참조 값을 나타내는 자료형(포인터와 유사)
배열 참조형
클래스 참조형
인터페이스 참조형
 
4. 변수
 
해당 자료형의 값을 기억할 수 있는 기억 장소
 
//기본자료형과 참조형의 차이
public class Sample1 {
 static int a, b;
 public static void main(String[] args) {    
    System.out.println("초기상태 : a="+a+", b="+b);
   a=1; 
   b=a;   //a의 1이라는 값자체가 대입된다.
   a=2;

   System.out.println("b="+b);
   Sample1 s1, s2;

   s1 = new Sample1();
   s2 = s1;                   //s1이 참조하는 것을 s1도 참조
   s1.a = 10;                //s1, s1에서 동시에 바뀐값을 확인가능, 같은값

   System.out.println("s2.a="+s2.a);

 }
}
 

오라클자바커뮤니티교육센터, 개발자전문교육, 개인80%환급
www.oraclejavacommunity.com


평일주간(9:30~18:10) 개강
(7/07)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍
(7/07)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(7/07)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
(7/07)[채용예정교육]오라클자바개발잘하는신입뽑기프로젝트,교육전취업확정
(7/14)[기업100%환급]SQL기초에서 Schema Object까지
(7/14)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(7/14)[기업100%환급]안드로이드개발자과정

평일야간(19:00~21:50) 개강
(7/01)닷넷(C#,Network,ADO.NET,ASP.NET)마스터과정
(7/02)Spring3.X, MyBatis, Hibernate실무과정
(7/03)웹퍼블리싱 마스터
(7/10)JAVA,Network&WEB&Framework(자바기초에서웹스프링까지)
(7/15)SQL기초에서실무까지
(7/15)안드로이드개발자과정
(7/15)MyBatis3.X, Hibernate4.X ORM실무과정
(7/22)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지

주말(10:00~17:50) 개강
(7/05)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(7/05)SQL초보에서 Schema Object까지
(7/12)MyBatis3.X, Hibernate4.X ORM실무과정
(7/12)개발자를위한PLSQL,SQL튜닝,힌트
(7/13)C#,ASP.NET마스터
(7/19)Spring3.X, MyBatis, Hibernate실무과정
(7/19)웹퍼블리싱 마스터
(7/19)안드로이드개발자과정

주말저녁(18:30~22:20) 개강
(7/19)JAVA,Network&WEB&Framework
(8/09)SQL기초에서실무까지

[구로/가산디지털단지자바전문교육,자바객체직렬화를위한 객체입출력,자바기초실무교육학원추천,JAVA평일주간야간주말실무교육]ObjectOutput 인테페이스, ObjectInput 인터페이스 ,오라클자바커뮤니티 자바개발자기초실무교육

[구로/가산디지털단지자바전문교육,자바객체직렬화를위한 객체입출력,자바기초실무교육학원추천,JAVA평일주간야간주말실무교육]ObjectOutput 인테페이스, ObjectInput 인터페이스 ,오라클자바커뮤니티 자바개발자기초실무교육

ObjectOutput 인테페이스
객체를 출력하기 위한 메쏘드 정의
DataOutput의 하위 인터페이스
writeObject(Object obj)
 
import java.io.*;
class ObjectOutputTest
{
    public static void main(String[] args)
    {
        try {
            ObjectOutput s = new ObjectOutputStream(
                new FileOutputStream( "objectstream.dat" ) );
            s.writeObject( "Today" );
            s.writeObject( new java.util.Date() );
            s.flush();
        } catch( Exception e ) {
            e.printStackTrace(); }
    }
}
 

ObjectInput 인터페이스

객체를 입력하기 위한 메쏘드 정의
DataInput의 하위 인터페이스
Object readObject() throws ClassNotFoundException

import java.io.*;
class ObjectInputTest
{
    public static void main(String[] args)
    {
        try {
            ObjectInput s = new ObjectInputStream(
                new FileInputStream( "objectstream.dat" ) );
            String today = (String) s.readObject();
            java.util.Date date = (java.util.Date) s.readObject();
            System.out.println(today);
            System.out.println(date);
        } catch( Exception e ) {
            e.printStackTrace(); }
    }
}


오라클자바커뮤니티교육센터, 개발자전문교육, 개인80%환급
www.oraclejavacommunity.com


평일주간(9:30~18:10) 개강
(7/07)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍
(7/07)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(7/07)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지 
(7/07)[채용예정교육]오라클자바개발잘하는신입뽑기프로젝트,교육전취업확정
(7/14)[기업100%환급]SQL기초에서 Schema Object까지
(7/14)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(7/14)[기업100%환급]안드로이드개발자과정

평일야간(19:00~21:50) 개강
(7/01)닷넷(C#,Network,ADO.NET,ASP.NET)마스터과정
(7/02)Spring3.X, MyBatis, Hibernate실무과정
(7/03)웹퍼블리싱 마스터
(7/10)JAVA,Network&WEB&Framework(자바기초에서웹스프링까지)
(7/15)SQL기초에서실무까지
(7/15)안드로이드개발자과정
(7/15)MyBatis3.X, Hibernate4.X ORM실무과정
(7/22)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지

주말(10:00~17:50) 개강
(7/05)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(7/05)SQL초보에서 Schema Object까지
(7/12)MyBatis3.X, Hibernate4.X ORM실무과정
(7/12)개발자를위한PLSQL,SQL튜닝,힌트
(7/13)C#,ASP.NET마스터
(7/19)Spring3.X, MyBatis, Hibernate실무과정
(7/19)웹퍼블리싱 마스터
(7/19)안드로이드개발자과정

주말저녁(18:30~22:20) 개강
(7/19)JAVA,Network&WEB&Framework
(8/09)SQL기초에서실무까지

[JAVA인터프리터,컴파일방식,JAVAC]자바언어(Java Language)인터프리터(Interpreter) 방식과 컴파일 방식,자바교육,JAVA교육,자바교육잘하는곳,www.oraclejavacommunity.com

[JAVA인터프리터,컴파일방식,JAVAC]자바언어(Java Language)인터프리터(Interpreter) 방식과 컴파일 방식,자바교육,JAVA교육,자바교육잘하는곳,www.oraclejavacommunity.com
 
1. 인터프리터 방식
 
원래 인터프리터의 의미는 고급언어로 작성된 프로그램을 한즐씩 번역해서 OS에서 인식하는 기계어로 번역하는 역할을 한다.

자바인터프리터는 JAVAC명령으로 자바 프로그램을 중간 형태인 자바 바이트코드로 컴파일하고 이를 자바 인터프리터가 한 줄씩 해석하여 기계어로 번역함

자바 인터프리터와 Run-Time System이 이식된 모든 플랫폼에서 자바 바이트코드를 직접 실행(java)
번역속도는 빠르지만 실행 속도는 느림

JAVA, BASIC, LISP, HTML등이 해당
 
2. 컴파일 방식
 
원래 컴파일러는 고급언어로 작성된 프로그램을 목적프로그램으로 번역 후 링킹(Linking) 작업을 통해 실행 프로그램을 생성한다.

자바는 javac로 컴파일 하고 java로 실행시 중간언어(클래스파일)을 한줄 씩 자바인터프로터가 번역하므로 컴파일언어 이면서 인터프리터 언어임.


오라클자바커뮤니티교육센터, 개발자전문교육, 개인80%환급
www.oraclejavacommunity.com


평일주간(9:30~18:10) 개강
(7/07)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍
(7/07)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(7/07)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
(7/07)[채용예정교육]오라클자바개발잘하는신입뽑기프로젝트,교육전취업확정
(7/14)[기업100%환급]SQL기초에서 Schema Object까지
(7/14)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(7/14)[기업100%환급]안드로이드개발자과정

평일야간(19:00~21:50) 개강
(7/01)닷넷(C#,Network,ADO.NET,ASP.NET)마스터과정
(7/02)Spring3.X, MyBatis, Hibernate실무과정
(7/03)웹퍼블리싱 마스터
(7/10)JAVA,Network&WEB&Framework(자바기초에서웹스프링까지)
(7/15)SQL기초에서실무까지
(7/15)안드로이드개발자과정
(7/15)MyBatis3.X, Hibernate4.X ORM실무과정
(7/22)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지

주말(10:00~17:50) 개강
(7/05)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(7/05)SQL초보에서 Schema Object까지
(7/12)MyBatis3.X, Hibernate4.X ORM실무과정
(7/12)개발자를위한PLSQL,SQL튜닝,힌트
(7/13)C#,ASP.NET마스터
(7/19)Spring3.X, MyBatis, Hibernate실무과정
(7/19)웹퍼블리싱 마스터
(7/19)안드로이드개발자과정

주말저녁(18:30~22:20) 개강
(7/19)JAVA,Network&WEB&Framework
(8/09)SQL기초에서실무까지

[구로/가산디지털단지/강남/자바교육학원추천,자바환경변수에서 클래스패스설정하기,JAVA학원교육추천,자바강좌]자바 클래스패스 설정 방법(JAVA ClassPath), java -classpath, 자바 set classpath...

[구로/가산디지털단지/강남/자바교육학원추천,자바환경변수에서 클래스패스설정하기,JAVA학원교육추천,자바강좌]자바 클래스패스 설정 방법(JAVA ClassPath), java -classpath, 자바 set classpath...
 
classpath는 sdk tool(java, javac)등에서      
 
–classpath option을 줌으로서 클래스를 찾을 경로를 지정할 수 있다.
 
또는 OS에서 환경설정을 함으로서 지정 가능하다. (set classpath=~ 형태 또는 내컴퓨터고급환경변수에서 classpath 지정)
 
현재 디렉토리에 있는 모든 사용자 클래스 파일들을 지칭할때는 .(dot)을 사용한다.


오라클자바커뮤니티교육센터, 개발자전문교육, 개인80%환급
www.oraclejavacommunity.com


평일주간(9:30~18:10) 개강
(7/07)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍
(7/07)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(7/07)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지 
(7/07)[채용예정교육]오라클자바개발잘하는신입뽑기프로젝트,교육전취업확정
(7/14)[기업100%환급]SQL기초에서 Schema Object까지
(7/14)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(7/14)[기업100%환급]안드로이드개발자과정

평일야간(19:00~21:50) 개강
(7/01)닷넷(C#,Network,ADO.NET,ASP.NET)마스터과정
(7/02)Spring3.X, MyBatis, Hibernate실무과정
(7/03)웹퍼블리싱 마스터
(7/10)JAVA,Network&WEB&Framework(자바기초에서웹스프링까지)
(7/15)SQL기초에서실무까지
(7/15)안드로이드개발자과정
(7/15)MyBatis3.X, Hibernate4.X ORM실무과정
(7/22)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지

주말(10:00~17:50) 개강
(7/05)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(7/05)SQL초보에서 Schema Object까지
(7/12)MyBatis3.X, Hibernate4.X ORM실무과정
(7/12)개발자를위한PLSQL,SQL튜닝,힌트
(7/13)C#,ASP.NET마스터
(7/19)Spring3.X, MyBatis, Hibernate실무과정
(7/19)웹퍼블리싱 마스터
(7/19)안드로이드개발자과정

주말저녁(18:30~22:20) 개강
(7/19)JAVA,Network&WEB&Framework
(8/09)SQL기초에서실무까지

(자바부트스트랩클래스,JAVA확장클래스,JAVA -CP, -CLASSPATH,자바에서클래스찾는방식)Java Launcher의 클래스 찾기(클래스 검색 방식),자바교육학원추천,JAVA교육학원추천,자바교육잘하는곳

(자바부트스트랩클래스,JAVA확장클래스,JAVA -CP, -CLASSPATH,자바에서클래스찾는방식)Java Launcher의 클래스 찾기(클래스 검색 방식),자바교육학원추천,JAVA교육학원추천,자바교육잘하는곳

우선 부트스트랩 클래스에서 기본 자바 플랫폼에 있는 API 클래스들을 찾아 메모리에 로딩하며 여기에서 찾지 못할 경우 확장 클래스에서 찾으며 여기서도 찾지 못한다면 사용자가 정의한 클래스패스에서 클래스를 찾아 메모리에 로딩한다.
 
Bootstrap classes(부트스트랩 클래스) 찾기

 - 자바 플랫폼을 구성하는 클래스들이며 rt.jar와 i18n.jar에 포함되어 있는 클래스 이다.
 - jar 압축 파일들은 bootstrap class path에 의해 sun.boot.class.path 시스템 프로퍼티에 저장된다
extension classes(확장 클래스) 찾기
 - 자바 플랫폼을 확장한 클래스들 이다.
 - jre/lib/ext 확장 디렉토리에서 모든 jar 파일들을 자바2 확장 클래스로 가정한다.
 
user classes(사용자 클래스) 찾기

 - -cp 또는 –classpath 명령행 옵션은 기본 환경 설정과 클래스 패스 환경변수 설정을 재정의 한다.
 - jar 압축 파일은 다른 환경 설정을 압축 파일 내에 포함 하고 있다.
 

오라클자바커뮤니티교육센터, 개발자전문교육, 개인80%환급
www.oraclejavacommunity.com


평일주간(9:30~18:10) 개강
(7/07)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍
(7/07)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(7/07)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
(7/07)[채용예정교육]오라클자바개발잘하는신입뽑기프로젝트,교육전취업확정
(7/14)[기업100%환급]SQL기초에서 Schema Object까지
(7/14)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(7/14)[기업100%환급]안드로이드개발자과정

평일야간(19:00~21:50) 개강
(7/01)닷넷(C#,Network,ADO.NET,ASP.NET)마스터과정
(7/02)Spring3.X, MyBatis, Hibernate실무과정
(7/03)웹퍼블리싱 마스터
(7/10)JAVA,Network&WEB&Framework(자바기초에서웹스프링까지)
(7/15)SQL기초에서실무까지
(7/15)안드로이드개발자과정
(7/15)MyBatis3.X, Hibernate4.X ORM실무과정
(7/22)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지

주말(10:00~17:50) 개강
(7/05)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(7/05)SQL초보에서 Schema Object까지
(7/12)MyBatis3.X, Hibernate4.X ORM실무과정
(7/12)개발자를위한PLSQL,SQL튜닝,힌트
(7/13)C#,ASP.NET마스터
(7/19)Spring3.X, MyBatis, Hibernate실무과정
(7/19)웹퍼블리싱 마스터
(7/19)안드로이드개발자과정

주말저녁(18:30~22:20) 개강
(7/19)JAVA,Network&WEB&Framework
(8/09)SQL기초에서실무까지

[구로/가산디지털단지실무JAVA학원추천교육,자바교육학원추천,JAVA학원교육추천,자바7,JDK1.7 특징,새기능]try~catch 불록에서 다중 예외처리,자바(JAVA)에서 여러개의 예외 catch,평일주간100%재직자환급,평일야간주말자바개발자기초실무교육

[구로/가산디지털단지실무JAVA학원추천교육,자바교육학원추천,JAVA학원교육추천,자바7,JDK1.7 특징,새기능]try~catch 불록에서 다중 예외처리,자바(JAVA)에서 여러개의 예외 catch,평일주간100%재직자환급,평일야간주말자바개발자기초실무교육

자바7, JDK1.7의 향상된 기능으로 try~catch 불록에서 다중 예외를 받아 처리할 수 있게 되습니다.
아래 예문을 보죠.

자바7 이전에는 아래와 같은 방법으로 예외를 처리했다면
 
catch (NumberFormatException ex) {
     logger.log(ex);
     throw ex;
catch (SQLException ex) {
     logger.log(ex);
     throw ex;
}

자바7 이후에는 아래와 같은 방법이 가능 합니다.

catch (NumberFormatException | SQLException ex) {
    logger.log(ex);
    throw ex;
}

오라클자바커뮤니티교육센터, 개발자전문교육, 개인80%환급
www.oraclejavacommunity.com


평일주간(9:30~18:10) 개강
(7/07)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍
(7/07)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(7/07)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지 
(7/07)[채용예정교육]오라클자바개발잘하는신입뽑기프로젝트,교육전취업확정
(7/14)[기업100%환급]SQL기초에서 Schema Object까지
(7/14)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(7/14)[기업100%환급]안드로이드개발자과정

평일야간(19:00~21:50) 개강
(7/01)닷넷(C#,Network,ADO.NET,ASP.NET)마스터과정
(7/02)Spring3.X, MyBatis, Hibernate실무과정
(7/03)웹퍼블리싱 마스터
(7/10)JAVA,Network&WEB&Framework(자바기초에서웹스프링까지)
(7/15)SQL기초에서실무까지
(7/15)안드로이드개발자과정
(7/15)MyBatis3.X, Hibernate4.X ORM실무과정
(7/22)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지

주말(10:00~17:50) 개강
(7/05)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(7/05)SQL초보에서 Schema Object까지
(7/12)MyBatis3.X, Hibernate4.X ORM실무과정
(7/12)개발자를위한PLSQL,SQL튜닝,힌트
(7/13)C#,ASP.NET마스터
(7/19)Spring3.X, MyBatis, Hibernate실무과정
(7/19)웹퍼블리싱 마스터
(7/19)안드로이드개발자과정

주말저녁(18:30~22:20) 개강
(7/19)JAVA,Network&WEB&Framework
(8/09)SQL기초에서실무까지

[JAVA전문개발자교육,자바클래스객체비교, String객체비교,Equals,==,오라클자바커뮤니티학원,자바교육,벡터비교,Vector비교]자바 객체를 비교하는 방법 입니다. JAVA학원,JAVA교육평일주간야간부말 구로디지털단지자바기초실무교육

[JAVA전문개발자교육,자바클래스객체비교, String객체비교,Equals,==,오라클자바커뮤니티학원,자바교육,벡터비교,Vector비교]자바 객체를 비교하는 방법 입니다. JAVA학원,JAVA교육평일주간야간부말 구로디지털단지자바기초실무교육

결과 참고 하세요~
 
 
import java.util.Vector;

class First  {
 String name = null;
 First(String name) {
  this.name = name;
 }

 public boolean equals(First f) {
  return f.name == this.name;
 }
}
public class Test {
 public static void main(String[] args) throws Exception { 
 
  First f1 = new First("11");
  First f2 = new First("11"); 
 
  //만약 First 클래스가 equals를 재정의 안했다면 아래 f1.equals(f2)는 false
  System.out.println(f1.equals(f2));   //true
  System.out.println(f1 == f2);        //false
 
 
  Vector v = new Vector();
  Vector v1 = new Vector();
 
  v.addElement("javaok");
  v1.addElement("javaok");
 
  //Vector는 상위클래스인 AbstractList에서 equals를 재정의
  //벡터에 들어가 있는 값이 같은면 같다고 
  System.out.println(v.equals(v1));   //true
  System.out.println(v==v1);          //false
 
  String s1 = "123";
  String s2 = "123";
 
  System.out.println(s1.equals(s2));  //true
  System.out.println(s1 == s2);       //true
 
  String s3 = new String("123");
  String s4 = new String("123");
 
  System.out.println(s3.equals(s4));  //true
  System.out.println(s3 == s4);      //false   
 } 
}

오라클자바커뮤니티교육센터, 개발자전문교육, 개인80%환급
www.oraclejavacommunity.com


평일주간(9:30~18:10) 개강
(7/07)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍
(7/07)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(7/07)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지 
(7/07)[채용예정교육]오라클자바개발잘하는신입뽑기프로젝트,교육전취업확정
(7/14)[기업100%환급]SQL기초에서 Schema Object까지
(7/14)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(7/14)[기업100%환급]안드로이드개발자과정

평일야간(19:00~21:50) 개강
(7/01)닷넷(C#,Network,ADO.NET,ASP.NET)마스터과정
(7/02)Spring3.X, MyBatis, Hibernate실무과정
(7/03)웹퍼블리싱 마스터
(7/10)JAVA,Network&WEB&Framework(자바기초에서웹스프링까지)
(7/15)SQL기초에서실무까지
(7/15)안드로이드개발자과정
(7/15)MyBatis3.X, Hibernate4.X ORM실무과정
(7/22)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지

주말(10:00~17:50) 개강
(7/05)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(7/05)SQL초보에서 Schema Object까지
(7/12)MyBatis3.X, Hibernate4.X ORM실무과정
(7/12)개발자를위한PLSQL,SQL튜닝,힌트
(7/13)C#,ASP.NET마스터
(7/19)Spring3.X, MyBatis, Hibernate실무과정
(7/19)웹퍼블리싱 마스터
(7/19)안드로이드개발자과정

주말저녁(18:30~22:20) 개강
(7/19)JAVA,Network&WEB&Framework
(8/09)SQL기초에서실무까지

[평일주간100%환급교육,스프링실무교육학원추천,스프링3.X, 마이바티스]Transaction 처리예제,Spring3.X, MyBatis3.X, 스프링트랜잭션매니저

[평일주간100%환급교육,스프링실무교육학원추천,스프링3.X, 마이바티스]Transaction 처리예제,Spring3.X, MyBatis3.X, 스프링트랜잭션매니저

Spring 의 Transaction Manager 를 사용하여 트랜잭션 처리

Spring 에서 제공해주는 Transaction Manager 기능으로 서비스 영역까지 트랜잭션을 처리할 수 있는 편리한 트랜잭션 처리 방식이다.

이전 MyBatis로 구현한 Customer 예제에 Transaction을 적용하자.


1. Customer.java

package onj.edu.jdbc3;

public class Customer {
private Integer id;
private String name;
private Integer age;

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Integer getAge() {
return age;
}

public void setAge(Integer age) {
this.age = age;
}
}



2. CustomerDao.java

package onj.edu.jdbc3;

import java.util.List;
import onj.edu.jdbc3.Customer;

public interface CustomerDao {
public int createCustomer(Customer customer);

public int deleteCustomer(Customer customer);

public int updateCustomer(Customer customer);

public Customer getCustomer(Integer id);

public List<Customer> getListCustomer();
}


3. CustomerDaoImpl.java

package onj.edu.jdbc3;

import java.util.List;
import javax.annotation.Resource;
import org.apache.ibatis.session.SqlSession;
import onj.edu.jdbc3.Customer;

public class CustomerDaoImpl implements CustomerDao {
@Resource(name = "sqlSession")
private SqlSession sqlSessionTemplate;

@Override
public int createCustomer(Customer customer) {
CustomerDao customerDao = sqlSessionTemplate
.getMapper(CustomerDao.class);
return customerDao.createCustomer(customer);
}

@Override
public Customer getCustomer(Integer id) {
CustomerDao customerDao = sqlSessionTemplate
.getMapper(CustomerDao.class);
return customerDao.getCustomer(id);
}

@Override
public List<Customer> getListCustomer() {
@SuppressWarnings("unchecked")
List<Customer> list = (List<Customer>) sqlSessionTemplate
.getMapper(CustomerDao.class);
return list;
}

@Override
public int deleteCustomer(Customer customer) {
CustomerDao customerDao = sqlSessionTemplate
.getMapper(CustomerDao.class);
return customerDao.deleteCustomer(customer);
}

@Override
public int updateCustomer(Customer customer) {
CustomerDao customerDao = sqlSessionTemplate
.getMapper(CustomerDao.class);
return customerDao.updateCustomer(customer);
}
}



4. CustomerTest.java
(이클립스에서 run as --> JUnit Test로 실행하자)

package onj.edu.jdbc3;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;

import onj.edu.jdbc3.CustomerDao;
import onj.edu.jdbc3.Customer;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:context/appcontext-mybatis3.xml")
public class CustomerTest {
@Autowired
private CustomerDao customerDao;

@Autowired
private PlatformTransactionManager transactionManager;

DefaultTransactionDefinition def = null;
TransactionStatus status = null;

//PlatformTransactionManager 이용 수동으로 트랜잭션을 다루는 방법
@Test
public void test() {

try {

def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);

status = transactionManager.getTransaction(def);

Customer customer = new Customer();
customer.setAge(30);
customer.setId(30);
customer.setName("오라클자바커뮤니티30");
int cnt = customerDao.createCustomer(customer);
System.out.println("<<<<< 30번 Insert OK");

customer.setId(31);
cnt = customerDao.createCustomer(customer);
System.out.println("<<<<< 31번 Insert OK");

customer.setId(32);
cnt = customerDao.createCustomer(customer);

System.out.println("<<<<< 32번 Insert OK");

 customer = new Customer(); customer.setAge(99);
 customer.setId(30); 
 customer.setName("30번 새이름:오라클자바커뮤니티"); 
 cnt = customerDao.updateCustomer(customer);
 
System.out.println(">>>>> 3번 Update OK ---> " + cnt);
 
 customer = new Customer(); 
 customer.setId(31); 
 int deleteCnt = customerDao.deleteCustomer(customer);

System.out.println("삭제건수 = " + deleteCnt);
System.out.println(">>>>> 31번 Delete OK");

 transactionManager.commit(status);

} catch (Exception e) {
transactionManager.rollback(status);
}

}
}


5. appcontext-mybatis3.xml


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans 
 http://www.springframework.org/schema/beans/spring-beans.xsd
 http://www.springframework.org/schema/tx    
          http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
 http://www.springframework.org/schema/context 
 http://www.springframework.org/schema/context/spring-context-3.2.xsd">

<!--  스프링 트랜잭션을 가능하게 하려면 DataSourceTransactionManager를 생성 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 마이바티스는  스프링 트랜잭션 리소스처럼 동작,스프링은 이미 설정된 트랜잭션을 
사용해서 SqlSession을 동작중인 트랜잭션에 넣는다.  -->
<tx:annotation-driven />


<bean id="dataSource"
class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
<property name="driverClass" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@192.168.0.85:1521:onj" />
<property name="username" value="scott" />
<property name="password" value="tiger" />
</bean>

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:mybatis/sqlmap-config3.xml" />
<property name="mapperLocations" value="classpath:mybatis/mappers/customer3.xml" />
</bean>
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory" />
</bean>

<bean id="customerDao" class="onj.edu.jdbc3.CustomerDaoImpl" />
</beans>



6. sqlmap-config3.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
 <typeAliases>
  <typeAlias
   type="onj.edu.jdbc3.Customer"
   alias="customer" />
 </typeAliases>
</configuration>


7. customer3.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="onj.edu.jdbc3.CustomerDao">
 <resultMap type="customer" id="customerid">
  <result property="id" column="id" />
  <result property="name" column="name" />
  <result property="age" column="age" />
 </resultMap>
 
 <select id="getCustomer" parameterType="int" resultMap="customerid">
  SELECT * FROM CUSTOMER WHERE ID = #{id}
 </select>
 
 <insert id="createCustomer" parameterType="onj.edu.jdbc3.Customer">
  INSERT INTO CUSTOMER(ID, NAME, AGE) VALUES (#{id},#{name},#{age})
 </insert>
 
 <update id="updateCustomer" parameterType="onj.edu.jdbc3.Customer">
  UPDATE CUSTOMER
  SET AGE = #{age},
      NAME = #{name}
  WHERE
      ID = #{id}
 </update>
 <delete id="deleteCustomer" parameterType="onj.edu.jdbc3.Customer">
  DELETE FROM CUSTOMER WHERE ID = #{id}
 </delete>
</mapper>



8. 결과

INFO : org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [context/appcontext-mybatis3.xml]
INFO : org.springframework.context.support.GenericApplicationContext - Refreshing org.springframework.context.support.GenericApplicationContext@e94c62: startup date [Tue Oct 08 21:10:54 KST 2013]; root of context hierarchy
INFO : org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor - JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
INFO : org.springframework.beans.factory.support.DefaultListableBeanFactory - Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1e90d95: defining beans [transactionManager,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor,dataSource,sqlSessionFactory,sqlSession,customerDao,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalPersistenceAnnotationProcessor,org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor]; root of factory hierarchy
<<<<< 30번 Insert OK
<<<<< 31번 Insert OK
<<<<< 32번 Insert OK
>>>>> 3번 Update OK ---> 2
삭제건수 = 1
>>>>> 31번 Delete OK
INFO : org.springframework.context.support.GenericApplicationContext - Closing org.springframework.context.support.GenericApplicationContext@e94c62: startup date [Tue Oct 08 21:10:54 KST 2013]; root of context hierarchy
INFO : org.springframework.beans.factory.support.DefaultListableBeanFactory - Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1e90d95: defining beans [transactionManager,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor,dataSource,sqlSessionFactory,sqlSession,customerDao,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalPersistenceAnnotationProcessor,org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor]; root of factory hierarchy



9. customer Table Select 결과

SQL> select * from customer;

        ID NAME
---------- -----------------------
        30 30번 새이름:오라클자바커뮤니티
        32 3길동

오라클자바커뮤니티교육센터, 개발자전문교육, 개인80%환급
www.oraclejavacommunity.com


평일주간(9:30~18:10) 개강
(7/07)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍
(7/07)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(7/07)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
(7/07)[채용예정교육]오라클자바개발잘하는신입뽑기프로젝트,교육전취업확정
(7/14)[기업100%환급]SQL기초에서 Schema Object까지
(7/14)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(7/14)[기업100%환급]안드로이드개발자과정

평일야간(19:00~21:50) 개강
(7/01)닷넷(C#,Network,ADO.NET,ASP.NET)마스터과정
(7/02)Spring3.X, MyBatis, Hibernate실무과정
(7/03)웹퍼블리싱 마스터
(7/10)JAVA,Network&WEB&Framework(자바기초에서웹스프링까지)
(7/15)SQL기초에서실무까지
(7/15)안드로이드개발자과정
(7/15)MyBatis3.X, Hibernate4.X ORM실무과정
(7/22)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지

주말(10:00~17:50) 개강
(7/05)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(7/05)SQL초보에서 Schema Object까지
(7/12)MyBatis3.X, Hibernate4.X ORM실무과정
(7/12)개발자를위한PLSQL,SQL튜닝,힌트
(7/13)C#,ASP.NET마스터
(7/19)Spring3.X, MyBatis, Hibernate실무과정
(7/19)웹퍼블리싱 마스터
(7/19)안드로이드개발자과정

주말저녁(18:30~22:20) 개강
(7/19)JAVA,Network&WEB&Framework
(8/09)SQL기초에서실무까지

[구로/가산디지털단지,자바개발자교육학원,스프링File Upload,Spring게시판교육학원.스프링프레임워크3/4 교육학원추천,Spring Framework 게시판 파일업로드, COS.JAR]스프링 게시판 만들기(새글 입력 + 파일 업로드)

[구로/가산디지털단지,자바개발자교육학원,스프링File Upload,Spring게시판교육학원.스프링프레임워크3/4 교육학원추천,Spring Framework 게시판 파일업로드, COS.JAR]스프링 게시판 만들기(새글 입력 + 파일 업로드)

1.     시작하기
 
-       이번에는 게시판 리스트 보기에서 글쓰기” 버튼을 눌렀을 때 게시물울 입력하는 화면과 함께 글을 저장하는 부분을 개발하자.
-       MultipartRequest를 사용한 파일 업로드를 위해 http://www.servlets.com/cos/ 에서 com.oreilly.servlet cos.jar 파일을 다운받자.
 
 
2.     새글 입력을 위한 DAO쪽 클래스를 작성하자.
 
BoardDAO.java 인터페이스, SpringBoardDAO.java 클래스에   입력을 위한 insertBoard() 메소드를 추가하자.
 
 
소스 코드  빨강색 부분이   입력을 위해 추가된 부분
 
 
[BoardDAO.java]
 
package onj.board.dao;
 
import java.util.List;
 
import onj.board.model.BoardDTO;
import onj.board.model.CommentDTO;
 
import org.springframework.dao.DataAccessException;
 
 
public interface BoardDAO {
       //게시물 리스트 보기
       public List<BoardDTO> boardList() throws DataAccessException;
      
       //게시물 본문 미리보기
       public String preView(String seq) throws DataAccessException;
      
       //게시물 본문 읽기
       public BoardDTO readContent(String seq) throws DataAccessException;
      
       //읽은 글의 조회수 1증가
       public int updateReadCount(String seq) throws DataAccessException;
      
       //Comment저장
       public int insertComment(CommentDTO commentDTO) throws DataAccessException  ;
      
       //Comment조회
       public List<CommentDTO> commentList(String seq) throws DataAccessException;
      
       //게시글 입력
       public int insertBoard(BoardDTO board) throws DataAccessException;
}
 
 
[SpringBoardDAO.java]
 
 
package onj.board.dao;
 
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
 
import javax.sql.DataSource;
 
import onj.board.model.BoardDTO;
import onj.board.model.CommentDTO;
 
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
 
public class SpringBoardDAO implements BoardDAO {
       private JdbcTemplate jdbcTemplate;
 
       public void setDataSource(DataSource dataSource) {
             this.jdbcTemplate = new JdbcTemplate(dataSource);
       }
 
       // /게시판 전체 리스트 보기(list.html)
       public List<BoardDTO> boardList() throws DataAccessException {
             List<BoardDTO> boardList = null;
 
             String sql = "select * from board";
 
             boardList = jdbcTemplate.query(sql, new RowMapper() {
                    public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
                           BoardDTO board = new BoardDTO();
 
                           board.setSeq(rs.getInt("seq"));
                           board.setName(rs.getString("name"));
                           board.setPasswd(rs.getString("passwd"));
                           board.setTitle(rs.getString("title"));
                           board.setContent(rs.getString("content"));
                           board.setFileName(rs.getString("filename"));
                           board.setRegDate(rs.getString("regdate"));
                           board.setReadCount(rs.getInt("readcount"));
                           board.setReply(rs.getInt("reply"));
                           board.setReply_step(rs.getInt("reply_step"));
                           board.setReply_level(rs.getInt("reply_level"));
 
                           return board;
                    }
             });
 
             return boardList;
       }
 
       // 게시물 본문내용 미리보기(/preView)
       public String preView(String seq) throws DataAccessException {
             String sql = "select * from board where seq = ?";
 
             String preContent = (String) jdbcTemplate.queryForObject(sql,
                           new Object[] { seq }, new RowMapper() {
                                 public Object mapRow(ResultSet rs, int rowNum)
                                              throws SQLException {
                                        return rs.getString("content");
                                 }
                           });
             return preContent;
       }
 
       // 게시판 상세보기게시글 읽기
       public BoardDTO readContent(String seq) throws DataAccessException {
             String sql = "select * from board where seq = ?";
 
             BoardDTO boardDTO = (BoardDTO) jdbcTemplate.queryForObject(sql,
                           new Object[] { seq }, new RowMapper() {
                                 public Object mapRow(ResultSet rs, int rowNum)
                                               throws SQLException {
                                        BoardDTO board = new BoardDTO();
 
                                        board.setSeq(rs.getInt("seq"));
                                        board.setName(rs.getString("name"));
                                        board.setPasswd(rs.getString("passwd"));
                                        board.setTitle(rs.getString("title"));
                                       board.setContent(rs.getString("content"));
                                       board.setFileName(rs.getString("filename"));
                                       board.setRegDate(rs.getString("regdate"));
                                       board.setReadCount(rs.getInt("readcount"));
                                        board.setReply(rs.getInt("reply"));
                                       board.setReply_step(rs.getInt("reply_step"));
                                       board.setReply_level(rs.getInt("reply_level"));
 
                                        return board;
                                 }
                           });
             //  조회수 1증가
             this.updateReadCount(new Integer(boardDTO.getSeq()).toString());
 
             return boardDTO;
       }
 
       // 읽은 글의 조회수를 1증가
       public int updateReadCount(String seq) throws DataAccessException {
             String sql = "update board set readcount = nvl(readcount,0) + 1 where seq = ?";
             Object[] obj = { seq };
 
             return jdbcTemplate.update(sql, obj);
       }
 
       // 커맨트 입력
       public int insertComment(CommentDTO commentDTO) throws DataAccessException  {
             String sql = "insert into comment_t(seq, name, comm) values (?, ?, ?)";
 
             Object[] obj = { commentDTO.getSeq(), // 게시글순번
                           commentDTO.getName(), // 작성자
                           commentDTO.getComment() }; // 커맨트
 
             return jdbcTemplate.update(sql, obj);
       }
 
       // 커맨트 조회
       public List<CommentDTO> commentList(String seq) throws DataAccessException  {
             String sql = "select * from comment_t where seq = ?";
 
             List<CommentDTO> commentList = jdbcTemplate.query(sql,
                           new Object[] { seq }, new RowMapper() {
                                 public Object mapRow(ResultSet rs, int rowNum)
                                              throws SQLException {
                                        CommentDTO commentDTO = new CommentDTO();
                                        commentDTO.setName(rs.getString("name"));
                                       commentDTO.setComment(rs.getString("comm"));
 
                                        return commentDTO;
                                 }
                           });
             return commentList;
       }
 
       // 글쓰기
       public int insertBoard(BoardDTO board) throws DataAccessException {
 
             String sql = "insert into board values(board_seq.nextval , ? , ? , ? , ? , ? , sysdate , 0 , board_seq.currval , 0 , 0)";
 
             if (board.getFileName() == null) {
                    Object[] obj = { board.getName(), board.getPasswd(),
                                 board.getTitle(), board.getContent(), "" };
                    return jdbcTemplate.update(sql, obj);
             } else {
                    Object[] obj = { board.getName(), board.getPasswd(),
                                 board.getTitle(), board.getContent(), board.getFileName() };
                    return jdbcTemplate.update(sql, obj);
             }
 
       }
 
}
 
 
 
3.  service  클래스를 만들어 보자.
 
소스 코드  빨강색 부분이   입력을 위해 추가된 부분
 
 
[BoardService.java]
 
 
소스 코드  빨강색 부분이   입력을 위해 추가된 부분
 
 
package onj.board.service;
 
import java.util.List;
import onj.board.model.BoardDTO;
import onj.board.model.CommentDTO;
 
/*
 * 게시판에서 구현할 기능을 인터페이스로 정의
 */
public interface BoardService {
       //게시판 리스트 보기
       public List<BoardDTO> boardList();     
      
       //게시물 미리보기
       public String preView(String seq);
      
       //게시판 본문 내용보기게시글 읽기
       public BoardDTO readContent(String seq);
      
       //커맨트 입력
       public int insertComment(CommentDTO commentDTO);
      
       //커맨트 조회
       public List<CommentDTO> commentList(String seq);
      
       //게시글 입력
       public int insertBoard(BoardDTO board);
}
 
 
 
[SpringServiceImpl.java]
 
 
package onj.board.service;
 
import java.util.List;
import onj.board.dao.BoardDAO;
import onj.board.model.BoardDTO;
import onj.board.model.CommentDTO;
 
public class BoardServiceImpl implements BoardService {
    private BoardDAO boardDAO;
   
    public void setBoardDAO(BoardDAO boardDAO) {
        this.boardDAO = boardDAO;
    }
   
    //게시물 리스트 보기
    public List<BoardDTO> boardList() {
        return boardDAO.boardList();
    }
   
    //게시물 본문 내용 미리보기
    public String preView(String seq) {
        return boardDAO.preView(seq);
    }
 
    //게시글 읽기
       public BoardDTO readContent(String seq) {
             return boardDAO.readContent(seq);
       }
 
       //커맨트 입력
       public int insertComment(CommentDTO commentDTO) {
             return boardDAO.insertComment(commentDTO);
       }
 
       //커맨트 조회
       public List<CommentDTO> commentList(String seq) {
             return boardDAO.commentList(seq);
       }   
      
       //게시글 입력
       public int insertBoard(BoardDTO board) {
             return boardDAO.insertBoard(board);
       }
}
 
 
 
4.     이번에는 컨트롤러를 수정하자.
소스 코드  빨강색 부분이   입력을 위해 추가된 부분
 
 
[BoardMultiController.java]
 
package onj.board.controller;
 
import java.util.Enumeration;
import java.util.List;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import onj.board.model.BoardDTO;
import onj.board.model.CommentDTO;
import onj.board.service.BoardService;
 
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
 
import com.oreilly.servlet.MultipartRequest;
import com.oreilly.servlet.multipart.DefaultFileRenamePolicy;
 
/*
 * MultiActionController 비슷하거나 관련있는 로직을 수행하는
 * 다수의 액션을 가지고 있을  사용하는 컨트롤러
 * 연관된 요청(Request) 묶을  용이함
 */
public class BoardMultiController extends MultiActionController {
       private BoardService boardService;
 
       public void setBoardService(BoardService boardService) {
             this.boardService = boardService;
       }
 
       // 게시판 리스트 보기페이징 기능은 구현 안함
       public ModelAndView list(HttpServletRequest req, HttpServletResponse res)
                    throws Exception {
 
             ModelAndView mv = new ModelAndView("list""list",
                           boardService.boardList());
 
             return mv;
       }
 
       // 게시글 읽기
       public ModelAndView read(HttpServletRequest req, HttpServletResponse res)
                    throws Exception {
             String seq = req.getParameter("seq");
 
             ModelAndView mav = new ModelAndView("read""read",
                           boardService.readContent(seq));
             // 해당 글의 커맨트도 함께 내려 보내자.
             mav.addObject("comments"boardService.commentList(seq));
             return mav;
 
       }
 
       // 커맨트쓰기
       public ModelAndView comment(HttpServletRequest req, HttpServletResponse res) {
 
             String seq = req.getParameter("seq");
 
             CommentDTO commentDTO = new CommentDTO();
              commentDTO.setSeq(seq);
             commentDTO.setName(req.getParameter("name"));
             commentDTO.setComment(req.getParameter("comment"));
 
             boardService.insertComment(commentDTO);
 
             return new ModelAndView("redirect:/read.html?seq=" + seq);
       }
 
// 새글(게시글입력 화면
       public ModelAndView write(HttpServletRequest req, HttpServletResponse res)
                    throws Exception {
       return new ModelAndView(“write”);"
}
 
 
 
       // 새글(게시글) DB 입력
       public ModelAndView writeok(HttpServletRequest req, HttpServletResponse res)
                    throws Exception {
 
             MultipartRequest multi = new MultipartRequest(req, "c:\\java\\project\\onjboard1\\upload",
                           5 * 1024 * 1024, "euc-kr", newDefaultFileRenamePolicy());
             Enumeration formNames = multi.getFileNames();
             String formName = (String) formNames.nextElement();
             String fileName = multi.getFilesystemName(formName);
 
             String name = multi.getParameter("name");
             String passwd = multi.getParameter("passwd");
             String title = multi.getParameter("title");
             String content = multi.getParameter("content");
 
             BoardDTO board = new BoardDTO(name, passwd, title, content, fileName);
 
             boardService.insertBoard(board);
 
             return new ModelAndView("redirect:/list.html");
       }
 
}
 
 
 
5.     리스트 보기에서 글쓰기 버튼 클릭시 호출될 write.jsp를 작성하자.
 
 
 
[write.jsp]
 
<%@ page contentType="text/html; charset=euc-kr" language="java" errorPage="" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>게시물 쓰기</title>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
<script language="javascript" type="text/javascript">
       function form_check(){
             if(document.form.name.value == ""){
                           alert("이름을 입력하세요.");
                           document.form.name.focus();
                           return false;
             }
             if(document.form.title.value == ""){
                           alert("제목을 입력하세요.");
                           document.form.title.focus();
                           return false;
             }
             if(document.form.content.value == ""){
                           alert("내용을 입력하세요.");
                           document.form.content.focus();
                           return false;
             }           
             if(document.form.passwd.value == ""){
                           alert("비밀번호를  입력하세요.");
                           document.form.passwd.focus();
                           return false;
             }
      
       document.form.submit();
       }
 
function addFileForm(){
 
  var tb1 = document.getElementById("file_table");
  if(9 >= tb1.rows.length) {
   var idx = getObj().parentElement.rowIndex + 1;
   var trow= tb1.insertRow(idx);
   var uploadOBJ="<input name='attatch' type='file' class='TEXT_FORM' id='f_id'><a onClick='javascript:addFileForm();'> 추가</a>  <a onClick='javascript:deleteRow();'>삭제</a> ";
   trow.insertCell(0).innerHTML = uploadOBJ;
  } else {
   alert("문서파일은 10 이상 접수할   없습니다.");
   return;
  }
 }
 
 function getObj()
 {
     var obj = event.srcElement
     while (obj.tagName !='TD'//TD 나올때까지의 Object추출
     {
         obj = obj.parentElement
     }
     return obj
 }
 
 function deleteRow(){
  var tb1 = document.getElementById("file_table");
 
  var idx = getObj().parentElement.rowIndex;
 
  if(tb1.rows.length-1 !=0){
   var tRow = tb1.deleteRow(idx);
  }else{
    document.getElementById('f_id').select();
       document.selection.clear();
  }
 }
</script>
 
</head>
 
<body>
<H3>오라클자바커뮤니티 프로그래밍 실무교육센터 스프링 게시판 글쓰기</H3>
<div style="width:600px;">
<div style="float:right;">
<!--  /writeok.html 요청의 경우 컨트롤로의 write 메소드가 실행되도록 매핑되어있다 -->
<form name="form" method="post" action="/onjboard1/writeok.html" enctype="multipart/form-data">
<table width="580" height="277" border="1" align="center">
  <tr>
    <td width="100"> </td>
    <td width="580"><input name="name" type="text" size="50">
      </td>
  </tr>
  <tr>
    <td> </td>
    <td>:
    <input name="title" type="text" size="50"></td>
  </tr>
  <tr align="center">
    <td colspan="2"><textarea name="content" cols="80" rows="10"></textarea></td>
  </tr>
  <tr>
    <td>   :</td>
    <td><table id="file_table">
                           <tr>
                                     <td>
                                                 <input name="attatch" type="file" class="TEXT_FORM" id="f_id"><a OnClick="javascript:addFileForm();"> 추가</a>  <a OnClick="javascript:deleteRow();">삭제</a>
                                     </td>
                       </tr>
               </table>
    </td>
  </tr>
  <tr>
    <td>비밀번호</td>
    <td>:
      <input type="password" name="passwd"></td>
  </tr>
  <tr>
    <td> </td>
    <td><input type="button" name="Submit" value="쓰기" onclick="form_check();">
      <input type="button" name="Submit2" value="취소" onclick="history.back();"></td>
  </tr>
</table>
</div>
</div>
</form>
</body>
</html>
 
6.     list.jsp  맨 아래 부분 글쓰기 버튼 링크 주소를 변경하자.
 
 
[list.jsp]
 
<%@ page contentType="text/html; charset=euc-kr" language="java" errorPage="" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>오라클자바커뮤니티 프로그래밍 실무학원</title>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
<style type="text/css">
       #layer1{
             position:absolute;
             padding:5px;
             filter:alpha(opacity=50);
             width:250pxheight:150px;
             background-color:white;
             border:2px #000000 dotted;
             visibility:hidden;
       }
</style>
<script language="javascript" type="text/javascript" src="/onjboard1/js/createXMLHttpRequest.js"></script>
<script type="text/javascript">
       var xmlHttp;
       var xmlDoc;
       var message;
      
       function contentprev(seq){
            
             var url = "preView?seq="+seq;  //미리보기 서블릿 호출
             xmlHttp = createXMLHttpRequest();
             xmlHttp.onreadystatechange = handleStateChange;
             xmlHttp.open("get" , url , true);
             xmlHttp.send(null);
       }
      
       function handleStateChange(){
             if(xmlHttp.readyState == 4){
                           if(xmlHttp.status == 200){
                                        xmlDoc = xmlHttp.responseText;
                                       document.getElementById("layer1").innerHTML = xmlDoc;
                           }
             }
       }
 
       function showlayer(id){   
             if(document.all)
                    document.all[id].style.visibility="visible";
             else if(document.layers)
                    document.layers[id].style.visibility="visible";            
       }
       function hidelayer(id){   
             if(document.all)
                    document.all[id].style.visibility="hidden";
             else if(document.layers)
                    document.layers[id].style.visibility="hidden";      
       }
    function movetip() {
        layer1.style.pixelTop=event.y+document.body.scrollTop+10;
        layer1.style.pixelLeft=event.x+document.body.scrollLeft+10;
    }
    document.onmousemove=movetip;              
</script>
</head>
<body>
<div id="layer1">
             게시물 본문 미리 보기
</div>
<div style="width:500px;">
<div style="float:right;">
<H3>오라클자바커뮤니티 프로그래밍 실무교육센터 스프링 게시판</H3>
<h5> ${list.size()}</h5>
<table width="600" border="1" align="left">
  <tr align="left">
    <td width="10%" align="center">번호</td>
    <td width="40%" align="center">제목</td>
    <td width="20%" align="center">이름</td>
    <td width="20%" align="center">날짜</td>
    <td width="10%" align="center">조회</td>
  </tr>
              <!-- list 가져와서 board 명명    만큼 반복 -->
             <c:forEach var="board" items="${list}">      
  <tr>
    <td align="center">
                    <c:if test="${board.reply_step == 0}">
                                 ${board.seq}
                    </c:if>
                    <c:if test="${board.reply_step != 0}">
                                  
                    </c:if>                   
    </td>
    <td>      <!-- 게시물은 덧글에 따른 번호와 덧글 존재 유무로 정렬됨 -->
                    <c:choose>                
                           <c:when test="${board.reply_step != 0}"><!-- 게시글이 덧글일 경우 -->
                                 <c:forEach var="i" begin="1"end="${board.reply_level}" step="1"><!-- 레벨의 수만큼 글을 뒤로 민다 -->
                                          
                                 </c:forEach>
                                        <a href="read.html?seq=${board.seq}" onmouseover="contentprev('${board.seq}');showlayer('layer1');" onmouseout="hidelayer('layer1');">${board.title}</a>
                                        <!-- 마우스를 올리면 게시물 번호에 따른showlayer(게시물 미리보기 ) 실행됨 -->
                           </c:when>
                           <c:when test="${board.reply_step == 0}">
                                        <a href="read.html?seq=${board.seq}" onmouseover="contentprev('${board.seq}');showlayer('layer1');" onmouseout="hidelayer('layer1');">${board.title}</a>                    
                           </c:when>
                    </c:choose>
   </td>
    <td align="center">${board.name}</td>
    <td align="center">${board.regdate}</td>
    <td align="center">${board.readCount}</td>
  </tr>
             </c:forEach>
 
  <tr>
    <td align="center"><input type="button" value="글쓰기" onclick="location.href='write.html'"></td>
    <td> </td>
    <td> </td>
    <td> </td>
    <td> </td>
  </tr>
</table>
</div>
</div>
</body>
</html>
 
 
7.     action-servlet.xml을 수정하자.
 
소스 코드  빨강색 부분이 커멘트 조회입력 기능을 위해 추가된 부분
 
 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
    "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
 
       <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
             destroy-method="close">
             <property name="driverClassName">
                    <value>oracle.jdbc.driver.OracleDriver</value>
             </property>
             <property name="url">
                    <value>jdbc:oracle:thin:@127.0.0.1:1521:onj</value>
             </property>
             <property name="username">
                    <value>scott</value>
             </property>
             <property name="password">
                    <value>tiger</value>
             </property>
       </bean>
 
       <!-- 넘어오는 URL 따라 컨트롤러에서 실행될 메소드 매핑 -->
       <!-- PropertiesMethodNameResolver prop key 넘어오는 url 대해 실행할 컨트롤러의 메소드
             정의 -->
       <bean id="userControllerMethodNameResolver"
              class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
             <property name="mappings">
                    <props>
                           <!-- list.html 요청이 오면 컨트롤러의 list 메소드 실행 -->
                           <prop key="/list.html">list</prop>
                          
                           <!-- read.html 요청이 오면 컨트롤러의 read 메소드 실행 -->
                           <prop key="/read.html">read</prop>
                          
                           <!-- comment.html 요청이 오면 컨트롤러의 comment 메소드 실행 -->
                           <prop key="/comment.html">comment</prop>
                          
                          
<!-- writeok.html 요청이 오면 실행 -->
                           <prop key="/writeok.html">writeok</prop>
      
<!-- write.html 요청이 오면 메소드 실행 -->
                           <prop key="/write.html">write</prop>    
                          
                    </props>
             </property>
       </bean>
 
       <!--  리졸버 -->
       <bean id="viewResolver"
             class="org.springframework.web.servlet.view.InternalResourceViewResolver">
             <property name="prefix">
                    <value>/jsp/</value>
             </property>
             <property name="suffix">
                    <value>.jsp</value>
             </property>
       </bean>
 
       <!-- 컨트롤러 매핑 -->
       <bean name="/list.html /read.html /comment.html /write.html /writeok.html" class="onj.board.controller.BoardMultiController">
             <property name="methodNameResolver">
                    <ref local="userControllerMethodNameResolver" />
             </property>
             <property name="boardService">
                    <ref bean="boardService" />
             </property>
       </bean>
      
</beans>
 
 
 
실행결과 및 현재까지 만들어진 이클립스 구조
(게시판 리스트보기 + 게시물 본문내용 미리 보기 + 게시글 상세보기 + 커멘트기능 + 글쓰기)
 
:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
 
 
 
 
 
 
 
 






[write.jsp:최재명]
 
<%@ page contentType="text/html; charset=euc-kr" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>게시물 쓰기</title>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
<script type="text/javascript" src="/onjboard/js/jquery-1.6.4.js"></script>
<script language="javascript" type="text/javascript">
$(document).ready(function() {
 //add more file components if Add is clicked
    $('#addFile').click(function() {
     var fileIndex = $('#fileview tr').children().length;     
     $('#fileview').append(
      '<tr><td>'+
         '   <input type="file" name="files['+ fileIndex +']" />'+
         '</td></tr>');
    });    
});
function form_check(){
if(document.form.name.value == ""){
alert("이름을 입력하세요.");
document.form.name.focus();
return false;
}
if(document.form.title.value == ""){
alert("제목을 입력하세요.");
document.form.title.focus();
return false;
}
if(document.form.content.value == ""){
alert("내용을 입력하세요.");
document.form.content.focus();
return false;
}
if(document.form.passwd.value == ""){
alert("비밀번호를 입력하세요.");
document.form.passwd.focus();
return false;
}
document.form.submit();
}
function getObj()
{
var obj = event.srcElement
while (obj.tagName !='TD') //TD가 나올때까지의 Object추출
{
obj = obj.parentElement
}
return obj
}
function deleteRow(){
var tb1 = document.getElementById("file_table");
var idx = getObj().parentElement.rowIndex;
if(tb1.rows.length-1 !=0){
var tRow = tb1.deleteRow(idx);
}else{
document.getElementById('f_id').select();
document.selection.clear();
}
}
</script>
</head>
<body>
<H3>오라클자바커뮤니티 프로그래밍 실무교육센터 스프링 게시판 글쓰기</H3>
<div style="width:600px;">
<div style="float:right;">
<!-- /writeok.html 요청의 경우 컨트롤로의 write 메소드가 실행되도록 매핑되어있다 -->
<form:form method="POST" action="/onjboard/writeOk.html" name="form"
 modelAttribute="uploadFile" enctype="multipart/form-data">
 
<table width="580" height="277" border="1" align="center">
 <tr>
  <td width="100">* 이 름</td>
  <td width="580">
   : <input name="name" type="text" size="50">
  </td>
 </tr>
 <tr>
  <td>* 제 목</td>
  <td>
   : <input name="title" type="text" size="50">
  </td>
 </tr>
 <tr align="center">
  <td colspan="2">
   <textarea name="content" cols="80" rows="10"></textarea>
  </td>
 </tr>
 <tr>
  <td>* 비밀번호</td>
  <td>
   : <input type="password" name="passwd">
  </td>
 </tr>
 <tr>
  <td>* 첨부파일</td>
  <td>
   <table id="fileview">
          <tr>
              <td><input name="files[0]" type="file" /></td>
          </tr>
          <!-- tr>
              <td><input name="files[1]" type="file" /></td>
          </tr-->
      </table>
     </td>
 </tr>
 <!-- tr>
  <td>
   <input id="addFile" type="button" value="File Add" />
  </td>
  <td></td>
 </tr-->
 <tr>
  <td>&nbsp;</td>
  <td>
   <input type="button" name="Submit" value="쓰기" onclick="form_check();">
   <input type="button" name="Submit2" value="취소" onclick="history.back();">
  </td>
 </tr>
</table>
</div>
</div>
</form:form>
</body>
</html>




오라클자바커뮤니티교육센터, 개발자전문교육, 개인80%환급
www.oraclejavacommunity.com


평일주간(9:30~18:10) 개강
(7/07)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍
(7/07)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(7/07)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지 
(7/07)[채용예정교육]오라클자바개발잘하는신입뽑기프로젝트,교육전취업확정
(7/14)[기업100%환급]SQL기초에서 Schema Object까지
(7/14)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(7/14)[기업100%환급]안드로이드개발자과정

평일야간(19:00~21:50) 개강
(7/01)닷넷(C#,Network,ADO.NET,ASP.NET)마스터과정
(7/02)Spring3.X, MyBatis, Hibernate실무과정
(7/03)웹퍼블리싱 마스터
(7/10)JAVA,Network&WEB&Framework(자바기초에서웹스프링까지)
(7/15)SQL기초에서실무까지
(7/15)안드로이드개발자과정
(7/15)MyBatis3.X, Hibernate4.X ORM실무과정
(7/22)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지

주말(10:00~17:50) 개강
(7/05)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(7/05)SQL초보에서 Schema Object까지
(7/12)MyBatis3.X, Hibernate4.X ORM실무과정
(7/12)개발자를위한PLSQL,SQL튜닝,힌트
(7/13)C#,ASP.NET마스터
(7/19)Spring3.X, MyBatis, Hibernate실무과정
(7/19)웹퍼블리싱 마스터
(7/19)안드로이드개발자과정

주말저녁(18:30~22:20) 개강
(7/19)JAVA,Network&WEB&Framework
(8/09)SQL기초에서실무까지