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>
	<!-- https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-jasper -->
	<dependency>
	    <groupId>org.apache.tomcat.embed</groupId>
	    <artifactId>tomcat-embed-jasper</artifactId>
	    <scope>provided</scope>
	</dependency>

	<!-- https://mvnrepository.com/artifact/jstl/jstl -->
	<dependency>
	    <groupId>jstl</groupId>
	    <artifactId>jstl</artifactId>
	    <version>1.2</version>
	</dependency>
</dependencies>
  • pom.xml
  • 사용하고자 하는 기능을 mvnrepository에서 복사하여 <dependencies>내에 삽입

Scan Components

Main_SpringBootApplication

@SpringBootApplication //root
@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가 앞의 세 가지 기능을 모두 수행 가능

View_Form

<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>
  • 데이터 전송을 위한 <form>

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") //map으로 읽을경우 name이 key값으로 입력값은 value
	public String myread(Model model,@RequestParam Map<String, String> map) { //Map은 RequestParam 생략불가
		//Map을 전달하면 map.name형식으로 받아야함
		
		/*model.addAttribute("name", map.get("name"));
		model.addAttribute("blood", map.get("blood"));
		model.addAttribute("age", map.get("age"));*/
		
		model.addAttribute("map", map);
		
		return "result/result3";
	}
}
  • Map 사용 시 @RequestParam 어노테이션 생략 불가
  • Map은 Request에 저장된 데이터의 name을 Key 값으로, 입력 값은 Value 값으로 자동 변환
  • Map은 @ModelAttribute와 달리 데이터를 받아서 변환만 가능할 뿐, 매핑 주소로 전달하지는 못함
  • 전달 받은 각각의 데이터를 각각 전달하거나, Map 자체를 전달할 수도 있음 → 지정된 매핑 주소에서 데이터를 받을 시 (map).(Key) 형식으로 호출 가능
profile
초보개발자

1개의 댓글

comment-user-thumbnail
2023년 10월 20일

와 정리보소~?

답글 달기