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 |