국비교육(22-23)

59일차(1)/Spring Boot(5) : Boot에서 jsp 사용하기

서리/Seori 2022. 12. 30. 12:42

59일차(1)/Spring Boot(5) : Boot에서 jsp 사용하기

 

 

Starter Project로 생성

 

- 프로젝트 기본 구성 설정

- 필요한 의존 Dependency를 설정하는 창이 나옴

 

- Maven의 특징 pom.xml

- 생성시에 한 기본세팅과 dependency가 들어가있다.

 

 

- 메인메소드가 있는 java 파일. 여기서 spring Framework가 시작된다.

- Legacy Project 에서는 tomcat을 start해서 서비스하는데,

  boot에서는 tomcat 서버가 내장되어있다. 따로 서버를 잡을 필요가 없다.

- 메인메소드만 실행해주면 알아서 서버가 시작된다.

 

- Run 하면 내부적으로 Tomcat 서버가 시작되고, 이 프로젝트를 서비스하게 된다.

 

- application.properties에서 포트번호, context경로를 설정할 수 있다.

 

- 시작된 프로세스를 우측 상단 디버깅 창으로 들어가서도 볼 수 있다.

- 현재 활성화되어 있는 프로젝트를 모두 볼 수 있다. 

- 여기서 시작되어있는 프로세스를 찾아서 중단할 수도 있다.

 


 

Boot04_MyBatis 프로젝트

 

- pom.xml에 jdbc, web, mybatis, devtools, oracle 이렇게 준비되어 있어야 한다.

- 하지만 이건 라이브러리만 준비된 것이고, DB 연동을 위한 세팅은 직접 해야한다.

 

- run해서 /member/list 경로를 요청하면 member 테이블에 있는 내용이 출력된다.

 

- 위와 같이 나오려면 application.properties에 커넥션 풀 설정(dataSource) 이 있어야 한다.

- DataSource를 어디서 어떤 계정으로 어떻게 얻어올 것인지 명시해준다.

 

- 이것을 hikari 데이터소스라고 부른다. 커넥션 풀을 해주는 소스이다.

 

- mapper의 위치도 이곳에 명시해주면 된다. 기존 Configuration의 역할!

 

 

- src의 resources가 classpath 위치로 잡힌다.

- classpath: 란? java 클래스입장에서는 초록색 화살표 위치 / 일반 자원입장에서는 분홍색 화살표 위치라고 보면 된다.

 

- mapper를 어떤 패키지안에 넣을 수도 있다.

- com.sy.boot04.mybatis 패키지 생성

 

- others로 생성-TestMapper

 

- 원하면 여기에 만들 수도 있다.

 

- classpath: 의 위치는 이렇게 둘 중 하나이다.
 src/main/java/ or src/main/resources/

 


- classpath: com/sy/boot04/mybatis/TestMapper.xml 라고 쓸 수도 있고
 classpath: mapper/MemberMapper.xml 이라고 쓸 수 도있다.

 

- 하지만 굳이? 2번이 편리하고 훨씬 낫다. 굳이 java 클래스가 들어가는 패키지안에 넣을 필요는 없다.

 

 

- 이렇게 mapper의 위치, dataSource 위치만 가르쳐 놓으면 된다.

- 그러면 sqlSessionTemplate Bean이 만들어진다.

 

- dao에서 sqlSessionTemplate 에서 만들어진 객체를 주입받아서 사용한다.

 

- Spring 에서는 servlet-context.xml에서 만들어서 사용했다.

- 필요한 DB 데이터를 어디서 얻어오는지(ref) 등등을 이 객체에서 명시해두었다.

 

- Spring Boot에서는 이런 내용들이 다 생략되어 있다.(숨어있다)

- DataSource, Mapper 위치만 알려주면 된다.

 

 

Controller

- Spring 5점대 버전에서는 @GetMapping이 있다.

- dao로 읽어온 결과를 json으로 출력하겠다는 뜻! RestController의 특징이다.

 

 

- List<MemberDto>에 담겨있어서 JSON문자열이 되어 출력되었다.

- 일반 @Controller 는 이렇게 응답하지 않는다. RestController이기 때문에 가능한 것!

 


 

Boot05_jsp 프로젝트 생성

 

- Spring Boot는 jsp 친화적이지는 않다. 장기적으로는 안쓰게 될 수도 있다.

 

- Spring Tool Suite 3를 지금 쓰고 있는데,

 STS 4에서 보면 new jsp가 아예 없다. 따로 설치해야 한다.

 

- Boot에서는 jsp 대신에 이것을 사용한다.

 

 

- 지금은 jsp를 사용하는 세팅이므로 이렇게 두개만!!(DB연동 x)

 

 

pom.xml에 추가

  <dependency>
     <groupId>org.apache.tomcat.embed</groupId>
     <artifactId>tomcat-embed-jasper</artifactId>
     <scope>provided</scope>
  </dependency>
  <dependency>
     <groupId>javax.servlet</groupId>
     <artifactId>jstl</artifactId>
  </dependency>

 

- jsp, taglib를 사용하기 위한 라이브러리 추가해주기!

 

 

 

- 하단 src-main에는 이제 webapp폴더가 없다. 직접 만들어주기!

- WEB-INF, views도 만들어주어야 한다.

 

- others- Web- jsp file 만들기

 

application.properties 에서 아래와 같이 설정

 

- 접두어, 접미어로 저 내용을 붙이겠다는 뜻!

- servlet-context.xml에서 하던 내용이다.

 

HomeController 생성

package com.sy.boot05;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
/*
 * [ jsp 페이지를 사용하기 위한 설정 ]
 * 
 * 1. pom.xml 에 tomcat-embeded-jasper 와 jstl dependency 를 추가한다.
 * 2. /webapp/WEB-INF/views/ 구조로 폴더를 src/main 하위에 만든다.
 * 3. view page의 prefix와 suffix 설정을 추가한다.
 *    만일 application.properties 에 설정을 할거라면
 *    
 *    spring.mvc.view.prefix=/WEB-INF/views/
 *    spring.mvc.view.suffix=.jsp
 *    
 *    이 내용을 추가한다.(추후에 설정을 다른 곳에서 해야 함)
 */
@Controller
public class HomeController {

	@GetMapping("/")
	public String home(HttpServletRequest request) {
		
		List<String> noticeList=new ArrayList<>();
		noticeList.add("Spring Boot 시작입니다.");
		noticeList.add("어쩌구...");
		noticeList.add("저쩌구...");
		
		request.setAttribute("noticeList", noticeList);
		
		return "home";
	}
}

- GET 방식, context의 최상위 요청에 대해서 이렇게 응답해주겠다는 것을 명시

 

- Run Spring Boot App 했을때 이미 9000번 포트가 사용되고 있다고 나올 수 있다.

- 그렇다면 현재 다른 프로젝트에서 사용되고 있기 때문!(서버가 돌아가고 있다)

- 디버그모드로 들어가서 해당 프로젝트를 terminate 시키면 된다.

 

 

- view page에 전해줄 내용이 있다면 HttpServletRequest 객체에 담아서 전달해주면 된다.

 

 

- 화면에 나오는 jsp는 똑같다.

- 내장 tomcat를 사용하기 위해 메인메소드에서 시작된다는 차이점은 있다.

 

[ jsp 페이지를 사용하기 위한 설정 ]

1. pom.xml 에 tomcat-embeded-jasper 와 jstl dependency 를 추가한다.
2. /webapp/WEB-INF/views/ 구조로 폴더를 src/main 하위에 만든다.
3. view page의 prefix와 suffix 설정을 추가한다.
   만일 application.properties 에 설정을 할거라면
    spring.mvc.view.prefix=/WEB-INF/views/
    spring.mvc.view.suffix=.jsp
   이 내용을 추가한다.(추후에 설정을 다른 곳에서 해야 함)