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 기본 설정
- 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로 이동시키는 역할
- 요청 확인하기
- 요청이 들어온 주소확인: 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 |