[20221007] 빈즈 Beans

kangsun·2022년 10월 7일
0

JSP

목록 보기
4/16

Beans


[01] 자바 웹페이지의 개발방식의 흐름

  • servlet(.java) -> jsp -> servlet(.java)
  • .jsp + .java 모두 이용해서 웹 페이지를 개발해야한다.

    .java로만 이용해서 프론트단을 코딩하려면 이렇게 복잡한 코드가 나오기 때문임.


[02] 서블릿의 이해

  1. 서블릿을 이용한 구성
  • 자바로 개발된 .class 파일
  • JSP에 비하여 컴파일 단계가 생략되기 때문에 속도가 빠르다.
  • 서블릿의 단점 : 디자인 부분과 혼합하여 작업하기가 매우 어렵다.
  1. JSP(Java Server Page)를 이용한 구성
  • .jsp 파일
  • Servlet의 불편한 디자인 부분을 좀더 간결하게 제작하도록 개선된 서버 스크립트
  • 하나의 JSP페이지에는 HTML, CSS, JavaScript, Java Code등이 혼합되어 코딩이 이루어 진다.
  • 유지보수 및 보안 문제, 기능 확장이 어려워 개발시 JSP와 Beans로 분리한다.
  1. JSP + Beans 를 이용한 구성
  • .jsp + .java 파일로 구성
  • BEANS는 콤포넌트 자바 개발자가 Business Logic(Process Logic)를 구현하는 목적으로 사용된다.
  • DB관련해서 INSERT, UPDATE, DELETE, SELECT등 구현시 주로 사용한다.



[3]Beans의 이해

  • jsp페이지에 나열되는 자바 처리로직은 디자인 코드와 함께 매우 복잡한 코드를 구성한다. 이로인해 디자인 변경시 자바코드가 영향을 받아 오류가 자주 발생되며, 코드 수정시 코드를 알아볼 수 없어 유지보수가 어렵다. 또한 작업 도중 자바 코드가 JSP 페이지에 반복적으로 사용될 수 있으며, 코드의 노출로 저작권등 보안에 심각한 문제가 발생된다. 이러한 반복되는 자바 코드들을 JAVA파일안에 저장하여 사용하는 형태를 빈즈라고 한다.

  • 데이터를 출력하는 레이어데이터를 처리하는 레이어분리(Manager, Process class)하여 유지보수 시간을 단축 시키 수 있으며 코드의 가독성을 높일 수 있다.

  • 빈즈는 dll과 같은 원리를 가지고 있다.

  • 빈즈의 종류
    - DTO(Data Transfer Object) class
    - Manager(Process) class
    - DAO(Data Access Object) class


new Test()
beans는 자동으로 생성해주는 객체이다.
오브젝트(객체=인스턴스)의 개념과 같다.
new가 아닌 bean이라는 개념으로도 사용할 수 있다.

DTO (Data Transfer Object)

  • 데이터 전송 객체
  • 객체 지향 프로그래밍(OOP) 언어 환경에서 DTO를 사용할 수 있습니다.

자바를 사용할 때 내부에 기본적으로 들어가있는 기능들이 있다. (getter, setter)

  • 사용자가 입력한 값을 객체형태로 받을수 있게 클래스를 구성한다
  • 폼에서 입력된 데이터들은 하나의 DTO 객체로 변환 될 수 있다.
  • 하나의 데이터베이스 레코드를 저장하며 레코드와 같은 구조를 가지고 있다.
  • 레코드가 50개이면 DTO 객체도 50개가 만들어 진다.
  • 한개의 레코드는 빈즈 클래스 객체 하나로 매핑된다.
  • 한개의 컬럼은 멤버 변수로 매핑된다.
  • 데이터가 포함된 객체를 한 시스템에서 다른 시스템으로 전달하는 작업을 처리하는 객체이다.
  • DTO는 VO로 바꿔 말할 수 있는데 계층간 데이터 교환을 위한 자바빈즈를 말한다.

[05] DAO (Data Access Object)

  • Insert, delete, update, select등 레코드 처리를 주 목적으로 한다.
  • DTO 객체를 데이터베이스 서버에 저장한다.
  • 데이터베이스 서버로 부터 레코드를 SELECT한 후, DTO 객체로 변경해 가져온다.
  • SQL을 직접 실행하는 기능을 가지고 있다.
  • JSP에서 데이터베이스 접속 로직을 Beans로 작성하여 DB정보 변경시 쉽게 변경사항을 구현할 수 있다.
  • 데이터 접근을 목적하는 객체이다.
  • 커넥션 같은 것을 하나만 두고 여러 사용자가 DAO의 인터페이스를 사용하여 필요한 자료에 접근 하도록 하는 것
  • DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트를 말한다.

※ VO(Value Object)

  • DB 혹은 어떠한 물체 틀(형상화)을 잡고 이 틀을 잡기 위한 변수들을 모아둔 것이다.
  • DTO와 동일한 개념이나 차이점은 read only 속성을 갖는다.
  • 관계데이터베이스의 레코드에 대응되는 자바클래스이다.
    형태는 DB레코드를 구성하는 필드들을 Value Object의 Attribute로 하고
    해당 변수에 접근 할 수 있는 Getter Setter 메소드의 조합으로 클래스를 형성되어진 클래스이다.
  • 대체로 불변성이고 equals()로 비교할 때 객체의 모든 값을 비교해야 한다.

※ VO와 DTO는 데이터를 객체에 저장 담당 클래스를 말하고 DAO는 DB의 데이터 사용,수정,삭제 기능 담당 클래스를 의미한다.
실제 객체는 데이터와 기능을 같이 가지고 있지만 프로그래밍에서는 분리시켜서 사용하는게 개발에 용이하다.

※ CRUD란?

  • DAO가 접근하는 것은 DB, File, Application일수 있고 이것들을 접근하는 기술이 CRUD이다.
  • Create, Read, Update, Delete 또는 Create, Retrieve, Update, Destroy를 묶어서 이야기 하는 용어로
    대부분의 software가 가지는 기본적인 데이터 처리기능을 지칭한다.
  • Create(생성), Read/Retrieve(읽기/인출), update(갱신), Delete/Destroy(삭제/파괴)의 기능을 하지 못하는
    소프트웨어는 완전하다고 할 수 없다는 말이 있을 정도로 기본적인 기능에 속하기 때문에 한묶음으로 이야기 되어진다.
    이러한 기능을 하는 대표적인 프로그램들로는 주소록앱이나 달력앱 그리고 Mysql같은 DB관리 software등이 있다.

[06] 웹페이지의 SCOPE 유효범위

1) application - 모든 사용자가 공유하는 값
2) session - 각 사용자별로 개별적으로 구분 및 적용
3) request - 서로 요청한 페이지에서 유효
4) page - private속성과 비슷. 해당 페이지에서 유지되는 값. 생략가능




[07] 자바빈즈 예제


class 파일 생성하기

(논외) 배포할 땐 build폴더 찾아서 파일 배포하면 된다.

메소드 작성

testbean 폴더 생성 → computeForm.jsp파일 생성

computeok1.jsp 생성

form에 있는 정보를 가져오는 방법 = request

1) JSP 메소드로 만들어보기

request로 값을 가져온 후 JSP로 함수 만들기

출력하기

웹 브라우저 결과

computeForm.jsp 부모페이지 Run해야함.




2) new 연산자로 만들어보기

computeok2.jsp 파일생성

import



↳ 임포트해주면 이렇게 compute class가 자동으로 뜬다.

new 연산자 사용

출력

웹브라우저


↳ 결과가 똑같이 나온다.


3) Java Bean으로 만들어보기

computeok3.jsp 파일생성

import

html 공간에 ctrl+space 해보면 action tag가 뜬다.

가장 많이쓰는 action tag 3가지


여는태그 닫는태그 동시에 하는 방법

(위처럼 써도되고 아래처럼도 사용가능)

Java Bean 객체생성(형식)

Java Bean 객체생성(적용)


scope는 4가지 종류가 있다. (나중에 배울 것)
(밑에 바로 나옴)


class에 객체를 작성해주면 임포트 때문에 자동으로 생성된다.

요렇게

출력하기

웹 브라우저




scope 란?

페이지를 어디까지 공유를 할 것인지에 대한 범위






sungjukBean

절대값/팩토리얼 class 생성

이클립스 신기신기한 기능 ㅎ

태그 복사한후 src폴더에 paste누르면 자동으로 class가 생성됨 ;;

calcForm.jsp 파일 생성


calcok.jsp 파일 생성

import

출력하기

웹브라우저 결과







DBOpen method 만들기

이부분은 비밀번호가 바뀌면 하나하나 다 바꿔야한다.
하지만 함수로 만들어서 한군데에서 관리하면 쉽다.



class 생성





이름을 이런식으로 많이 사용함.


DBOpen 함수 생성


↳ 이제 일일히 작성할 필요 없이 "DBOpen" 함수만 불러서 사용하면 된다.

DBClose 함수 생성


↳ 함수 이렇게 사용해주면 된다. DBClose.close()

*static 특징 : 빨리쓸수있다, continue 된다. (꼭 기억하기)


Connection만 사용할 때
Connection,PreparedStatement 두개사용할 때
Connection만,PreparedStatement, ResultSet 세개 모두 사용할때
세가지 종류를 만들어준다.





net.sungjuk package만들기

sungjukDAO.jsp만들기



↳ sungjukDAO.jsp 아니고 SungjukDAO.jsp 맨앞 대문자로 바꿔야됨.

데이터베이스 관련 비지니스 로직 구현 모두 담기

행추가 insert() 함수

  • sql문 추가해주기





frontend 단 꾸미기

  • webapp 폴더에 sungjukbean 폴더 생성
  • sungjuk 폴더에 있는 sungjukForm.jsp파일 복사해서 넣기
  • sugnjukIns.jsp는 새로 만들기
  • scope="page"

    ↳ sungjukIns.jsp페이지에서만 사용가능하다는 의미.

  • sugnjukIns.jsp


    ↳ insert함수는 ctrl+space 누르면 자동으로 작성된다 ㅎㅎ

  • 성적 입력 실패 확인창 코드 작성하기

결과확인




↳ sungjukList.jsp파일을 아직 만들지 않았기 때문에 올바르게 나온 것.

cmd창에서도 확인




하나로 묶어서 따로 전송하는 법(getter / setter)


괄호안에 있는 변수들을 한번에 묶어서 전송하는 방법이 있다.
getter / setter 멤버변수 활용
set 로 넣고
get 으로 가져온다.

  • SungjukDTO.java 클래스 생성



SungjukDTO.java


DTO란? ★★★★★ 중요

Data Transfer Object 전송객체
★★★ 많이 사용하는 함수 ★★★

DTO 객체에 변수 담는 방법

sungjuk테이블의 칼럼명을 기준으로 멤버변수(field) 선언

  • sql문에서 성적테이블의 변수들 복붙해서 가져온다

  • SungjukDTO 객체에 칼럼명을 기준으로 멤버변수를 선언한다. 기본 생성자까지 생성해줌.

  • private으로 선언한 변수에 접근하기 -> 함수를 이용해서 접근하면 된다.


  • toString()



    ↳ 이걸 사용해주면 private에 있는 변수들이 값이 제대로 들어가있는지 확인할 수 있다.

    ↳ 이 값들이 제대로 들어가있는지 확인하는 것

  • sungjukIns.jsp에 jsp:useBean SungjukDTO 삽입해주기

  • 전달값을 모두 DTO 객체에 담기
    dto.set을 쓰고 ctrl+space를 누르면 밑에 DTO에 담았던 객체들이 다 나옴

  • set으로 dto에 담아준 결과

  • SungjukDAO.java 에서 객체생성

  • dto의 자료형은 sungjuk이므로 sungjuk 으로 받아야한다.

  • setter로 감쌌으면 getter로 풀어줘야한다.

  • 여기에 함수를 만들어주는 것이다.

  • public int create(SungjukDTO dto)함수에 값을 넣어준다.

웹브라우저 확인 sungjukForm.jsp Run




↳ list페이지는 아직 생성하지 않았기 때문에 404에러가 나오는 것이 정상이다!

cmd 확인






sungjukList.jsp - dto 활용


  • dao.list() 함수 호출먼저해준 후 list() 함수 만들기

  • SungjukDAO.java에서 list() 함수만들기

  • cmd에보이는 정보를 한번에 다 모아서 list에 담아줄 것이다.

  • 배열이나 vector등으로 담아서 주면되는데 ArrayList로 사용할 것이다.


  • 데이터베이스에서 가져온 정보를 rs(resultSet)에 담아서 ArrayList로 list에 담는다.

  • ArrayList는 한줄씩(인덱스) 가져와서 list에 차곡차곡 담는다.

  • 데이터베이스에서 셀렉한 정보를 담을 수 있다.

    🤔 한사람에 대한 정보를 어디에 담을 것인지? -> DTO

  • list()에는 모든정보를 담을 상자.

  • DTO에는 한사람에 대한 정보 한 줄을 담아준다.




  • 마지막 list값을 돌려줘야하는데 list()함수는 void라서 리턴형이없는 함수이다.

  • ArrayList에 담아놨으므로 void를 ArrayList<SungjukDTO>로 바꿔줘야한다.

  • sungjukList.jsp 에도 자료형을 ArrayList<SungjukDTO>로 바꿔줘야한다.

  • sungjukList.jsp if문 작성하기

웹 브라우저 결과






ssi.jsp 파일 생성

다른 페이지에서 공통으로 사용하는 코드 죄다 집어넣는 곳 만들기

  • 자주쓰는 임포트 코드나 useBean, 한글인코딩 모두 몰아넣고 써야할 땐 인클루드 하면 된다.

  • 이렇게 사용하면 된다. 코드 하나로 해결 완 ㅎ





sungjukRead.jsp 생성 - dto 객체 사용

파일생성

dto에 담을 함수 먼저 선언

SungjukDAO.java에서 dto=dao.read(sno); 함수 만들기

  • try-catch문 틀부터 생성
  • try문 안에 sql문 작성
  • if문 작성

    → get으로 얻어오고 dto에 set시킨다.

  • return값이 이렇게 넘어간다
  • sungjukRead.jsp 프론트엔드 테이블 작성

웹브라우저 확인




상세페이지에 수정/삭제 버튼과 링크 추가

  • sno 페이지 이동할수 있도록 sno 변수 넣어줌

이제 수정..삭제 페이지를 만들어야함..




sungjukDel.jsp - dto 객체 사용


sungjukDel.jsp 생성

준비 코드

  • 이 부분은 어제 코딩했던 sungjuk폴더의 sungjukDel.jsp 파일에 있는 부분을 똑같이 긁어온 것.

int cnt=dao.delete(sno); 이 함수를 만들어야 한다.

SungjukDAO.java 가서 delete 함수 만들기

웹 브라우저 확인







20221007 과제

sungjukUpdate.jsp - dto 객체 사용


sungjukDel.jsp 생성

sungjukUpdateProc.jsp - dto 객체 사용


sungjukDel.jsp 생성





profile
코딩 공부 💻

0개의 댓글