Spring

[Spring]1. Spring 개요

CodeJaram 2023. 9. 6. 09:25

Spring_01_Spring 개요

 

[Spring 환경설정]

eGovFrame(표준프레임워크 포털)

https://www.egovframe.go.kr/home/main.do

개발자 교육-교육자료-표준프레임워크 개발자 교육 교재 및 실습 for Win (V4.0.0)

 

 

 

  • Spring Legacy를 사용해야 하므로 4.0.0 버전을 다운받음

 

  • 압축 풀기: C 드라이브로 변경

 

  • C 드라이브 eGovFrame 폴더 생성 확인

 

  • Spring Eclipse 실행

 

  • 기본 프로젝트 삭제: delete  from disk 체크

 

  • JDK 적용: window-preferences-installed JREs

 

  • tomcat 적용: window-preferences-Runtime Environments



  • window-preferences: web-browser 기본 설정

 

  1. Spring: Java 기반의 웹 프레임워크, 전자정부 프레임워크
  • 프레임워크의 필요성

-개발자의 간 능력 차이를 줄일 수 있는 도구

-국가시스템 선정 기준이 됨

-대기업 독과점 방지, 중소기업에 기회가 됨

 

  • Spring을 사용하는 이유

-기존 프레임워크의 복잡성 해결→경량화된 프레임워크

-프로젝트의 전체구조를 설계하는 용도

-다른 프레임워크의 통합 지원

-개발 생산성과 개발도구의 지원

 

  • 특징

-POJO(Plain Old Java Object) 기반의 구성: 특정 기술에 종속되지 않는 순수한 자바 객체

-의존성 주입(DI)을 통한 객체 간의 관계 구성: 하나의 객체가 다른 객체 없이 제대로 된 역할을 할 수 없는 것, 한 객체의 상태가 다른 객체에 영향을 미치는 것

 

(의존성 주입 사용 전)구현클래스에 의존

(의존성 주입 사용 후)인터페이스에 의존, 구현클래스에 의존하지 않음

 

-AOP(Aspect Oriented Programming)의 지원: 핵심관심사항과 공통관심사항을 분리하여 모듈화

 

 

[MVC 패턴 복습]

<MVC1>Model, View, Controller

 

<MVC2>Model, FrontController,  POJO, View

 

 

<MVC3>FrontController, Handler Mapping, ViewResolver, Controller, View

★view는 반드시 Front Controller를 통해 실행되어야 함

 



[게시글 홈 실습]

  • new-maven project
  • New Maven project: maven-archetype-web

 

 

  • Group id: com.smhrd
  • Artifact id: MVC3

 

  • properties: Java Build Path: JRE, Maven Dependencies Apply

 

 

  • view 파일을 모아놓을 폴더 생성: View는 반드시 Controller를 통해 실행되어야 하므로 webapp-WEB-INF 폴더에 별도의 폴더를 만들어서 view를 만든다.

-src-main-webapp-새 폴더 views 생성

 

 

-MessageSystem에서 다음 파일들을 가져와서 복사하기

 

  • Servers-modules-Add Web Module-현재 사용 중인 프로젝트 선택

 

  • MessageSystem 프로젝트에서 pom.xml, mybatis-config.xml BoardMapper.xml

db.properties.file sqlSessionManager.java, BoardDAO, BoardDTO 복사하여 가져오기

 

[FrontController.servlet]

  • Java package: kr.board.frontcontroller
  • class name: FrontController

 

 

  • URL mappings: *.do로 변경

 

  • method: inherited abstract methods, service 메소드 체크

 

 

 

  • web.xml에서 FrontController servlet-mapping 생성 확인

 

[BoardDAO]

  • 게시글 전체를 조회하는 메소드(selectList)

[Mapper.xml]

  • 게시글 전체를 조회하는 mapper 작성

 

[BoardDTO]

Alt+Shift+S: 기본/전체생성자 및 Getter, Setter 만들기

(기본생성자) (전체 생성자)

 

(getter&setter)

———————————————————————————————————————————————

[FrontController.servlet]페이지 요청받고 해당 POJO로 이동시키는 역할

  1. 요청 확인하기
  • 요청이 들어온 주소확인: request.getRequestURI()
  • 반복되는 ContextPath 찾기: request.getContextPath()
  • 주소값에서 ContextPath만 잘라내기: subString()

 

[Controller.java]POJO들을 통합할 Interface

 

[HandlerMapping.java]FrontController에 어떤 POJO를 호출해야 하는지 알려주는 역할

  • 검색이 빠른 자료구조 HashMap 사용하기

- HashMap<key(요청이 들어온 주소값), value(POJO들을 통합할 수 있는 interface)>

 

  • HandlerMapping 메소드: HashMap에 Controller key&value 등록

  • getController 메소드: [FrontController]에서 요청받은 주소값을 getController에 넣으면 Hashmap에 저장된 value값(Controller)을 [FrontController]에 return하기

 

[BoardListController.java]게시글 조회하여 객체 바인딩한 후 BoardMain으로 이동하는 역할

  • Controller Interface 상속받기: 파일 생성 시 Controller interface 등록하기, Controller 인터페이스의 추상메소드 requestHandler 메소드 자동 생성
  • BoardDAO에서 게시글 조회하는 메소드 가져오기
  • request에 게시글 list 저장하기
  • BoardMain으로 이동하는 viewname을 return하기

 



[FrontController]페이지 요청받고 해당 POJO로 이동시키는 역할

2. HandlerMapping에 어떤 POJO를 호출해야 하는지 요청하기

  • [HandlerMapping] 클래스 호출하기
  • getController 메소드 호출하여 요청받은 주소값의 value(Controller) 가져오기

 

3. 요청한 POJO를 실행시키기: 요청한 주소의 requestHandler 메소드(추상메소드) 호출 →이동할 viewname이 반환됨

[ViewResolver.java]viewname을 완전한 주소로 만드는 역할

  • [FrontCotroller]에서 반환한 viewname을 디렉토리와 확장자를 추가하여 완전한 주소를 return하기

(static 적용)객체 생성 없이 바로 호출가능(선택사항)

 

 

 

[FrontController]페이지 요청받고 해당 POJO로 이동시키는 역할

 

4. [ViewResolver] makeViewName 메소드 호출하여 viewname을 완전한 주소로 완성하기

(static 적용 후)객체 생성 필요없이 바로 호출가능(선택사항

 

5. 페이지 이동(forward 방식): ViewResolver를 통해 완성된 주소로 페이지 이동하기

[index.jsp]첫 화면이 BoardMain이 되도록 BoardListController로 연결하는 역할

 

[web.xml]index.js가 가장 먼저 실행되도록 설정하는 역할

index.js가 가장 먼저 실행되도록 <servlet> 태그 다음에 > <welcome-file-list> 태그 추가

 

[BoardMain.jsp]게시글 목록 출력하는 역할

  • BoardListController에서 request 영역에 객체바인딩한  boardList에서 EL 표현식으로 제목, 작성자, 작성일자 출력
  • jstl 사용하여 forEach문을 통해 데이터를 반복해서 출력

———————————————————————————————————————————————

 

 

[게시글 작성하기 실습]

[BoardMain]작성하러가기 클릭 시 무조건 FrontCotroller로 이동하도록 확장자에 .do 작성 

 

[HandlerMapping]HashMap에 BoardWriteController의 key&value 추가

 

[BoardWriteController]BoardWrite.jsp로 이동하는 역할

 

[BoardWrite.jsp]

작성하기 버튼 클릭 시 FrontController로 이동하도록 form 태그의 action값을 boardInsert.do로 변경

 

[BoardInsertController]

  • BoardWrite.jsp에서 post방식으로 데이터 전송했으므로 post 방식 인코딩 진행
  • request 영역에서 사용자가 입력한 title, writer, content 받아오기
  • 사용자가 입력한 값 BoardDTO로 묶기

[BoardDAO]

  • 게시글 등록 메소드: BoardController에서 사용자가 입력한 값(dto) 받아와서 insert하기

[Mapper]

  • 게시글 등록하는 mapper: 사용자가 입력한 제목, 작성자, 내용 insert하기

 

[BoardInsertController]

  • 사용자가 입력한 BoardDTO로 묶어서 BoardDAO에 넣기
  • insert 결과 확인

  • BoardMain으로 바로 이동하면 BoardListController로 거치지 않기 때문에 request에 객체 바인딩을 하지 않아 새로 입력한 게시글이 출력되지 않음
  • 다른 Cotroller로 이동할 때는 Redirect  방식 사용

 

[FrontController]

5. 페이지 이동방식 구분: 페이지 주소에 :/이 있는지 확인하여 이동방식 결정

  • POJO로 이동할 때: sendRedirect 방식

-split 함수로 BoardInsertController return값에서 페이지 주소만 분리하기

  • jsp로 이동할 때: forward 방식

-forward 방식 사용할 때만 ViewResolver를 사용

 

———————————————————————————————————————————————

[BoardListController]

  • [FrontController]에서 주소값에 따라 Redirect 방식으로 BoardListController로 이동함
  • 다시 게시글을 조회하고 객체 바인딩하는 과정을 통해 새로 작성한 게시글을 가져옴
  • BoardMain을 return하여 FrontController에서는 ViewResolver를 통해 주소를 완성하고 forward방식으로 BoardMain으로 이동함 

 

[BoardMain]

  • BoardMain에서는 BoardListController에서 새로 작성한 게시글을 객체 바인딩하였으므로 새로 작성한 게시글을 포함하여 게시글을 출력함

 

(BoardMain.jsp)

 

(BoardWrite.jsp)

 

'Spring' 카테고리의 다른 글

[Spring]6. Spring Boot&React 연동  (0) 2023.09.20
[Spring]5. Spring Boot  (0) 2023.09.15
[Spring]4. Ajax 비동기 통신  (0) 2023.09.14
[Spring]3. Spring Legacy 템플릿  (0) 2023.09.11
[Spring]2. 게시판 조회 및 삭제 실습  (0) 2023.09.09