Spring Boot 개발 스택
프로젝트 만들기
컨트롤러 만들기
@RestController 사용
url 요청을 메서드의 어노테이션으로 요청한다. @RequestMapping("/index")
HomeController.java
package com.webstore.web.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HomeController {
@RequestMapping("/index")
public String sampleMethod() {
return "Hello Spring Boot";
}
@RequestMapping("/gumi")
public String sampleMethod2() {
return "Hello Gumi!!";
}
}
View - 서버 실행하기
url 요청을 메서드의 어노테이션으로 요청 확인
구조 만들기 - html, jsp 테스트
webapp는 dynamic web project의 WebContent와 같은 기능을 한다.
sample.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>WebStore</title>
</head>
<body>
Welcome to WebStroe!
</body>
</html>
실행화면
jsp를 화면처리 하기위해서는 maven 의존성 추가(jasper) 해줘야 한다.
version를 제거하면 알아서 다운로드한다.
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.webstore</groupId>
<artifactId>SpringWeb2</artifactId>
<version>1.0</version>
<name>SpringWeb2</name>
<description>WebStore Spring Boot Project</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-jasper -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<version>10.0.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
index.jsp
<%@ 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>
</body>
</html>
실행화면
MVC 동작 시키기
컨트롤러를 목적에 따라서 분리함. - 공지사항 간단한 예제
기존의 컨트롤러는 서블릿으로 되어있어 단독으로 존재할수 없다.
하지만 SB에서는 톰켓과 무관한 class이다.
Model 사용하기
@Controller 어노테이션 사용
Model은 model2에서 커맨드
NoticeController.java
package com.webstore.web.controller.customer;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller //뷰페이지를 설정하기 위한 컨트롤러
public class NoticeController {
@RequestMapping("/customer/notice/list") //list, detail, edit, reg, del
public String list(Model model) {
model.addAttribute("test", "Hello gumi!!");
return "list.jsp"; //앞의 경로가 동일한 경우는 앞부분 생략가능함.
}
@RequestMapping("/customer/notice/detail")
public String detail() {
return "";
}
}
list.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>공지목록 ${test }</title>
</head>
<body>
</body>
</html>
구조 만들기 - WEB-INF
jsp 경로를 변경해준다. WEB-INF/view 만들어준다.
공통적인 부분을 @RequestMapping
HomeController.java
package com.webstore.web.controller.customer;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller //뷰페이지를 설정하기 위한 컨트롤러
@RequestMapping("/customer/notice/")
public class NoticeController {
@RequestMapping("list") //list, detail, edit, reg, del
public String list(Model model) {
model.addAttribute("test", "Hello Daegu!!");
return "/WEB-INF/view/customer/notice/list.jsp"; //앞의 경로가 동일한 경우는 앞부분 생략가능함.
}
@RequestMapping("detail")
public String detail() {
return "/WEB-INF/view/customer/notice/detail.jsp";
}
}
view에 대한 리소스 경로명 줄이기 - view resolver
설정하는 추가적인 부분 기술 application.properties
application.properties
spring.mvc.view.prefix=/WEB-INF/view/
spring.mvc.view.suffix=.jsp
NoticeController.java
package com.webstore.web.controller.customer;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller //뷰페이지를 설정하기 위한 컨트롤러
@RequestMapping("/customer/notice/")
public class NoticeController {
@RequestMapping("list") //list, detail, edit, reg, del
public String list(Model model) {
model.addAttribute("test", "Hello Pusan!!");
return "customer/notice/list"; //앞의 경로가 동일한 경우는 앞부분 생략가능함.
}
@RequestMapping("detail")
public String detail() {
return "customer/notice/detail";
}
}
MVC model2 방식의 변화
사용자의 요청은 tomcat이 받고 web.xml에 작성 했었다.
프론트 컨트롤러의 역할을 spring에서는 Dispatcher로 사용
: Dispatcher(프론트 컨트롤러)를 집중화하기 전모델
: Dispatcher(프론트 컨트롤러)를 집중화한 후 모델
디스패처서블릿이 기존커맨드 처리