Spring

[SpringBoot] MVC

shb 2022. 5. 12. 15:08

스프링부트는 웹루트가 (마치) 3개인 것처럼 동작한다.
/static
/templates
/webapp

 

static : 정적 웹소스 , JS, css, html, 이미지 ...
템플릿 : Thymeleaf, Mustache ...
applicaiotn.properties : 스프링부트 설정파일
webapp(웹루트) : JSP들...
pom.xml : 메이븐 설정파일

 

src/main/resources 의 static 폴더
이미지, JS, css, html  ← 이런 파일들을 위한 홈 디렉토리
static (정적) 이다 함은 서버입장에서 별도의 프로세스 없이 그대로 response만 하는 파일들

스프링 부트에선 홈 디렉토리가 3개라 보시면 됨
src/main/resource/static   ← 정적인 파일들
src/main/resource/templates   ← 템플릿 파일들
src/main/webapp  ← 동적인 파일들 (jsp ..)

 

Jasper 라이브러리 추가하기 : 방법1
Mavern Reporitories view 에서
‘index build ’  가 되어 있다면 다음과 같이 가능..

 

pom.xml 을 수정하면 꼭 Maven update 하자

 

* ViewResolver 설정
application.properties에서 설정
※단순 텍스트 파일이지만, 스프링에선 자동완성도 기능 지원한다.

 

handler의 리턴값 “home”                 ->             prefix    +      “home”    +      suffix  

뷰 (view) 완성 /WEB-INF/views/home.jsp    <-    /WEB-INF/views/  + home    +    .jsp  

 

 

* spring-webmvc 라이브러리의 DispatcherServlet

MVC 모델에서 Controller 역할.
일단 모든 request 를 받아서 Java POJO Controller 에 매핑시키고
결과(model, view) 를 받아서  View 에 전달
Controller 의 앞에 있는 Controller 라 하여 이를 FrontController 라 한다.
View 에 전달할때,  다양한 View 에 전달할수 있도록 ViewResolver 개념을 둔다. 

resource view resolver

 

HomeController.java

package com.lec.spring;

import java.time.LocalDateTime;
import java.util.Random;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
// Spring MVC 에서 'C' Controller 역할을 하는 클래스로 컨테이너에 생성
public class HomeController {
	
	public HomeController() {
		System.out.println("HomeController() 생성");
	}
	
	// Controller 안에는 request를 처리(handle) 하는 메소드들을 정의한다
	// 이러한 메소드들을 'handler' 라 한다.
	// handler 는 
	//  - '어떠한 request' 를 받아서, 
	//  - '어떠한 처리 (business logic)' 를 하고
	//  - '어떠한 response' 를 할지를 정의
	
	@RequestMapping("/")   //  "/" 라는 url 로 request 라 오면 아래 메소드가 처리(handle) 한다
	public String now(Model model) {  // Model : 데이터를 실어나르는 객체, View 까지 전달된다 
		
		System.out.println("/ : now() 호출 ");
		
		LocalDateTime t = LocalDateTime.now();
		model.addAttribute("serverTime", t.toString());  // Model 에 데이터 담기 (name-value)
		
		
		
		return "home";    // 리턴되는 "문자열" 은 -> View Resolver 로 전달
		
		//prefix = /WEB-INF/views/
		//suffix=.jsp
		
		// "/WEB-INF/views/" + "home" + ".jsp"  => /WEB-INF/views/home.jsp  로 포워딩
	}
	
	@RequestMapping("/aaa")
	public String home(Model model) {
		
		int a = new Random().nextInt(10);
		int b = new Random().nextInt(5);
		model.addAttribute("first", a);
		model.addAttribute("second", b);
		
		return "aaa/my";
		
		// "/WEB-INF/views/" + "aaa/my" + ".jsp"  => /WEB-INF/views/aaa/my.jsp  로 포워딩
	}
	
	
	@RequestMapping("/aaa/bbb")
	public String aaabbb(Model model) {   // 핸들러 '이름' 은 별로 중요하지 않다.
		int a = new Random().nextInt(10);
		int b = new Random().nextInt(5);
		model.addAttribute("first", a);
		model.addAttribute("second", b);
		
		return "aaa/bbb/title";  // => /WEB-INF/views/aaa/bbb/title.jsp
	}
	
	
	

} // end controller

my.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>my.jsp</title>
</head>
<body>
<h2>my.jsp - /aaa</h2>
${first } - ${second }<br>
<img src="cat.png"/><br>
</body>
</html>

'Spring' 카테고리의 다른 글

[Spring Boot] Validation  (0) 2022.05.12
[SpringBoot] Request Parameter  (0) 2022.05.12
[SpringBoot] RequestMapping  (0) 2022.05.12
[SpringBoot] Dependency Injection 의존주입  (0) 2022.05.12
[Spring] Spring이란  (0) 2022.05.11