[프로그래밍기초] break문

 

break문은 if,switch,for,while문등에서
break문을 만나면 바로 빠져나가는 명령문 입니다.

즉 1에서 7부터 출력하게 프로그래밍 했는데 7일때
break문을 실행되도록 했다면 7부터는 출력이 되지 않습니다.
이유는 break문은 수행중이던 조건문이나 반복문을 빠져나가버리기 때문이죠.
위의 예제에서 continue를 break로 변경하여 결과를 확인해 보도록 하겠습니다.

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>프로그래밍</title>
<style type="text/css">
</style>
<script type="text/javascript" src="http://code.jquery.com/jquery-2.1.0.min.js" ></script>
<script type="text/javascript">
  for(a = 1; a <= 10; a++){
    if(a == 7){
      break;
    }
    document.write(a+"<br />");
  }
</script>
</head>
<body>
</body>
</html>


위의 결과에서 보면 7부터는 출력이 되지 않는걸 볼 수 있습니다.
7을 출력할 차례에 브레이크문을 만났기 때문입니다.

 

 

위 결과값은 1 2 3 4 5 6

7을 출력할 차례에 브레이크문을 만났기 때문입니다

위 내용을 천천히 한번 더 따라해보세요 자주쓰이는 구문입니다. 수고하셨네요 !

 

직장을 다니면서 투잡으로 하셔도 월급만큼 수익을 받을 수 있는 곳을
소개합니다. 제가 하고 있으니까요 한 번 도전해 보세요

 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

continue문

어떠한 행위를 하다가 continue문을 만나면 해야할 명령문을 실행하지 않고
그 다음 명령문을 실행하는 명령문 입니다.

한번 보도록 할까요?

다음은 for문에서 1부터 10까지 출력을 하고 있는데 7일 출력될 순서에
continue문을 만나서 7이 출력이 되지 않고 8가 출력이 되는 상황입니다.
 아쪽은  if문을 사용했습니다.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>프로그래밍</title>
<style type="text/css">
</style>
<script type="text/javascript" src="http://code.jquery.com/jquery-2.1.0.min.js" ></script>
<script type="text/javascript">
  for(a = 1; a <= 10; a++){
    if(a == 7){
      continue;
    }
    document.write(a+"<br />");
  }
</script>
</head>
<body>
</body>
</html>


위의 소스의 결과를 보면 7이 나올 차례에
if문을 사용하여a가7일때 continue;
명령문 실행하도록 하였으므로 7이 출력되지 않고
그 다음으로 넘어갔습니다.

 

 

 

위 코드값의 결과는  1,2,3,4,5,6 8,9,10

 

 

직장을 다니면서 투잡(알바/부업)으로 월급 많큼 수익을 얻고 싶으시다면  

아래 접속하셔서 상담받아 보실 수 있습니다. (믿음의 재택부업회사)

(회원가입을 하시면 편리한 시간에 자세히 설명해드립니다)

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

for문 속의 for문 = 이중 포문

 

이중포문이라 하면 괜히 어렵게 들릴수도 있지만 그냥 포문 안에서 또 포문을 선언하는 것입니다. ^^

즉 for문의 조건이 만족하여 명령문을 실행하는데 그 명령문이 for문 인거죠^^

구조는 다음과 같습니다.

이중포문 구조
for(변수 선언 및 초기값 설정; 조건식; 증감식){
  for(변수 선언 및 초기값 설정; 조건식; 증감식){
  }
}


첫 번째 포문에서 조건에 맞으면 두번째 포문이 작동하며 두번째 포문이 조건을 만족하는 동안 두번째 조건의 명령문을 실행하며 두번째 포문의 조건이 끝나면 다시 첫번째 포문으로 돌아가서 명령을 실행하여 두번째 포문이 실행을 합니다. .

이해 가능한 간단한 소스를 작성해보겠습니다.
    for(a = 1; a<= 3; a++){
        document.write("<br />"+a+"첫번째 포문에 의해 출력 되었습니다. <br /><br />");
        for(b = 1; b<=3;b++){
            document.write(b+"두번째 포문에 의해 출력 되었습니다. <br />");
        }
    }


위의 소스에서 첫 번째 for문의 a가 1이고, 조건식에 의해 a가 3보다 같거나 작으면, 실행합니다.

그럼 지금 a가 1이기 때문에 현재 조건에 만족을 하고 있으므로  실행 합니다.

.

두번째 포문에 보면 b는1이고 b가3보다 작을 동안 이라고 쓰여져 있습니다.

그러므로 조건에 만족하므로  실행합니다.

 

그 다음 실행 해야 하는 것은 증감식 입니다. b++를 실행하면

b는 1에서 2가 되어 다시 두번째 포문에 의해 출력 되었습니다.라는 문구를 출력 하며 증감식에 의해 b는 3이 됩니다.

조건은 3보다 같거나 작을 동안 이기 때문에 3은 3과 같거나 작으므로

다시 두번째 포문에 의해 출력 되었습니다.라는 문구를 출력합니다.

다시 증감식에 의해서 b는 3에서 4가 됩니다. 조건에 만족하지 않으므로 수행중이던for문에서 빠져 나가게 됩니다.

그럼 첫번째 포문의 a가 1일때의 실행문을 모두 실행을 한것 입니다.

그러므로 첫번째 실행문을 실행했으므로 증감식 a++가 대입 됩니다. 그럼 a값이 1이기 때문에 2로 변환되고

첫번째 포문의 조건인 a가 3보다 작거나 같으면에 만족하므로 다시 두번째 포문이 작동을 하게 됩니다.

그렇게 위와 같이 두번째 포문은 또 다시 처음부터 작동하여 b의 값은 다시 1이 되며

출력문을 출력 하고 증감식 의해 b는 2가 되고 조건에 참이므로 실행문을 실행 후 증감식에 의해 3이 되고

조건에 만족하므로 출력문을 출력하고 증감식에 의해 다시 4가 되어서
 조건에 만족하지 않으므로 두번째 포문에서 빠져 나가게 되고

첫번째 조건문으로 돌아오게 되며 첫번째 포문에서 a 는 2이기 때문에 증감식에 의해서 a는 3이 되고 3이 된후 조건에 만족하므로

실행문을 실행하여 두번째 포문을 다시 작동하게 됩니다.


이제 실제 소스를 타이핑해서 결과물을 봅시다.
<!DOCTYPE html>
<html>
<head>
<title> .</title>
<style type="text/css">
</style>
<script type="text/javascript">
for(a = 1; a<= 3; a++){
  document.write("<br />"+a+"저는 첫번째 포문에 의해 출력 되었습니다. <br  /><br />");
  for(b = 1; b<=3;b++){
    document.write(b+"저는 두번째 포문에 의해 출력 되었습니다. <br />");
  }
}
</script>
</head>
<body>
</body>
</html>

위 소스를 실행해 보시기 바랍니다.

그럼 이중 포문을 응용하는 구구단 소스가 있는데요. 한번 보면서 이해해 보시기 바랍니다.

이문 포문을 이용한 구구단을 만들어 보면

 

위 소스를 실행하시면

구구단이 출력됨을 보시게 될 것입니다.

 

 

직장을 다니면서 투잡(알바/부업)으로 월급 많큼 수익을 얻고 싶으시다면  

아래 접속하셔서 상담받아 보실 수 있습니다. (믿음의 재택부업회사)

(회원가입을 하시면 편리한 시간에 자세히 설명해드립니다)

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

 

프로그래밍기초 /  반복문 / for 문 연습

 

이번 시간에는 for 문에 대해서 학습합니다.

for문도 while문처럼 반복문입니다.

for문은 조건식 안에서 (변수 선언 및 초기값 설정; 조건식; 증감식)으로 이루어져 있으며
초기값이 조건식에 참인 동안 명령문을 실행 합니다.

구조는 다음과 같습니다.

for문의 구조
for(변수 선언 초기값 설정;조건식;증감식){
  조건이 참인 동안 실행할 명령문;
}


그럼 실제 소스로 구조를 보겠습니다. 다음 소스는 1부터 10까지를 출력하는 것입니다.
for(a = 1; a <= 10; a++){
  document.write(a);
}


for문의 실행 순서

1. (a = 1) 변수 선언 및 초기값 설정, 변수 a 선언 및 값을 1로 선언.

2. (a <= 10) 조건 실행, a가 10과 같거나 작을 동안에 명령문을 실행

3. (document.write(a)) 2번에서 명령문을 실행 하므로 document.write(a)에 의해 화면에 1출력

4. (a++) 증감식 실행 하므로 a값은 1에서 2로 변경

5. (a <= 10) 조건 실행, a가 10과 같거나 작을 동안에 명령문을 실행

6. (document.write(a)) 2번에서 명령문을 실행 하므로 document.write(a)에 의해 화면에 2출력

7. (a++) 증감식 실행 하므로 a값은 2에서 3로 변경

8. (a <= 10) 조건 실행, a가 10과 같거나 작을 동안에 명령문을 실행

6. (document.write(a)) 2번에서 명령문을 실행 하므로 document.write(a)에 의해 화면에 3출력

7. (a++) 증감식 실행 하므로 a값은 3에서 4로 변경


(a++) 증감식 실행 하므로 a값은 9에서 10로 변경

10 이므로 이제 for문에서 빠져 나옴.


아래 예분을 주의깊게 보시기 바랍니다.

 

 

위 결과값은 12345678910

 

 

직장을 다니면서 투잡(알바/부업)으로 월급 많큼 수익을 얻고 싶으시다면  

아래 접속하셔서 상담받아 보실 수 있습니다. (믿음의 재택부업회사)

(회원가입을 하시면 편리한 시간에 자세히 설명해드립니다)

 

 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

오늘은 어제 배운 while문을 응용해서 이번엔 do~while문에 대해서 학습합니다.

 

do ~ while

 

위의 while문에서는 조건식이 참이면 명령문들을 실행했는데요 do ~ while문은 일단 한번 실행을 한 후 조건문 검사후 참이면 명령문을 실행하고 아니면 빠져 나온답니다. 일단 구조를 한번 살펴 봅시다.

 

do ~ while 문의 구조

 

do{ 조건식이 참이면 실행할 명령은 여기에 적습니다.

}

while(여기에는 조건식을 적습니다.)

 

그럼 한번 소스를 통해서 do ~ while문이 무엇인지 이해해 보도록 합시다.

a = 1;

do{

document.write(a);

}

while(a==10)

 

위의 소스를 보면은 a=1입니다. 조건식을 보면 1==10이죠 즉 a10과 같을 동안 반복분을 실행하는거죠.

 

그런데 즉 조건식에서는 1== 10이 동일하지 않으므로 반복문을 실행하지 않죠. 하지만 do문에 있는 실행문을 한번은 실행을 한 후에 조건식을 검사를 하기 때문에 한번은 실행을 합니다.

 

, a값인 1이 한번은 출력이 된 후에 조건식을 검사후에 조건에 만족하지 않으면 do문 안에 명령문을 실행하지 않습니다.

 

그럼 전체 소스를 보면서 테스트 해보시기 바랍니다.

 

<!DOCTYPE html>

<html>

<head>

<title> david's Web Laboratory</title>

<style type="text/css">

</style>

<script type="text/javascript">

a = 1;

do{

document.write(a);

a++;

}

while(a==10)

</script>

</head>

<body>

</body>

</html>

 

위 결과값은

1

 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

오늘은 while문 즉 반복문에 대해서 학습합니다.

 

반복문은 어떠한 값이 조건에 의해 그 조건에 만족하는 동안 계속 실행할 수 있습니다.

예를 들어 1200회 화면에 출력을 해야 한다면

1을 직접 200번 타이핑 하지 않고 반복문을 사용해 200회 출력할 수 있게 할 때 사용합니다.

 

사용법은 아래와 같습니다.

while(조건){

조건에 만족할 동안 실행할 명령문

}

 

 

예를 들어서 1부터 10까지 출력하는 것을 while문으로 만들어 본다면 다음과 같습니다

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8" />

<title>자바스크립트</title>

<script>

a = 1;

while(a <= 10){

document.write(a);

a++;

}

</script>

</head>

<body>

</body>

</html>

 

위의 소스를 보면 a의 값을 1로 선언 후 조건에는 a10보다 작거나 같다는 조건을

나타내며 그리고 그동안에 a의 값을 출력하는 명령문 그리고 a의 값을 1씩 올리는 a++가 있습니다.

 

위의 소스에 a++가 없다면 a가 값을 증가하면서 10에 도달하는 기능이 없으므로 무한루프에 걸리게 됩니다. 위의 소스를 실행할 때 한번 테스트 해보시기 바랍니다.

 

다음은 1부터 10까지의 누적합을 구하는 소스입니다. 알고리즘을 파악해 보세요

프로그램 면접시험 대 의외로 이런 간단한 문제를 묻는 곳도 있습니다.

 

 

결과값은

누적합1
누적합3
누적합6
누적합10
누적합15
누적합21
누적합28
누적합36
누적합45
누적합55

 

오늘 배운 반복문은 자주 사용하게 되기 때문에 꼭 기억해 주시기 바래요

 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

 

 

DataBase 란?

데이터베이스는 정보를 저장할 때 사용합니다. 회원가입을 할 때 우리가 사용하는 정보들이 데이터베이스에 저장이 됩니다.
데이터베이스는 프로그래밍 언어가 아니라 하나의 프로그램이에요.

그리고 데이터베이스에 데이터를 저장하거나 불러오거나 수정 삭제등은 데이터베이스의 명령문을 입력해서 처리합니다.

MySQL챕터에서는 간단히 이러한 데이터를 추가 수정 삭제하는 방법에 대해서 학습하고

PHP챕터에서 Database와 연동해서 회원가입 정보등을 입력해 볼거에요.

그럴려면 우선 MySQL을 알아야겠죠?

데이터 베이스는 간단히 말하면 가계부정리,

학교다닐때 교실에서 보던 시간표를 떠올리면 쉽게 알 수 있습니다.
월요일 1교시에는 어떤 수업인지 금요일 3교시는 어떤 수업인지 알 수 있죠. 데이터베이스도 이와 마찬가지 입니다.
다음의 표를 보면 좀 더 쉽게 알 수 있습니다.

학번 성명 신청과목

많은 학생을 등록시키고 그학생의 이름과 신청과목  , 점수

그때 그때 필요할 때 정보를 불어와서 볼 수 있도록 하는 것들을 할 수 있도록 하는 것이

데이터베이스입니다.
그래서

 학번, 성명, 신청과목과 같은 항목을 필드라고 불러요. 그

리고 그아래의 자료들은 레코드라고 부릅니다.

그럼 이제 데이터를 어떻게 집어 넣는지 어떻게 수정하는지 어떻게 삭제하는지

어떻게 원하는 데이터를 손에 넣을 수 있는지 검색은 어떻게 하는지 등에 대해서 알아볼게요.

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

27일차 수업( JSP servlet 및 환경설치 )

 

CGI ( common Gateway Interface )
==> 동적으로 실행되어 클라이언트의 다양한 요구사항을 만족 시킬수 있는 개념

==> CGI를 구체화한 프로그램 언어 : JSP, Servlet, PHP, ASP

 

<JSP/Servlet 은 자바 기반>
따라서 JVM이 필요하다. JVM포함한 특별한 컨테이너(container)가 필요하다.

가장 많이 사용하는 tomcat 컨테이너 사용

 

* 환경

클라이언트              서버
: 웹브라우저            : 웹서버 ( 아파치, IIS )
                               ==> HTML를 서비스

 

* 환경2

클라이언트              서버
: 웹브라우저            : 웹서버 ( 아파치, IIS )
                             : 웹 컨테이너(tomcat)
                             ==> 웹 컨테이너가 웹 서버기능을 가지고 있기때문에

 

 

환경설정

가. JDK 설치
나. Eclipse설치 

다. Tomcat 설치
: http://jakarta.apache.org -> zip 파일로된 tomcat 7 파일을 받는다.

 

C 밑에 아무 파일(영어이름)이나 만들고 그안에 넣고 압축을풀면 준비 끝!

그리고 그안에 압축을 풀어준다.

 

서블릿(servlet)

: *.java 

작성방법

가. extends HttpServlet 상속받아야함
나. main 메소드 대신에 doGet(기본) 또는 doPost 메소드를 구현해야 된다.

 

ex) com.test.HelloServlet
클라이언트의 요청방법
http://localhost:8090/HelloTest/servlet/com.test.HelloServlet
--> 길고 보안에 취약함
다. 실행결과는 항상 html로 작성한다.
라. html를 클라이언트로 응답한다.

 

 

서블릿의 매핑방법 2가지!

 

a. web.xml
==> 배치지시자( Deployment Descriptor : DD )
 웹 어플리케이션의 환경정보를 저장한다.
==> xml로 구성되어 있다.
==> Servlet2.5, jsp2.1 (버전에서 주로 사용하던 방법)

 

사용방법>>>>

WEB-INF 에서 web.xml 소스에 아래와 같이 수정

 

<servrlet>

<servlet-name>서블릿별명</servlet-name>

<servlet-class>패키지를 포함한 서블릿명</servlet-class>

</servrlet>

<servlet-mapping>

<servlet-name>서블릿별명</servlet-name>

<url-pattern>매핑명</url-pattern>

</servlet-mapping>

 

b. annotation
==> web.xml에 설정 대신에 사용하는 방법
 자바코드내에서 설정하는 방법이다.
 Servlet3.0, jsp2.2 (Tomcat 7 에서만 동작) 보전에 사용 가능한 방법

 

사용방법 >>>>

@WebServlet("/Employee")

 

===부충수업 ========

 

  Servlet/JSP 과정 정리

1. 동작환경?

 : Client/Server 환경

클라이언트 A      가. 요청  서버
: 웹브라우저 ------------------->   나. 요청처리
     다. 결과(html형식)
            <-------------------
  라. 응답
서버는 html을 만드는거고, 클라이언트가 실행한다.

* 클라이언트에서 실행되는 프로그램 언어(컴포넌트)종류?
- html
- 자바스크립트

 

* 서버에서 실행되는 웹 컴포넌트 종류 3가지?

가. 정적 웹 컴포넌트
- html
==> 한번 작성하면 결과가 항상 동일하다.
    현재시간을 얻을 수가 없다.
 따라서 다양한 클라이언트 요구를 만족시킬 수 없다.

나. 동적 웹 컴포넌트
- JSP
- Servlet
==> 프로그램으로 실행된다.
   따라서 실행결과가 동적으로 다양하다.
클라이언트의 다양한 요규를 처리할 수 있다.

* CGI ( common Gateway Interface )
==> 동적으로 실행되어 클라이언트의 다양한 요구사항을 만족 시킬수 있는 개념

==> CGI를 구체화한 프로그램 언어 : JSP, Servlet, PHP, ASP

- JSP/Servlet 은 자바 기반이다.
따라서 JVM이 필요하다. JVM포함한 특별한 컨테이너(container)가 필요하다. 가장 많이 사용하는 tomcat 컨테이너 사용.

* 환경

클라이언트     서버
: 웹브라우저    : 웹서버 ( 아파치, IIS )
     ==> HTML를 서비스

* 환경2

클라이언트     서버
: 웹브라우저    : 웹서버 ( 아파치, IIS )
     : 웹 컨테이너(tomcat)
     ==> 웹 컨테이너가 웹 서버기능을 가지고 있기       때문에 ==> JSP, servlet 실행

 

2. 웹 컨테이너
: tomcat
: http://jakarta.apache.org 에서 무료 다운.

3. 환경설정
가. JDK 설치
나. Eclipse설치


다. Tomcat 설치
: http://jakarta.apache.org

*자바 개발 3가지 플랫폼
- Java SE ( Java Standard Edition )
==> 일반 PC에서 실행된는 프로그램 개발용.
==> 여지껏 우리가 배웠던 환경
==> 필요환경
 :: JDK 만 설치하면 된다.
 :: eclipse

- Java Enterprise Edition)
==> Enterprise 환경에서 실행되는 프로그램 개발용.
==> 필요 환경
:: JDK, Tomcat 설치하면 된다.
:: eclipse
:: 클라이언트는 웹 브라우저 필요.


- Java ME( Java Micro Edition )
==> 핸드폰, PDA같은 소규모 장치에서 실행되는 프로그램 개발용.
: 웹브라우저 ------------------->

     <-------------------

==> 이클립스와 톰켓 연동
가. Java EE 퍼스펙티브 선택

4. web application
: context 라고 한다.
: 물리적인 위치는 C:\tomcat7\apache-tomcat-7.0.42\webapps 폴더내에 있는 각각의 폴더를 지칭힌다.
ex) ROOT 컨텍스트 ( ROOT 웹 어플리케이션)이라고 한다.
: 용도?
==> 클라이언트가 요청했을 때, 컨테이너가 요청한 웹 컴포넌트를 찾는 디렉토리이다.

: 클라이언트 요청 처리방법?
http://서버아이피:포트번호/컨텍스트명/자원 <-- webapps에 있는 파일명을 컨텍스트라함
==> ROOT 컨텍스트는 생략한다.

ex) http://localhost:8090/examples/index.html
 http://localhost:8090/examples/test.jsp
http://localhost:8090/examples/servlet/com.test.HelloServelt

==> JSP와 HTML은 요청방법은 같다.
 서블릿은
http://서버아이피:포트번호/컨텍스트명/servlet/패키지명 포함한 클래스

: 컨텍스트 구조?
==> webapps 폴더에 저장되며 반드시 다음 구조를 갖는다.

webapps - 컨텍스트명 - WEB-INF  - classes
           - lib
    - web.xml

반드시 이 구조를 가져야한다. 이 구조가 아니면 컨테이너가 찾지 못한다.

5. 사용자 정의 context(web Application ) 생성

가. Eclipse에서 File > New > Dynamic Web Project 선택

6. 3가지 컴포넌트
가. html
==> www.w3schools.com 참조

나. JSP

다. 서블릿

7. 서블릿 ( servlet )

: *.java
: 작성방법

가. extends HttpServlet 상속받아야함
나. main 메소드 대신에 doGet(기본) 또는 doPost 메소드를 구현해야 된다.

 ex) com.test.HelloServlet
클라이언트의 요청방법
http://localhost:8090/HelloTest/servlet/com.test.HelloServlet
--> 길고 보안에 취약함
다. 실행결과는 항상 html로 작성한다.
라. html를 클라이언트로 응답한다.

* 아키텍쳐
 가. 요청     서버
http://localhost:8090/HelloTest/servlet/com.test.HelloServlet
브라우저 -----------------------------> com.test.Helloservlet
      나. 실행(프로그램)
      다. 결과(html형식) 
 <-----------------------------
 라. 응답

마. html을 보여준다.
* 서블릿 맵핑( Servlet mapping) --> 취약한 보안을 방지하는 방법
- 요청값을 짧게 줄이는 작업이다.
 이유는 요청값이 길고 보안에 취약하기 때문이다.
http://localhost:8090/HelloTest/servlet/com.test.HelloServlet
==?http://localhost:8090/HelloTest/servlet/xxx <- 의미없는 이름으로 지정

==> 서블릿 맵핑 정보 저장하는 방법 2가지

a. web.xml
==> 배치지시자( Deployment Descriptor : DD )
 웹 어플리케이션의 환경정보를 저장한다.
==> xml로 구성되어 있다.
==> Servlet2.5, jsp2.1 (버전에서 주로 사용하던 방법)

b. annotation
==> web.xml에 설정 대신에 사용하는 방법
 자바코드내에서 설정하는 방법이다.
 Servlet3.0, jsp2.2 (Tomcat 7 에서만 동작) 보전에 사용 가능한 방법

8. XML
 : eXtensible Markup Language ( XML )
=> 확장 가능한 마크업 언어
: 특징
- html 처럼 모두 태그(엘리먼트:element, 노드: node)로 구성됨.
시작태그
몸체
끝태그

예> <html> ==> 시작태그
    ==> 몸체 
    </html> ==> 끝태그

* 몸체가 없는 태그 ( empty 태그 )
예> <person> 홍길동 </person>
    <person></person> --> 빈태그
                      --> <person />
- 자바처럼 대소문자를 구별한다.
- html은 고정된 태그명이 있는데, xml은 마음대로 태그명을 추가할 수 있다. ( 가장 큰 특징 )
- xml을 작성하는 이유?
  ==> 데이터 저장
  예>
     <person>
 <name>홍길동</name>
  <age>29</age>
 <address>서울</address>
     </person>

  홍길동,20,서울

A회사  B회사
:win  :unix
:hwp         :word

    XML
- xml은 플랫폼(운영체제,프로그램 언어...)에 독립적이다.
==> xml 태그정보와 관련된 약속이 필요하다.
 ( 태그명, 갯수, 순서, 속성명, 속성값종류,...)
==> 2가지 약속문서로 작성가능하다.
- DTD (Data Type Definition)
-> *.dtd
- schema
-> *.xsd
======> xml 파일에서 dtd, xsd 의 문법을 따르는지 지정한다.

- xml은 태그가 계층구조로 되어 있다.

예>
     <person>
 <name>홍길동</name>
  <age>29</age>
 <address>서울</address>
     </person>

       person  => 루트태그(root 태그) (단 하나만 가질수있다.)
   |
   name  age   address
    |     |       |
  홍길동 20     서울

- 속성을 가질수 있다. 시작태그에 지정
  (속성명 = "값" , 속성명 = "값")
  반드시 속성값에는 " 또는 ' 를 사용해야 된다.
예> <person name="홍길동" age='20' />


=> 위 문법을 따르는 xml 파일을 well-formed 문서라고 한다.

=> dtd, schema 약속을 따르는 xml 파일을 valid 문서라고 한다.

가. 태그명 지정
< !ELEMENT 태그명 ( 자식태그, 자식태그2, ...) >
C:\tomcat7\apache-tomcat-7.0.42\lib 이 경로로 들어가서
servlet-api.jar 에디터 플러스로 연다.
//53번째 줄의 내용이다. (dtd파일)
<!ELEMENT web-app (icon?, display-name?, description?, distributable?,
context-param*, filter*, filter-mapping*, listener*, servlet*,
servlet-mapping*, session-config?, mime-mapping*, welcome-file-list?,
error-page*, taglib*, resource-env-ref*, resource-ref*, security-constraint*,
login-config?, security-role*, env-entry*, ejb-ref*,  ejb-local-ref*)>

나. 개수
? : 0이상
* : 1이상
 : 반드시 1

다. 속성명 지정
<!ATTLIST 속성명 타입 #IMPLIED|#REQUIRED>

: 타입은 CDATA, ID 등이 올수 있다.
: #IMPLIED은 옵션, 즉 송성을 지정안할 수 있다.
 #REQUIRED은 필수, 즉 속성이 필수사항이다.

9. web.xml
<welcome-file-list>를 에디터에서 찾는다.
<!ELEMENT welcome-file-list (welcome-file+)>
가. welcom-file-list 의 <welcom-file>
==> 맨 처음 보여주는 화면의 파일명 지정.
지정하면 브라우저에서 URL에 명시적으로 지정하지 않아도 자동으로 찾아서 보여준다.

자~~
웹.xml에 있는걸 보면
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
 
 <description>sss</description>
 
  <display-name>Test001</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>abc.html</welcome-file>
  </welcome-file-list>
</web-app>
이것은 순서대로 파일을 찾는다. 찾을 때
구지
http://localhost:8090/Test001/abc.html 을 써주지 않아도 된다.
http://localhost:8090/Test001/ 만 써도 가능하다.

xml파일이란 ~ 묶어주는 역할을 하는 것 같다.
최고 큰 녀석은 conf에  xml이다.

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
--> 여기에 지정되있으니~톰켓 메인화면이 보이는 것이다.

10. 서블릿 맵핑 설정 방법 ( 크게 두가지고 있고 둘다 먹힌다. 확인은 콘솔에서)

가. annotation 방법
 @WebServlet("/zzz") //맵핑하는것서블릿3.0에서사용하는것!!
public class HelloServlet extends HttpServlet

나. web.xml 설정 방법
<servlet>
 <servlet-name>kkkk</servlet-name>
 <servlet-class>com.test.HelloServlet</servlet-class>
 
 </servlet>
 
 <servlet-mapping>
 
 <servlet-name>kkkk</servlet-name>
 <url-pattern>/abc</url-pattern>
 
 </servlet-mapping>


11. 응답처리
  가. 요청
웹 브라우저 ------------------> 서블릿
     나. 실행
 <---------------------
 다. 응답

* 서블릿 작성 클래스 3개.
가. HttpServlet
==> 일반클래스를 서블릿으로 만들기 위해서
==> 일반클래스는 브라우저에서 요청해도 처리가 안됨.
 서블릿이어야 브라우저에서 요청할 수 있다.
==> 서블릿이 요청을 받으면 서비스 메소드 실행된다.
   ( 서비스 메소드의 종류 : doGet, doPost )
 서비스 메소드는 반드시 2가지 인자를 갖는다.
HttpServletRequest request,
 HttpServletResponse response를 갖는다.

나. HttpServletRequest
==> 클라이언트가 서버로 요청할 때 관련있는 클래스.

다. HttpServletResponse
==> 서버가 클라이언트로 응답할 때 관련있는 클래스.

* 서블릿이 응답 시 2가지 작업

가. MIME 타입지정
==> 웹 브라우저에게 응답 데이터형식을 알려줄 때 사용한다.
 ex) html, text, img, ....
==> tomcat홈>conf>web.xml 참조

response.setContentType("text/html");

나. 자바 IO 얻기

//byte
 ServletOutputStream sos = response.getOutputStream();
//char
 PrintWriter out = response.getWriter();


다. html 형식으로 출력
out.print(값);

System.out.println("WorldServlet");
  
  //응답처리 + 한글지정
  //1. MIME 타입지정
  response.setContentType("text/html;charset=EUC-KR");
  
  // 2. IO 얻기
  //byte
  //ServletOutputStream sos = response.getOutputStream();
  //char
  PrintWriter xxx = response.getWriter();
  //3.출력
  xxx.print("hello World");
  xxx.print("안녕하세요");


12. 서블릿과 DB연동
웹 브라이저 ---------> 서블릿 -------> DAO ---------> 오라클

가. 드라이버 필요
 : 클래스패스에 추가

나. DAO, DTO 패턴

 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

18일차 수업(2) ( JDBC )

 

JDBC ( Java Database Connectivity) 

자바프로그램과 데이터베이스와 연동하는 기술이다.


  
                            JDBC
 자바프로그램 <-------------> 데이터베이스

 

먼저 JDBC를 배우기전에 준비해야할 사항들이 있다.

첫째 데이터베이스 설치 및 실행여부 확인

둘째 드라이버(dirver) 확인
-> 벤더(회사)에서 만든 클래스 파일들을 의미한다.
-> 압축해서 제공한다. ( *.jar, *.zip 형식

셋째 클래스패스 ( classpath )
a. path  ==> 명령어의 경로

b. classpath 를 설정해주는 방법

클래스파일의 경로   

CLASSPATH 환경변수에 설정방법
C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib\ojdbc6_g.jar

 

또는

 

ext 폴더에 저장하는 방법
1) 이클립스의 아무 프로젝트나 하나잡고 오른쪽클릭 -> Properties 들어간다
2) JRE System Library[JavaSE-1.7] JRE인지 JDK 인지 확인하고
3) C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib\ojdbc6_g.jar 있는
   ojdbc6_g.jar 파일을 ext 폴더에 복사하여 붙여넣고 이클립스 재실행

 

여기까지가 JDBC를 사용하기위한 사전 준비!

------------------------------------------------------------------------------------

 

 

이제 javaDB를 연결하는 자바소스를 알아보겠습니다.

 

먼저 아래와 같이 설정을 해줍니다.

 

// ojdbc6_g.jar 압축파일내의 핵심 클래스
String driver = "oracle.jdbc.driver.OracelDriver";
 //서버의 ip,port번호, sid
String url = "jdbc:oracle:thin:@localhost:1521:xe";
// 사용자 계정

String userid = "scott";
 // 사용자 비번
String passwd = "tiger";

 

그리고 나서 드라이버 로딩을 합니다.!

 

Class.forName ( driver ); 

 

이것을 써주면 에러가 나니까 예외 처리를 해주어야한다!

 

그다음엔  Connection 맺기

 

import java.sql.Connection;

 Connectioncon = DriverManager.getConnection( url,userid,passwd );

 

커넥션을 맺은 후에는 Statement 생성 ( SQL 문 전송 )

Statement 종류 3가지가 있습니다.

 

1) Statement
>

delete from person where age = 10;
delete from person where age = 11;  
..
delete from person where age = 100; 

=> statement 얻기
Statement stmt = con.createStatement(); 

2) PreparedStatement (*)  제일 자주 사용!

 delete from person where age = ?;
 나중에 ? 에 값을 지정하는 방식

 => PreparedStatement 얻기
    PreparedStatement pstmt = con.PreparedStatement( sql );

 // ? 값 설정
  pstmt.setInt(1,10);

  insert into person ( num ,name, age, address)
 

3) callableStatement
  => PL/SQL 사용시

 

Statement 설정이 끝나면 SQL문 전송

- Statement 이용
: insert, delete, update ( DML 전송)
   int n = stmt.executeUpdate(sqp);
   => n 값은 적용된 레코드 갯수
   => 디버깅 가능 ( 성공실패확인 가능 )
 : select
   ResultSet rs = stmt.executeQuery(sql); 
   while(rs.next()){
 int num = rs.getInt("num");
 String name = rs.getString("name");
 int age = rs.getInt("age");
 String address = rs.getString("addresss");
 System.out.println(num+"\t"+name);
   }
 
- PreparedStatement 이용

  
마지막으로 외부자원 close !! 사용했던 자원 역순으로......

 

Connection con
Statement stmt
ResultSet rs

 

rs.close();
stmt.close();
con.close();

 

------------------------------------------------------------------------------------
JDBC 사용시 반드시 적용시키는 2가지 패턴

. DAO 패턴 ('다오'라고 읽지 말고 '디에이오'라고 읽기 )
-> Data Access Object 패턴
-> Data? (파일, 데이터베이스)


. DTO 패턴
-> Data Transfer Object 패턴
-> 여러 데이터를 한꺼번에 효과적으로 전송하기 위한 클래스.
-> Value Object(vo), domain object ,entity 라고도 한다.
-> 일반적으로 테이블 당 한개씩 생성한다.

 
블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

18일차 수업 (SQL - insert 문 ,Delete 문 )

1. 데이터 저장 ( insert 문 ) 
1) 첫번째 방법
insert into 테이블명 ( 컬럼명, 컬럼명2 )
values( 값, 값2 );

 => 컬럼명과 값이 일대일 대응 되며 지정하지 않은 컬럼에는 null값이 저장됨
---------------------------------------------------------------------

 insert into person ( num, name, age )
 values( 10, '홍길동', 20 );


 insert into person ( num, name, age, address )
 values( 11, '이순신', 44, '전라');


 insert into person ( num, name, age )
 values( 12, '유관순', 18, '서울' );

---------------------------------------------------------------------

2) 두번쨰 방법
 insert into 테이블명
 values( 값, 값2, 값3, 값4 );
=> 반드시 테이블의 모든 컬럼에 데이터 저장해야 된다. 또한 반드시 테이블의 컬럼순서대로 저장해야 된다.

---------------------------------------------------------------------

insert into person
values(15,'이순신',44,'전라');  -- 에러난다. 

insert into person
values('이순신',15,44,'전라');

---------------------------------------------------------------------

 

2. 데이터 삭제 ( DELETE )
DML이기 때문에 commit/ rollback 가능 

delete from 테이블명;

=> where 가 없기 때문에 전체 레코드가 삭제.

 

delete from 테이블명
where 조건식;

=> 조건에 일치하는 값만 삭제

 

데이터 삭제 ( truncate ) 문==> DDL 이기 때문에 rollback 불가.
  

truncate table 테이블명;

 

==> 성능은 truncate 이 좋다.

 

데이터 수정 ( updata ) 문==> DML이기 때문에 commit / rollback 가능
 
update 테이블명 set 컬럼명 = 새로운값, 컬럼명=새로운 값
=> 다 수정됨
 
update 테이블명 set 컬럼명 = 새로운값, 컬럼명=새로운 값
where 조건식;
==> 조건에 일치하는 레코드만 수정됨.

 

보충수엄 ===================

 

1. DDL 과 DML 차이

가. DDL
- create
- drop
- alter
- truncate
=> 트랜잭션이 발생안됨, 따라서 그냥 autoCommit 된다.
   rollback 로 취소 불가. 
나. DML
- insert
- delete
- update
- merge
=> 트랜잭션이 발생됨. 따라서 commit, rollback 해야된다.

2. 객체 삭제 ( 테이블 삭제 )

문법>
 drop table 테이블명; ==> 테이블이 휴지통에 저장된다.


        drop table 테이블명;            purge recyclebin;
테이블 ----------------------> 휴지통 --------------------> 완전삭제
       <---------------------
      flashback table 테이블명 to before drop;
       --------------------------------------------------->


3. 데이터 삭제 ( DELETE )
DML이기 때문에 commit/ rollback 가능
: 문법>
 delete from 테이블명;

 => where 가 없기 때문에 전체 레코드가 삭제.

 delete from 테이블명
 where 조건식;

 => 조건에 일치하는 값만 삭제

4. 데이터 삭제 ( truncate )
   ==> DDL 이기 때문에 rollback 불가.
   ==> 문법 :
  truncate table 테이블명;

==> 성능은 truncate 이 좋다.

5. 데이터 수정 ( updata )
   : DML이기 때문에 commit / rollback 가능
   문법 :
 
 update 테이블명 set 컬럼명 = 새로운값, 컬럼명=새로운 값
 => 다 수정됨
 
 
 update 테이블명 set 컬럼명 = 새로운값, 컬럼명=새로운 값
 where 조건식;
 ==> 조건에 일치하는 레코드만 수정됨.


6. JDBC ( Java Database Connectivity)
: 자바프로그램과 데이터베이스와 연동하는 기술.
 
     JDBC
 자바프로그램 <-------------> 데이터베이스


* 고려사항
가. 데이터베이스 설치 및 실행여부 확인
나. 드라이버(dirver) 확인
-> 벤더(회사)에서 만든 클래스 파일들을 의미한다.
-> 압축해서 제공한다. ( *.jar, *.zip 형식 )
다. 클래스패스 ( classpath )

* 패스(path) 종류?
a. path
   ==> 명령어의 경로

b. classpath
   ==> 클래스파일의 경로 
CLASSPATH 환경변수에 설정방법
C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib\ojdbc6_g.jar

또는

ext 폴더에 저장하는 방법
1) 이클립스의 아무 프로젝트나 하나잡고 오른쪽클릭 -> Properties 들어간다
2) JRE System Library[JavaSE-1.7] 가 JRE인지 JDK 인지 확인하고
3) C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib\ojdbc6_g.jar 있는
   ojdbc6_g.jar 파일을 ext 폴더에 복사하여 붙여넣고 이클립스 재실행

--> 외부 환경 설정 끝

라. 4가지 정보
 // ojdbc6_g.jar 압축파일내의 핵심 클래스
 String driver = "oracle.jdbc.driver.OracelDriver";
 
 //서버의 ip,port번호, sid명
 String url = "jdbc:oracle:thin:@localhost:1521:xe";
 
 // 사용자 계정
 String userid = "scott";
 
 // 사용자 비번
 String passwd = "tiger";

마. 드라이버 로딩

 Class.forName ( driver );

바. Connection 맺기

 import java.sql.Connection;

 Connectioncon = DriverManager.getConnection( url,userid,passwd );

사. SQL 문 작성 ( ; 제외 )

 String sql = "select * from person";
 String sql2 = " insert ~ ";

아. Statement 생성 ( SQL 문 전송 )

* Statement 종류 3가지

- Statement
  =>
  예>
 delete from person where age = 10;
 delete from person where age = 11;  
 ..
 delete from person where age = 100; 

  => statement 얻기
        Statement stmt = con.createStatement(); 
   
- PreparedStatement (*)
  예>
 delete from person where age = ?;
 나중에 ? 에 값을 지정하는 방식.
 => PreparedStatement 얻기
    PreparedStatement pstmt = con.PreparedStatement( sql );

 // ? 값 설정
  pstmt.setInt(1,10);

  insert into person ( num ,name, age, address)
 

- callableStatement
  => PL/SQL 사용시

자. SQL문 전송

- Statement 이용
 
 : insert, delete, update ( DML 전송)
   int n = stmt.executeUpdate(sqp);
   => n 값은 적용된 레코드 갯수
   => 디버깅 가능 ( 성공실패확인 가능 )
 : select
   ResultSet rs = stmt.executeQuery(sql); 
   while(rs.next()){
 int num = rs.getInt("num");
 String name = rs.getString("name");
 int age = rs.getInt("age");
 String address = rs.getString("addresss");
 System.out.println(num+"\t"+name);
   }
 
- PreparedStatement 이용

 
자. 외부자원 close
: 사용했던 자원 역순으로......

 Connection con
 Statement stmt
 ResultSet rs

 rs.close();
 stmt.close();
 con.close();

7. JDBC 사용시 반드시 적용시키는 2가지 패턴

가. DAO 패턴 ('다오'라고 읽지 말고 '디에이오'라고 읽기 )
-> Data Access Object 패턴
-> Data? (파일, 데이터베이스)


나. DTO 패턴
-> Data Transfer Object 패턴
-> 여러 데이터를 한꺼번에 효과적으로 전송하기 위한 클래스.
-> Value Object(vo), domain object ,entity 라고도 한다.
-> 일반적으로 테이블 당 한개씩 생성한다.

 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,