[프로젝트/JAVA] 6일차 - Controller, View

    728x90
    반응형

    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를 관리하고, 매핑한다. 아래의 링크에서 컨트롤러 작성법을 확인할 수 있다.

     

    [프로젝트/JAVA] 4일차 - Controller

    2021.05.19 32번째 포스팅 입사 72일차. 오늘은 Controller를 만들어 주소를 만들고, 주소를 매핑하는 방법을 알아보려고 한다. Controller는 웹페이지에서 사용할 주소를 만들고, 연결시켜준다고 생각하

    limreus.tistory.com

     

      ③ 경로 : 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에서 가져온 데이터가 표시된다.

     

    [프로젝트/JAVA] 6일차 - 템플릿엔진(Thymeleaf)

    2021.06.15 39번째 포스팅 입사 99일차. 이제 모든 준비가 끝났다. View에서 사용자의 요청을 받아 DB의 데이터에 변형을 주는 작업만이 남아있다. 오늘은 이미 입력된 데이터를 가져와서 View에 표시하

    limreus.tistory.com

     

      ④ 결과를 확인해보자

     

     

    다음포스팅의 주제

     

    728x90
    반응형

    댓글