2021.06.25
42번째 포스팅
입사 109일차.
이제 모든 준비가 끝났다. View에서 사용자의 요청을 받아 DB의 데이터에 변형을 주는 작업만이 남아있다.
오늘은 Controller를 만들어서 DB에서 받은 데이터를 View에 표시해보려고 한다.
아래에 작성하는 내용들은 5일 차까지 똑같이 작성했다는 전제가 깔려있다.
1. Spring MVC 모델 데이터의 흐름
① Spring Framework안의 데이터는 정해진 흐름대로 흘러가야 한다.
② View(화면) > Controller > Service > Repository > MyBatis(Mapper) > DB(MySQL)의 순서대로 데이터는 이동한다.
③ 반대로 SELECT 쿼리를 작성해서 DB의 데이터를 View로 가져오는 경우,
DB > MyBatis(Mapper) > Repository > Service > Controller > View(동적 페이지)의 역순으로 진행된다.
④ SELECT를 이용해서 가져오는 데이터를 View에 표시하려면 View는 동적 페이지가 되어야 한다.
2. Controller
① View와 Service 사이에 위치한다.
② URI를 관리하고, 매핑한다. 아래의 링크에서 컨트롤러 작성법을 확인할 수 있다.
③ 경로 : src/main/java/com/example/프로젝트명/**/controller/
※ 저는 src/main/java/com/example/프로젝트명/admin/controller/TableController.java를 만들었습니다.
④ Controller클래스를 잘 만들었다면 아래의 사진과 같이 코드가 작성될 것이다.
1
2
3
4
5
6
7
8
|
package com.example.test.admin.controller;
import org.springframework.stereotype.Controller;
@Controller
public class TableController {
}
|
cs |
⑤ 오늘은 @GetMapping 어노테이션을 사용해보려고 합니다. ( ※ 아래의 코드는 같은 기능입니다. )
1. @RequestMapping 어노테이션 작성 @RequestMapping(value="" method=RequestMethod.GET) |
2. @GetMapping 어노테이션 작성 @GetMapping("") |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
package com.example.test.admin.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class TableController {
@GetMapping("/매핑할 URI")
public String getTableInfo() {
return "html의 경로";
}
}
|
cs |
⑥ 지금까지는 위의 코드처럼 html의 경로를 return에 작성해야 하기 때문에 메소드의 자료형은 String이었습니다.
하지만, 지금부터 작성할 메소드는 html의 경로와 DB에서 가져온 데이터까지 2가지를 return에 작성해야 합니다.
이제부터 자주 사용하게 될 자료형은 ModelAndView입니다.
3. ModelAndView
① html의 경로 혹은 URI와 DB에서 가져온 데이터를 같이 View에서 받을 수 있도록 사용하는 객체.
② addObject("Key", Value) 메소드를 사용해서 데이터를 담을 수 있다. ( Key, Value 형식 )
③ setViewName("html경로") 메소드를 사용해서 html의 경로를 담을 수 있다.
4. ModelAndView를 사용해서 View로 데이터 전달하기
① URI와 html경로를 작성한다.
※ 저는 매핑할 URI = "/mavChk"
html의 경로 = "admin/index"
와 같이 작성했습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
package com.example.test.admin.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class TableController {
@GetMapping("/mavChk")
public String getTableInfo() {
return "admin/index";
}
}
|
cs |
② 자료형을 ModelAndView로 바꿔준다.
③ 메소드안에 new연산자를 이용하여 ModelAndView객체를 동적메모리 영역에 할당해준다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
package com.example.test.admin.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class TableController {
@GetMapping("/mavChk")
public ModelAndView getTableInfo() {
ModelAndView mav = new ModelAndView();
return "admin/index";
}
}
|
cs |
④ addObject() 메소드를 이용해서 Key, Value 형식으로 데이터를 담아 View로 전달할 수 있다.
※ Key는 String 타입입니다.
⑤ setViewName() 메소드를 이용해서 html의 경로를 담아 View로 전달할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
package com.example.test.admin.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class TableController {
@Autowired
TableService tableService;
@GetMapping("/mavChk")
public ModelAndView getTableInfo() {
ModelAndView mav = new ModelAndView();
// 1. addObject() 메소드를 사용해서 "name" 이라는 String타입의 Key에 데이터를 저장
mav.addObject("name", tableService.getTableInfo());
// 2. setViewName() 메소드를 사용해서 html의 경로를 저장
mav.setViewName("admin/index");
return mav;
}
}
|
cs |
5. View ( Thymeleaf )
① 미리 작성해놓은 html의 프로퍼티명을 확인한다. ( 11번 라인의 ${name} )
② ModelAndView.addObject() 메소드를 사용해서 작성한 Key를 확인한다. ( "name" )
③ 두가지가 일치하면 View에 DB에서 가져온 데이터가 표시된다.
④ 결과를 확인해보자
다음포스팅의 주제
'포트폴리오 > CCS' 카테고리의 다른 글
[프로젝트/JAVA] 7일차 - form태그를 활용한 INSERT - 2 (0) | 2021.06.28 |
---|---|
[프로젝트/JAVA] 7일차 - form태그를 활용한 INSERT - 1 (0) | 2021.06.26 |
[프로젝트/JAVA] 6일차 - Service, Repository(DAO) (2) | 2021.06.20 |
[프로젝트/JAVA] 6일차 - MyBatis(Mapper.xml) (2) | 2021.06.16 |
[프로젝트/JAVA] 6일차 - 템플릿엔진(Thymeleaf) (0) | 2021.06.14 |
댓글