DAY_043[국비] 자바 웹프로그래밍 과정

Bona의 블로그 입니다.·2022년 11월 28일
0

국비과정

목록 보기
43/99
post-thumbnail

 ☔ Day 043 

  • PL/SQL : CURSOR
  • JSP

 🎁 CURSOR 

  • 커서는 select 명령에 의해 조회된 "레코드들"(여러 개의 레코드)을 저장할 수 있는 오라클 내부의 객체

1. CURSOR의 생성 (정의)

  • CURSOR 사용할 커서의 이름 [ (매개변수1, 매개변수2, ... ) ]
    IS
    SELECT ..... SQL 문장

  • 매개변수의 역할 : SELECT 명령에서 사용할 값들을 저장( 주로 WHERE 절에서 사용할 값들)

  • SELECT .... SQL 문장 : 실행되어 CURSOR에 결과를 안겨줄 SQL 명령


2. CURSOR 의 OPEN (호출)

  • OPEN 커서이름 [ (전달인수1, 전달인수2, ... ) ]
  • 실제로 전달인수를 전달하여 커서안의 SQL문을 실행하고 결과를 커서에 저장한다.

3. 결과를 반복 실행문과 함께 필요에 맞게 처리

  • LOOP
        FETCH 커서이름 INTO 변수(들);
        EXIT WHEN 커서이름%NOTFOUND;
        -- SELECT에 의해 얻어진 레코드가 없을 때까지 반복 계속
    END LOOP;

  • FETCH 커서이름 INTO 변수; 커서에 담긴 데이터들 중 한 줄씩 꺼내서 변수(들)에 넣는 동작

  • EXIT WHEN 커서이름%NOTFOUND; 꺼냈는데 데이터가 없으면 종료

  • LOOP 안에서 필요에 맞는 처리를 데이터가 없을 때까지 반복


4. CURSOR 닫기

  • CLOSE 커서명

 ✨ cusor의 사용 

  • 전달인수로 부서번호를 전달한 후 그 부서의 사원이름들을 얻어오는 커서


 ✨ 커서와 for문 

  • 기존의 for문
    FOR 인덱스변수 IN [REVERSE] 처음값.. 끝값
    LOOP
        실행문
    END LOOP;

  • 커서와 함께 사용하는 FOR 문
    ( OPEN 커서이름(전달인수) <- 생략 )
    FOR 레코드 변수 IN 커서이름(전달인수1, 전달인수2)
    LOOP
        실행문
    END LOOP;

  • OPEN과 LOOP가 합쳐진 예

  • FOR 레코드변수 IN 커서이름(전달인수1, 전달인수2...)
    : OPEN 으로 실행(호출)하던 동작이 FOR문의 IN 다음으로 이동

  • 실행결과는 하나씩 (1행, 1레코드) 레코드 변수에 저장되어 반복실행
    자동으로 실행결과의 개수만큼 반복실행

  • FOR 문을 이용하여 커서변수의 사용이 더 간단해진다.
    조금 더 간결한 FOR 문과 커서의 사용

 📓 연습 문제 

  • 부서번호가 30번인 사원의 이름, 부서명, 급여, 급여수준(높은 보통 낮음 을 출력하기)
  • 급여(SAL)은 1000 미만 낮음, 1000~2500 보통, 나머지 높음으로 출력
  • ‘이름 - 부서명 - 급여 - 높음’ 순으로 출력


 ✨ 커서 변수 

  • 커서 변수

    • 앞에서 생성한 커서의 이름은 함수처럼 호출되는 이름이기도 하고, 커서를 대표하는 이름이었다.
    • 그러나 커서의 이름으로 다른 커서를 만들지는 못한다.
    • 변수로 치면 앞에서 만든 커서의 이름은 상수 정도로 표현이 가능하다.
    • 앞으로 나올 이름은 변수로서 사용되고, 다른 커서도 저장할 수 있게 사용하고자 한다.
    • 커서변수를 사용해야 프로시져 내에서 커서변수를 out변수로 지정하고 리턴동작으로 활용할 수 있다.
  • 커서변수의 선언

    • TYPE
      : 사용할 커서의 타입이름 ID REF CURSOR [ RETURN 반환타입 ]'
         -> 생성된 커서 타입의 이름으로 커서 변수를 선언할 예정
    • 커서변수이름 커서타입이름;
    • 커서 타입을 만들 때 RETURN 값을 지정하면 강한 커버타입이 생성되는 것이고,
      RETURN이 없으면 약한 커서타입이라고 지칭한다.
      TYPE dep_curtype1 IS REF CORSOR RETURN emp%ROWTYPE;
      -- 강한 커서 타입 (많이 쓰지는 않는다.)
      TYPE dep_curtype2 IS REF CORSOR;
      -- 약한 커서 타입
      위 두 줄의 명령은 커서의 이름을 생성한 것이 아니라,
      커서변수를 선언할 수 있는 "커서자료형(TYPE)"을 생성한 것이다.
    • 커서자료형(TYPE)을 이용하여 이제 실제 커서변수를 선언할 수 있다.
      cursor1 dep_curtype1;
      cursor2 dep_curtype2;
  • cursor1과 cursor2 변수에는 select 명령을 담아서 커서를 완성할 수 있다.
    또한 커서내용(select문)이 고정적이지 않고 바꿀 수 있다.
    다만 cursor1은 강한 커서 타입이므로 정의 되어 있는 대로
    (RETURN departments%ROWTYPE)
    레코드 전체의 결과를 얻는 select만 저장할 수 있다.

  • 커서변수를 만들어서 필요할때마다 커서 내용을 저장하고 호출해서 그 결과를 사용하려고 변수를 만든다.

  • dep_curtype3 SYS_REFCURSOR; -- 시스템에서 제공해주는 커서 타입

    • SYS_REFCURSOR를 사용하면
      TYPE emp_dep_curtype IS REF CURSOR;
      --> 커서타입 생성 생략
      emp_curvar emp_dep_cur_type;
      --> SYS_REFCURSOR 이 이름만 알면 커서 변수를 자유롭게 선언가능

  • 프로시져에서의 커서 사용 예
    -> SELECT 명령의 결과를 커서변수에 담아서 프로시져를 호출한 곳으로 리턴한다.

 📓 연습 문제 

  • 프로시져에 회원 번호를 전달해서 해당회원이 빌려간 도서 레코드들을 되돌려 받는 프로시져를 제작
  • 호출하는 익명 블럭에서 도서의 번호와 제목을 출력하는 반복문을 작성
  • 프로시져이름 getbook으로 하고 변수의 이름들은 임의로 정하기




 🎄 JSP - SERVELT 

 🎁 세팅 

  • 다이나믹 웹프로젝트 생성시 주의!!!
    • 파일 생성 장소 : 프로젝트폴더 > src > main > webapp폴더 안에 jsp파일 만들기

tomcat서버 연결하기

  • servers 탭 에서 링크 클릭(new server) → 아파치 폴더아래의 tomcat9.0서버 선택 → Tomcat instpllation directory: 아래 입력 란에 톰캣설치된 폴더 넣기(옆에 Browse.. 버튼클릭하고 폴더 찾아서 선택)
    C:\Program Files\Apache Software Foundation\Tomcat 9.0
    → 톰캣서버에 프로젝트 파일 add 꼭 해야함!!! → finish 클릭

  • servers 탭에서 Tomcat에 연결할 때 더블클릭하고 설정할 것이 있음!!!
    tomcat admin port 가 비어있는데 9005를 넣어준다.
    servers탭에서 tomcat 서버이름을 더블클릭하면 설정창이 나옴

자바버전 설정하기

  • 프로젝트이름파일 > 오른쪽 클릭 - 프로퍼티스 > project facets - java 1.8버전 수정 - 옆에 runtime탭 클릭해서 tomcat 체크하기

콘솔창에 한글이 깨져서 보일때

  • window탭 > properties > general - workspace - text file encoding - other클릭하고 MS949입력

  • 브라우저 크롬 으로 수정
    : window탭 > web browser > chrome클릭


 🎁 Basic 

  • <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    문서 가장 위에 쓰여서 jsp를 쓰겠다는 표시
    위 코드줄을 한 줄로 이어쓸 때 띄어쓰기 없으면 에러

  • JSP는 JAVA SERVER PAGE의 약자로,
    웹페이지 내부에 프로그래밍 적인 요소를 추가하거나,
    서버에서 계산되고 실행된 결과를 웹페이지에서 표시하고자 할 때 사용한다.

  • 쉽게 얘기하면, 웹페이지 HTML5 중간 중간에 자바 프로그래밍 코드를 좀 같이 쓰겠습니다. 라는 뜻과 비슷하다.

  • 사용 예는 아래와 같다.
    (날짜 변수 d의 선언과 객체 초기과 동작)
    <% java.util.Date d = new java.util.Date(); %>

  • HTML로 페이지를 구성하던 중, JSP에 의한 컨텐츠가 중간에 나와야 한다면 필요한 곳에 jsp명령을 쓴다.

  • 현재 jsp파일 안에 html 문법 사이로 jsp문법이 껴들어 코딩될 때는 <% %>를 사용한다.

  • <!-- HTML5 주석 -->
    <%-- 주석내용 중에 <% %>이 섞여있을 때의 주석 --%>

  • jsp명령은 html태그와 함께 파일로 저장되어 서버에 보관된다.
    클라이언트의 요청을 받으면 해당파일(~.jsp)이 클라이언트로 전송되어 웹브라우저에 표시되게 되는데,
    그 전에 jsp명령은 이미 실행되어서 결과만 html태그와 같이 전송 되어진다.

 🎁 Sum 

  • JSP는 JAVA에서 사용하던 거의 모든 문법이 똑같이 사용된다.

  • jsp 명령들 사이에 html같은 요소들이 껴들어야 한다면 jsp영역을 끝내고 해당 내용을 기술한 후 다시 jsp영역을 시작한다.

  • 한 페이지 안에서 jsp 명령은 중간에 영역이 끝나고 다시 시작해도 한 프로그램처럼 이어진다.


 🎁 Action 

  • Action.jsp : 데이터를 보내는 페이지

  • Action_to.jsp : 데이터를 받는 페이지

  • get & post

    • get은 url에 정보가 노출이 된다.
      post 방식은 이들을 노출하지 않는다.
    • 주소내에 포함된 value 중 한글은 인코딩 방식에 따라 %16진수값으로 표시될 수 있다.
  • Action.jsp에서 출발한 폼데이터들은 주소에 섞여서 action에 써놓은 페이지에 도착할 것 같지만, 주소는 서버에서 최종 목적지로 사용한 주소일뿐 입력란에 입력된 데이터들은 모두 서버에 저장된다. name으로 구분된 vlaue값들 모두 ......
    그리고 요청주소에 포함되어 표시될 뿐 주소에 있는 값들을 앞으로 이용하는 것은 아니고 서버에 있는 데이터를 불러서 이용한다.
    request.getParameter()를 이용해서 필요한 데이터를 가져온다.

  • getParameter로 받는 모든 데이터는 String 데이터로 받을 수 있다.
    만약 위 항목 중 입력란이 비어있거나 name값이 없는 게 존재한다면 String 변수는 null이 된다.
    name에 오타가 있어서 받지 못한 것 또한 null이 된다.

  • Action.jsp 에서 submit버튼을 클릭하면 form안의 input태그의 값들이 보내지고 a태그의 내용은 보내지지 않는다.

  • a태그의 url에 ?useritem=ABCDEFG를 붙여 보낼 데이터를 지정할 수 있는데 이 데이터는 a태그를 클릭해서 Action_to에 넘어갔을 때만 보낼 수 있다(이때는 form의 데이터는 보내지 못함)


 🎁 Checkbox 

  • checkbox처럼 여러개의 값을 선택할 수 있을 때는 어떻게 받을 것인가

  • checkbox.jsp : 보내는 쪽

  • 받는 쪽

  • 여러개를 받을 때는 배열로 받고 for문을 쓸 수 있다.

  • jsp중간에 html태그를 써야 할 때는 jsp 영역을 닫고 태그를 쓰고 다시 jsp영역을 열고 jsp를 작성해야 한다.


 🎁 Select 

  • 보내는 쪽
    : 하나만 선택할 수 있는 select + 여러개를 선택할 수있는 select
    한 form 안에 들어 있는 페이지

  • 받는 쪽
    : 첫 번째 select의 값을 받을 변수는 String으로
    두 번째 select의 값을 받을 변수는 String[ ]로 받는다.


 🎁 Table 

  • jsp영역에서 반복문을 이용해서 table 만들기
  • 5행 5열의 table을 만들려면
  1. html5로만 만들 때

  1. jsp와 html으로 만들 때





profile
제가 공부하고 공유하고 싶은 글을 올리고 있습니다.

0개의 댓글