스프링 프로젝트의 동작 과정을 실습을 통해서 알아보자
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
// 컨트롤러 지정, endpoint(요청한 메소드)에 따라 메소드선택
// JVM이 @RestController을 확인하면 현재 클래스를 힙에 생성한다.
// -> 모든 메소드를 소켓의 진입점으로 바꾼다.
// 문자열을 리턴하는 소켓
public class DemoController {
@GetMapping("/hello") // 매핑시키는 주소와 메소드의 이름은 1:1로 연결되어야함
public void hello(){
System.out.println("디버그 : hello");
// http://localhost:8080/ 검색하면 디버그 콘솔에 hello 출력
}
@GetMapping("/home")
public String home(){
String html = "<h1>HOME</h1><hr/>";
return html;
}
@GetMapping("/user")
public User user(){
User user = new User();
user.setId(1);
user.setUsername("ssar");
user.setPassword("1234");
return user; // MessageConverter 발동 (발동조건 - 오브젝트 리턴!!!)
// MessageConverter 가 알아서 json으로 파싱해준다
}
}
devtools 라이브러리
가 파일저장시 자동으로 컴파일을 해준다@RestController
가 붙은 클래스는 자동으로 힙에 생성이 되고 서버가 업데이트한다@RestController
= @Controller
+ @ResponseBody
- 데이터를 반환MessageConverter
이용이후 서버 실행후 결과들은
이번에는 jsp 파일을 매핑해보자
ViewResolver
설정 spring:
output:
ansi:
enabled: always
mvc:
view:
prefix: /WEB-INF/views/
suffix: .jsp
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
// 파일을 리턴하는 소켓
public class ViewController {
@GetMapping("/login")
public String login(){
return "login"; // ViewResolver 발동
// -> /src/main/webapp/WEB-INF/views/login.jsp 로 바꿔줌 !!!!
}
@GetMapping("/join")
public String join(){
return "join";
}
@GetMapping("/write")
public String board(){
return "board/write";
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
테스트 로그인
</body>
</html>
@Controller
는 뷰를 반환하기 위해 사용한다ViewResolver
는 페이지컨트롤러가 리턴한 뷰를 컴포넌트(jsp) 와 매핑 -> html
결과들은
여기까지는 정적인 페이지
동적인 페이지를 간단히 만들어 보자
import java.util.Random;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class ViewController {
@GetMapping("/login")
public String login(Model model){ // Model 객체이용
Random r = new Random();
int result = r.nextInt(10);
model.addAttribute("num",result); // 속성값을 추가한다
return "login";
}
}
// 매핑할 jsp 파일에 '${num}' 추가 ( <- num은 자바코드)
http://localhost:8080/login
을 입력할때마다 다른값( ${num}
<- 랜덤 ) 출력
@Controller
의 메소드는 Model
객체를 파라미터로 받을 수 있다.
-> Model클래스를 만들 필요없이 Spring에서 알아서 만들어 준다.
( JSP 였다면 request나 session 객체를 이용, Spring은 Model 객체를 사용함 )
서버단에서 자바코드를 해석해서 순수한 html( 문자열 )로 응답해주는걸 서버사이드렌더링( SSR )이라고 한다 ( 매번 요청마다 SSR 후 랜덤한 숫자를 리턴해줌 )
템플릿 엔진이( JSP ) html 코드안에 다른언어( 자바 )를 사용하게 해준다
( 추가내용 )
WEB-INF
는 보안폴더로 이용 - url 로 접근 못한다.
와! 감동감동!
길 좀 알려주세요!!
당신의 마음으로 가는 길!!