뷰 리졸버View Resolver

bethe·2022년 8월 24일
0

Springboot

목록 보기
5/46

Chapter 3에서 RestController와 GetMapping 어노테이션을 이용해 데이터를 응답해 주었었다.

이번엔 데이터를 응답해 주지 않고 '데이터가 담긴 파일'을 응답하여 줘보자.

이 때 주의해야 할 점은, url 요청이든 uri 요청이든 결국 '데이터를 ByteStream으로 전송'한다는 점이다. 파일을 응답할 경우 결국 파일의 데이터를 BR로 읽어서 데이터를 전송한다.

1. 뷰와 뷰 리졸버

(1) 뷰 View

데이터를 받기 위해서는 어떤 형태로든 전달을 해야 한다. 이 형태를 View라고 한다.

(2) 뷰 리졸버 View Resolver

그런데 '데이터가 담긴 파일'을 줄 때에는 return에 파일 경로를 정확히 설정해 주어야 한다. 이 때, 파일이름으로 파일 위치를 찾을 수 있어야 하는데 이것을 가능하게 해주는 것이 View Resolver이다.


2. 뷰 리졸버 설정

(1) tomcat-embed-jasper과 jstl 라이브러리

그런데 파일 위치를 찾기란 쉽지 않다!
그래서 경로를 잡아주는 라이브러리(tomcat-embed-jasper)를 설치해주자.
또한 jsp 문법이 내장된 jstl 라이브러리도 설치하자.

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	compileOnly 'org.projectlombok:lombok'
	developmentOnly 'org.springframework.boot:spring-boot-devtools'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	// https://mvnrepository.com/artifact/com.google.code.gson/gson
	implementation group: 'com.google.code.gson', name: 'gson', version: '2.9.0'
	// https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-jasper
	implementation group: 'org.apache.tomcat.embed', name: 'tomcat-embed-jasper', version: '9.0.65'
	// https://mvnrepository.com/artifact/javax.servlet/jstl
	implementation group: 'javax.servlet', name: 'jstl', version: '1.2'
}

✔️ 이 때 꼭 자신의 Java 버전과 tomcat jasper 라이브러리의 호환 버전을 맞춰줘야 한다. 꼭 확인하고 호환이 되는 버전의 라이브러리를 다운받자. (본인은 Java 11과 tomcat jasper 9.0.65 사용)


(2) 뷰 리졸버 설정하기 (경로 설정하기)

라이브러리를 다운 받고 나면 뷰를 찾기 위한 루트 폴더가 생긴다.
/demo/src/main/webapp/ (root folder)

이 뒤로 규약에 맞춰 이러한 경로로 폴더를 생성해야 한다.
/WEB-INF/views/return할 파일이름.jsp

뷰를 찾기 위한 폴더 경로 : /demo/src/main/webapp/WEB-INF/views/return할 폴더이름.jsp


우리는 /WEB-INF/views/ 또한 라이브러리로 경로를 자동 지정해주어 return할 파일 이름만 적을 거다.
application.properties에서 prefix와 suffix에 경로를 지정해주자.

(3) 폴더 경로 만들기

  1. 위에서 설정한 경로에 맞춰 폴더를 생성해준다. (main/webapp/WEB-INF/views)
    참고로 맨 위의 src/main폴더와 밑의 src/main폴더는 같은 폴더이다.

  1. views 파일에 return할 파일 또한 만들어준다. (new-other-jsp 검색-Web에 Jsp File)
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>home</h1>
</body>
</html>

3. Controller 어노테이션이 있는 class 만들기 (코드작성)

package site.metacoding.demo.web;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller

public class FileController {

	@GetMapping("/file/home")
	public String home() {
		return "home";
	}
}

💻 결과 :

profile
코딩을 배우고 기록합니다. 읽는 사람이 이해하기 쉽게 쓰려고 합니다.

0개의 댓글