Basics
- Spring Boot Tool4의 사용법은 Spring Framework와 거의 유사
Settings
#server.port
server.port=9002 #지정된 port번호로 web host 연결
#jsp setting
spring.mvc.view.prefix=/WEB-INF/today/
spring.mvc.view.suffix=.jsp
spring.devtools.livereload.enabled=true
- src/main/resources>application.properties
- server.port 지정(host 번호), 매핑 파일명 처리 설정 등의 기초 설정 작업
<dependencies>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
- pom.xml
- 사용하고자 하는 기능을 mvnrepository에서 복사하여 <dependencies>내에 삽입
Scan Components
Main_SpringBootApplication
@SpringBootApplication
@ComponentScan({"boot.test","hello.boot","my.info"})
public class SpringBootEx1Application {
public static void main(String[] args) {
SpringApplication.run(SpringBootEx1Application.class, args);
}
}
- Boot4 설정상 Root Package 하위의 ‘(Root Package)Application.java’ 클래스가 Main 메서드로 인식
- 해당 Package는 @SpringBootApplication 어노테이션에 자동 등록 (@SpringBootApplication에 등록된 Package는 Root로 인식되어 Controller Scan 범위에 자동 포함)
- Root Package를 제외한 Package의 Controller를 스캔하기 위해서는 @ComponentScan에 등록해야 함
- 단일 Package는 ( ) 안에 입력하면 되지만, 복수일 경우 { }로 묶어서 입력
@SpringBootApplication
@ComponentScan({"boot.*"})
public class SpringBootEx2Application {
public static void main(String[] args) {
SpringApplication.run(SpringBootEx2Application.class, args);
}
}
- 일반적으로 Root Package 이외의 Package를 스캔할 경우 와일드카드(*)를 사용
Mapping
Root_Mapping Route
@RestController
public class HelloController {
@GetMapping({"/","/sist/hello"})
public HashMap<String, String> hello() {
HashMap<String, String> data=new HashMap<>();
data.put("message", "오늘은 스프링부트 배우늘날");
return data;
}
}
- 임의의 Controller
- @SpringBootApplication에 등록된 Controller가 Root로 인식되지만, 해당 어노테이션이 없다면 Root(”/”)로 매핑된 Controller가 해당 기능을 대체
- Spring Framework와 달리 동시에 복수의 매핑 주소에 매핑 가능
- 해당 복수의 매핑 주소는 동일한 Controller 사용 (주소는 다르지만 하나의 절대 경로 공유)
- 다만 각 매핑 주소 간 위상이나 중간 경로가 다를 경우, 같은 링크를 통해 페이지 이동을 하더라도 하나 이상에서 오류 발생 가능
Substitute of Getter, Setter
DTO
@Data
public class PersonDto {
private String irum;
private String java;
private String spring;
}
- Boot4에서는 DTO 이용 시 Getter, Setter, ToString 생성 불필요
- 각각 @Getter, @Setter, @ToString 어노테이션이 대체하며, @Data가 앞의 세 가지 기능을 모두 수행 가능
<body>
<form action="read" method="post">
<table class="table table-bordered" style="width: 300px">
<tr>
<th>이름</th>
<td><input type="text" name="irum" class="form-control"></td>
</tr>
<tr>
<th>자바점수</th>
<td><input type="text" name="java" class="form-control"></td>
</tr>
<tr>
<th>스프링점수</th>
<td><input type="text" name="spring" class="form-control"></td>
</tr>
<tr>
<td colspan="2" align="center">
<button type="submit" class="btn btn-outline-info">전송</button>
</td>
</tr>
</table>
</form>
</body>
Controller
@Controller
public class FormController {
@PostMapping("/sist/read")
public String write1(@ModelAttribute("dto") PersonDto dto) {
return "result/result2";
}
}
- DTO 사용 시 Setter, Getter 없음에도 해당 기능 사용 가능
- @ModelAttribute 어노테이션은 전달 받은 데이터의 name 값과 일치하는 DTO의 변수에 값을 set하여 저장 (DTO 필드의 변수명은 해당 필드 클래스의 첫 글자만 소문자로 변환, 임의의 변수명 지정도 가능)
- @ModelAttribute 사용 시 자동으로 지정된 매핑 주소로 데이터 전송 (Model이나 ModelAndView로 데이터 전달 불필요)
@Controller
public class FormController {
@PostMapping("/sist/myread")
public String myread(Model model,@RequestParam Map<String, String> map) {
model.addAttribute("map", map);
return "result/result3";
}
}
- Map 사용 시 @RequestParam 어노테이션 생략 불가
- Map은 Request에 저장된 데이터의 name을 Key 값으로, 입력 값은 Value 값으로 자동 변환
- Map은 @ModelAttribute와 달리 데이터를 받아서 변환만 가능할 뿐, 매핑 주소로 전달하지는 못함
- 전달 받은 각각의 데이터를 각각 전달하거나, Map 자체를 전달할 수도 있음 → 지정된 매핑 주소에서 데이터를 받을 시 (map).(Key) 형식으로 호출 가능
와 정리보소~?