JSP 3일

1. 프로그래밍 구조 : 모델1, 모델2
2. 자바빈 클래스 정의
3. 데이터베이스 프로그래밍에 대한 이해
4. 회원가입 예제 구현

1.

1) 모델1: 부와 로직을 모두 JSP페이지 하나에서 처리하는 구조

                                                        - 그림
        웹 브라우저 -> HTTP request
                                    -> web Container(JSP+JavaBeans:Model) <-> Data
                            <- HTTP response <- Web Container <-> Data
        
            - 장점) 1. 구조가 단순하여 익히기 쉬움
                        2. 숙련된 개발자가 아니더라도 구현이 용이

            - 단점) 1. 출력을 위한 뷰 코드와 로직 처리를 위한 자바코드가 함께 섞이기 때문에 JSP 코드자체가 복잡해짐
                        2. JSP 코드에서 백엔드와 프론트엔드가 혼재되기 때문에 분업이 용이하지 않음
                        3. 코드가 복잡해서 유지보수가 어려움

2) 모델2:  JSP 페이지와 서블릿(Servlet), 로직을 위한 클래스가 나뉘어 브라우저 요청을 처리
                - MVC(Model View Controller) 패턴을 웹 개발에 도입한 구조
                Model: 데이터 영역
                View: 화면에 보여주는 영역
                Controller: 실행 흐름을 제어하는 영역

                                                            -그림
        웹 브라우저 -> HTTP request
                                    -> Web Container(Servlet:Controller, JSP:View, JavaBeans:Model) <-> Data
                            <- HTTP response <- Web Container <-> Data
                
                - Model: 서비스 클래스 또는 자바빈(비지니스 로직)컨트롤러로부터 특정 로직에 대한 처리 요청이 들어오면
                                이를 수행하고 수행 결과를 컨트롤러에 반환하고 필요한 정보는 request 객체나 session 객체에 저장
                
                - View: JSP(클라이언트에 출력되는 화면) 모델1과 달리 로직 처리를 위한 코드가 내포되어 있음
                            요청 결과의 출력 뿐만 아니라 컨트롤러에 요청을 보내는 용도로 사용
                           request 객체나 session 객체에 저장된 정보를 토대로 화면을 출력

                - Controller: 서블릿(흐름 제어를 담당)브라우저로부터 요청이 들어오면, 어떤 요청인지를 분석하여 이 요청을 처리하기 위한
                                    모델을 사용하여 처리 사용한 모델로부터 처리 결과를 받으면 추가로 처리하거나 가공해야할 정보가 있다면 
                                    처리 후 request 객체나 session 객체에 저장하고, 뷰(JSP)를 선택하여 forward나 redirect 하여 클라이언트에 출력
                                    forward : 다른페이지에서 request 객체와 response 객체를 함께 사용

               - 장점) 1. 출력을 위한 뷰 코드와 로직 처리를 위한 자바 코드를 분리하기 때문에 JSP 모델1에 비해 코드가 복잡하지 않음
                           2. 뷰, 로직 처리에 대한 분업이 용이
                           3. 기능에 따라 분리되어있기 때문에 유지보수가 용이

               - 단점) 1. 구조가 복잡하여 습득이 어렵고 작업량이 많음
                           2. JAVA에 대한 깊은 이해가 필요

예) 회원가입 예제를 모델2 사용해서 구현
1. JSP 페이지 작성
2. 서블릿 클래스 작성
3. 자바빈즈 클래스 작성 : DTO(Data Transfer Object)
4. 유틸리티 기능을 갖는 클래스 : DAO(Data Access Object)
    -> SQL(데이터베이스 표준 언어)를 사용해 명령어를 작성한 것을 함수로 보관할 클래스
    -> insert sql 명령어를 작성 -> 실행 -> 데이터베이스에 새로운 레코드(Record)를 저장
    -> 다른 JSP 페이지 또는 자바 클래스에 공유하기 위함    


2. 

* 자바빈즈 또는 자바빈 클래스의 기본 구조 이해와 작성
    -> 일반 다른 자바 클래스에서도 사용 가능
    -> JSP 페이지에서 사용가능
    -> 용도: 데이터베이스에 저장할 데이터를 임시로 보관

    형식)
1. 패키지가 있어야 한다
    - 보안 때문에 package 명령어를 사용해서 부모 디렉토리를 만들어야 한다
    - package mypkg1;
        -> 다른 명령어 보다 제일 먼저 위에다 작성
    - www.naver.com -> 도메인 이름을 패키지로 많이 사용
        -> 유일한 이름
2. public class 클래스 이름 { }
3.  멤버 변수들을 선언 : private 접근 제한자를 사용
    ex) private 자료형 + 변수이름;
4. 외부 클래스에서 사용할 수 있게끔 public접근 제한자를 갖는 함수를 정의해야 한다
    - 2가지 종류의 함수를 새로 정의
            1) setter 함수를 정의: 외부 클래스 또는 함수로부터 값을 받아와서 멤버 변수에 할당
                    형식) public void 함수이름(매개변수선언){    
                                    멤버변수이름 = 매개변수이름;
                              }
                    ex) private int age;
                          public void setAge(int value) { 
                                age = value;
                          }
            2) getter 함수를 정의: 멤버 변수가 갖고 있는 값을 반환
                    형식) public int getAge() { 
                                    return age;
                              }

* 자바빈즈 클래스의 완성된 예제
        public class 클래스 이름 {
                private int age;
                // setter 함수를 정의
                // getter 함수를 정의
        }
        public class MyJavaBeanClass { 
                private int age;
                public void setAge(int value) { age = value; }
                public int getAge() { return age; }
        }

// 위에서 만든 자바빈즈 클래스를 jsp 페이지 안에서 사용하는 방법
        1. 참조변수 선언 + new 연산자를 사용
        2. jsp: useBean 액션 태그

use_bean.jsp 페이지 안에서 자바빈즈 클래스를 사용하는 방법
        1. import 명령어를 작성
                <%@ page import="패키지이름.클래스이름" %>

        2. <%! 참조 변수를 선언 %>
                <%!
                    클래스이름 참조변수이름;
                    또는
                    클래스이름 참조변수이름 = new 클래스이름();
                %>
                <%!
                    참조변수이름 = new 클래스이름();
                    // setter 함수를 호출해서 멤버 변수인 age에 20을 저장
                        참조변수이름.setAge(20);
                    
                    // getter 함수를 호출해서 멤버 변수인 age에 할당된 20을 읽기
                        out.print("멤버 변수인 age가 갖고 있는 정수는 "+ 참조변수이름.getAge());
                %>
            

1. 이클립스 실행 ->2. 프로젝트 열기(Dynamic Web Project) -> 3. 자바빈즈 클래스 만들기 (위치는 Java Resources 디렉토리 안)
-> 새로운 패키지를 만들고 난 후에 MyJavaBeanClass 클래스를 정의하기 (새로운 패키지 이름은 mypkg)
-> 멤버변수는 사람의 나이를 보관할 수 있는 private int age; -> getter / setter 함수를 정의
-> 4. WebContent 디렉토리로 이동 한 후 use_bean.jsp 페이지를 만들기 -> 6. 자바빈즈 클래스를 사용하는 명령어들을 작성
-> 7. index.html 파일을 열기 -> 8. <a href="use_bean.jsp">자바빈즈 클래스 사용</a>
-> 8. 웹브라우저를 실행 (http://localhost:8085/프로젝트이름/ 입력 후 실행)

* jsp에서 자바빈즈 클래스를 사용하는 방법
    1. jsp:useBean 액션 태그를 작성
    2. jsp:setProperty 액션 태그를 작성
    3. jsp:getProperty 액션 태그를 작성


JSP페이지에서는 자바빈을 사용하기 위해서 3가지의 액션태그를 제공 
1. 자바빈 객체를 생성: useBean액션태그(<jsp:useBean>)
-> 클래스이름 참조변수이름 = new 클래스이름( );

2. 자바빈 객체의 프로퍼티 값을 저장:
   setProperty액션태그(<jsp:setProperty>) 
-> setter 함수들을 호출

3. 자바빈 객체에서 저장된 프로퍼티 값을 얻어내기:  
   getProperty액션태그 (<jsp:getProperty>)
-> getter 함수들을 호출

사용 예)
<jsp:useBean 
       id="참조변수이름" 
       class="패키지이름.클래스이름" 
       scope="page"/>
자바빈 객체를 생성

예) MyJavaBeanClass 클래스를 사용하는 경우의 예
<jsp:useBean id="refObject" 
             class="mypkg.MyJavaBeanClass"
             scope="page"/>

예) setter 함수인 setAge( ) 함수를 호출하는 명령어
<jsp:setProperty 
             name="refObject"
             property="age"
             value="<%=변수이름%>"/>

<jsp:setProperty 
        name="참조변수이름" 
        property="자바빈즈클래스에서 만든 변수이름" 
        value="값"/>
생성된 자바빈 객체에 프로퍼티 값을 저장.

<jsp:getProperty name="..." property="..." />
-> getter 함수를 호출
예) getAge( ) 함수를 호출하는 명령어
<jsp:getProperty name="refObject" property="age"/>

* 새로운 jsp 페이지를 만들기 : 이름은 use_bean2.jsp



자바 빈 객체 생성 : useBean액션태그(<jsp:useBean>)

사용 하는 방법
<jsp:useBean 
    id= "빈 이름" class="자바빈 클래스 이름" scope="범위" />

id속성: 
   생성될 자바빈 객체(인스턴스)의 이름을 명시. 
   필수 속성으로 생략이 불가능. 

class속성: 객체가 생성될 자바빈 클래스명을 기술. 
           이때 패키지명을 포함한 자바클래스의 풀네임을 기술. 
           필수 속성으로 생략이 불가능.

scope속성: 자바빈 객체의 유효범위로 
           자바빈 객체가 공유되는 범위를 지정. 
    값으로는 page, request, session, application
    scope속성 생략 시, 기본 값은 page.

프로퍼티 값 설정 : setProperty액션태그(<jsp:setProperty>)

자바빈 객체의 프로퍼티 값을 저장하기 위해 사용

<jsp:setProperty 
       name= "빈 이름" 
       property="프로퍼티 이름" 
       value="프로퍼티에 저장할 값 " />

name속성: 자바빈 객체의 이름을 지정. 필수 속성으로 생략이 불가능. 
property속성: 프로퍼티명을 지정. 필수 속성으로 생략이 불가능.
value속성: 프로퍼티에 저장할 값을 지정. 생략 가능.





* 오라클 데이터베이스에 접속시 사용할 새로운 사용자 계정을 만드는 방법
    1. 오라클 sql developer 프로그램 실행 
            - sqldeveloper.exe 실행

    11. 로그인 전 제어판\시스템 및 보안\관리 도구\서비스 에서 OracleServiceXE OracleXETNSListener 이 사작되어 있어야 한다
    
    2. sys 또는 system 사용자 계정 이름을 사용해서 오라클 데이터베이스에 로그인(접속: Connection)하기
        -> 계정: sys / 비밀번호: 1234

    3. 접속이름 : SYS 사용자 계정(아무거나 적어도 상관 X) 
        사용자 이름 : sys
        비밀번호 : 1234
        롤 : SYSDBA

* 오라클 데이터베이스를 사용해서 클래스와 같은 테이블(Table)을 만들기

        public class 클래스이름{
            private int age;
        }

        create table 테이블이름(   
            -- 이름 + 자료형(number 자료형을 사용)
            age number primary key
            -- 키 (key) : 여러 개의 레코드들을 구분하기 위한 값
            --        중복방지 -> 같은 나이를 저장할 수 없도록 함
            -- 키의 종류 
            --    1) 기본키(primarykey) : 하나의 테이블
            --    2) 참조키(reference key) : 두개 이상의 테이블 사이에 사용
        );
        -- 테이블이름 -> tbl_ 접두사를 사용 -> tbl_jsp01
        create table tbl_jsp01 (
            age number primary key
        );
        -- 위의 테이블은 jsp_user02 사용자 계정으로 만들기
        1. jsp_user02 사용자 계정 이름과 비밀번호(1234)를 사용해서 오라클 데이터 베이스에 접속하기

* sys 사용자 계정으로 오라클 데이터베이스에 접속 + jsp_user02 사용자 계정을 만들었다
    -> sys 사용자 계정 이름을 선택하고 마우스 우클릭 후 접속 해제
    -> + 접속이름 : JSP_USER02 사용자 계정
            사용자 이름 : jsp_user02
            비밀번호 : 1234
            롤 : 기본값

'잡동사니 > 휴지통' 카테고리의 다른 글

개인 자료실  (0) 2019.04.03
3일  (0) 2018.11.24
2일차  (0) 2018.11.18
수정  (0) 2018.11.17

+ 최근 게시물