본문 바로가기

spring/spring

Step03_MyBatis (ModelAndView, redirect)

 

ModelAndView, redirect 를 설명하기 위하여 기존 MemberController의 @Controller를 해제하고 MemberController2를 만들어 ModelAndView, redirect를 사용하여 코드를 재구성하였다.

 

기존 MemberController - 상단 @Controller 제거

package com.gura.step03.member.controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.gura.step03.member.dao.MemberDao;
import com.gura.step03.member.dto.MemberDto;


public class MemberController {
   
   // spring bean container 로 부터 MemberDao 인터페이스 type 의 참조값을 DI 받는다. 
   @Autowired
   private MemberDao dao;
   
   @RequestMapping("/member/update")
   public String update(MemberDto dto) {
	   //MemberDao 객체를 이용해서 회원정보를 수정 반영하고
	   dao.update(dto);
	   //view page 로 forward 이동해서 응답
	   return "member/update";
   }
   
   @RequestMapping("/member/updateform")
   public String updateform(int num, HttpServletRequest request) {
	   //MemberDao 객체를 이용해서 수정할 회원의 정보를 DB에서 불러온다.
	   MemberDto dto=dao.getData(num);
	   
	   //view page에 전달할 모델(data) 를 request 영역에 담는다.
	   request.setAttribute("dto", dto);
	   
	   //view page 로 forward 이동해서 수정할 회원폼을 출력해 준다.
	   return "member/updateform";
   }
   
   @RequestMapping("/member/delete")
   public String delete(int num) {
	   //MemberDao 객체를 이용해서 DB 에서 삭제하고
	   dao.delete(num);
	   //view page로 forward 이동해서 응답한다.
	   return "member/delete";
   }
   
   @RequestMapping("/member/insert")
   public String insert(MemberDto dto) {
	   //MemberDao 객체를 이용해서 추가하기
	   dao.insert(dto);
	   //view page로 forward 이동해서 응답하기
	   return "member/insert";
   }
   
   @RequestMapping("/member/insertform")
   public String insertform() {
	   
	   return "member/insertform";
   }
   
   @RequestMapping("/member/list")
   public String list(HttpServletRequest request) {
      
      
      List<MemberDto> list=dao.getList();
      
      request.setAttribute("list", list);
      /*
       *  /WEB-INF/views/member/list.jsp 페이지로 forward 이동해서 
       *  회원 목록을 출력하면된다.
       *  
       *  그런데... 회원목록은 어떻게 얻어오지? 
       */
      return "member/list";
   }
}

 

MemberController2

package com.gura.step03.member.controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.gura.step03.member.dao.MemberDao;
import com.gura.step03.member.dto.MemberDto;

@Controller
public class MemberController2 {
   
   // spring bean container 로 부터 MemberDao 인터페이스 type 의 참조값을 DI 받는다. 
   @Autowired
   private MemberDao dao;
   
   @RequestMapping("/member/update")
   public String update(MemberDto dto) {
      //MemberDao 객체를 이용해서 회원정보를 수정 반영하고 
      dao.update(dto);
      //view page 로 forward 이동해서 응답 
      return "member/update";
   }
   
   
   @RequestMapping("/member/updateform")
   public ModelAndView updateform(int num, ModelAndView mView) {
      //MemberDao 객체를 이용해서 수정할 회원의 정보를 DB 에서 불러온다.
      MemberDto dto=dao.getData(num);
      
      //ModelAndView 객체를 직접생성하지 않고 컨트롤러의 메소드 인자로 받아서 사용할수도 있다. 
      //ModelAndView mView=new ModelAndView();
      
      mView.addObject("dto", dto);
      mView.setViewName("member/updateform");
      
      return mView;
   }
   
   @RequestMapping("/member/delete")
   public String delete(int num) {
      //MemberDao 객체를 이용해서 DB 에서 삭제하고
      dao.delete(num);
      /* /member/list.do  요청을 다시 하도록 리다일렉트 이동 시킨다
            리다일렉트 이동은 특정경로로 요청을 다시 하라고 강요하는 응답이다.
            
         "redirect: context 경로를 제외한 요청을 다시할 절대경로 " 
      */
      return "redirect:/member/list.do";
   }
   
   @RequestMapping("/member/insert")
   public ModelAndView insert(MemberDto dto) {
      //MemberDao 객체를 이용해서 추가하기 
      dao.insert(dto);
      
      // ModelAndView 객체의 생성자의 인자로 view page 의 정보를 넣어줄수도 있다.
      return new ModelAndView("member/insert");
   }
   
   
   @RequestMapping("/member/insertform")
   public ModelAndView insertform(ModelAndView mView) {
      
      //모델은 담지 않고 view page 정보만 담아서 리턴할수도 있다 
      mView.setViewName("member/insertform");
      return mView;
   }
   
   @RequestMapping("/member/list")
   public ModelAndView list() {
      
      //view page 에 전달할 모델(data) 
      List<MemberDto> list=dao.getList();
      
      // Model 과 view page 의 정보를 동시에 담을 객체를 생성해서 
      ModelAndView mView=new ModelAndView();
      // view page 에 전달할 모델을 list 라는 키값으로 담고 
      mView.addObject("list", list);
      // view page 의 정보도 담고 
      mView.setViewName("member/list");
      // ModelAndView 객체를 리턴해주면 동일하게 동작한다. 
      return mView;
      
   }
}

 

list 비교

 

기존 list

   @RequestMapping("/member/list")
   public String list(HttpServletRequest request) {
      
      
      List<MemberDto> list=dao.getList();
      
      request.setAttribute("list", list);
      /*
       *  /WEB-INF/views/member/list.jsp 페이지로 forward 이동해서 
       *  회원 목록을 출력하면된다.
       *  
       *  그런데... 회원목록은 어떻게 얻어오지? 
       */
      return "member/list";
   }

변경 list

   @RequestMapping("/member/list")
   public ModelAndView list() {
      
      //view page 에 전달할 모델(data) 
      List<MemberDto> list=dao.getList();
      
      // Model 과 view page 의 정보를 동시에 담을 객체를 생성해서 
      ModelAndView mView=new ModelAndView();
      // view page 에 전달할 모델을 list 라는 키값으로 담고 
      mView.addObject("list", list);
      // view page 의 정보도 담고 
      mView.setViewName("member/list");
      // ModelAndView 객체를 리턴해주면 동일하게 동작한다. 
      return mView;
      
   }

 

updateform

 

기존 updateform

   @RequestMapping("/member/updateform")
   public String updateform(int num, HttpServletRequest request) {
	   //MemberDao 객체를 이용해서 수정할 회원의 정보를 DB에서 불러온다.
	   MemberDto dto=dao.getData(num);
	   
	   //view page에 전달할 모델(data) 를 request 영역에 담는다.
	   request.setAttribute("dto", dto);
	   
	   //view page 로 forward 이동해서 수정할 회원폼을 출력해 준다.
	   return "member/updateform";
   }

변경 updateform

   @RequestMapping("/member/updateform")
   public ModelAndView updateform(int num, ModelAndView mView) {
      //MemberDao 객체를 이용해서 수정할 회원의 정보를 DB 에서 불러온다.
      MemberDto dto=dao.getData(num);
      
      //ModelAndView 객체를 직접생성하지 않고 컨트롤러의 메소드 인자로 받아서 사용할수도 있다. 
      //ModelAndView mView=new ModelAndView();
      
      mView.addObject("dto", dto);
      mView.setViewName("member/updateform");
      
      return mView;
   }

 

delete

 

기존 delete

   @RequestMapping("/member/delete")
   public String delete(int num) {
	   //MemberDao 객체를 이용해서 DB 에서 삭제하고
	   dao.delete(num);
	   //view page로 forward 이동해서 응답한다.
	   return "member/delete";
   }

변경 delete

   @RequestMapping("/member/delete")
   public String delete(int num) {
      //MemberDao 객체를 이용해서 DB 에서 삭제하고
      dao.delete(num);
      /* /member/list.do  요청을 다시 하도록 리다일렉트 이동 시킨다
            리다일렉트 이동은 특정경로로 요청을 다시 하라고 강요하는 응답이다.
            
         "redirect: context 경로를 제외한 요청을 다시할 절대경로 " 
      */
      return "redirect:/member/list.do";
   }

 

insertform

 

기존 insertform

   @RequestMapping("/member/insertform")
   public String insertform() {
	   
	   return "member/insertform";
   }

변경 insertform

   @RequestMapping("/member/insertform")
   public ModelAndView insertform(ModelAndView mView) {
      
      //모델은 담지 않고 view page 정보만 담아서 리턴할수도 있다 
      mView.setViewName("member/insertform");
      return mView;
   }

 

insert

 

기존 insert

   @RequestMapping("/member/insert")
   public String insert(MemberDto dto) {
	   //MemberDao 객체를 이용해서 추가하기
	   dao.insert(dto);
	   //view page로 forward 이동해서 응답하기
	   return "member/insert";
   }

변경 insert

   @RequestMapping("/member/insert")
   public ModelAndView insert(MemberDto dto) {
      //MemberDao 객체를 이용해서 추가하기 
      dao.insert(dto);
      
      // ModelAndView 객체의 생성자의 인자로 view page 의 정보를 넣어줄수도 있다.
      return new ModelAndView("member/insert");
   }

'spring > spring' 카테고리의 다른 글

스프링 프레임 워크 개념 정리  (0) 2022.09.02
Step03_MyBatis ( @service )  (0) 2022.09.01
Step03_todo list 만들기  (0) 2022.08.31
Step03_MyBatis (Member 회원목록)  (0) 2022.08.31
Step02_RequestParam  (0) 2022.08.30