08. MVC 1 - 컨트롤러, 뷰 구현
728x90

Controller

get 방식과 post 방식

@Controller
public class HelloController {

	@GetMapping("/hello")
    public String hello(Model model,
    		@RequestParam(value = "name", required = false) String name) {
        model.addAttribute("greeting", "안녕하세요, " + name);
        return "hello";
    }
    
    @PostMapping("/hello")
    public String hello(Model model,
    		@RequestParam(value = "name", required = false) String name) {
        model.addAttribute("greeting", "안녕하세요, " + name);
        return "hello";
    }
}

여러 개의 요청 매핑

@Controller
@RequestMapping("/register")	// 각 메서드에 공통되는 경로
public class RegistController {

	@RequestMapping("/step1")	// 공통 경로를 제외한 나머지 경로
    public String handleStep1() {
    	ruturn "register/step1";
    }
    
	@RequestMapping("/step2")	// 공통 경로를 제외한 나머지 경로
    public String handleStep1() {
    	ruturn "register/step1";
    }
}

요청 파라미터 접근

 - 약관에 동의할 경우 값이 true인 'agree' 요청 파라미터 값을 POST 방식으로 전송

 - 폼에서 지정한 agree 요청 파라미터의 값을 이용해서 약관 동의 여부 확인

HttpServletRequest

@PostMapping("/register")
public String register(HttpServletRequest request) {
	String agreeParam = request.getParameter("agree");
    if(agreeParam == null || !agreeParam.equals("true")) {
    	return "error";
    }
    return "register";
}

@RequestParam

@PostMapping("/register")
public String register(
	@RequestParam(value="agree", defaultValue="false") Boolean agree) {
    if(!agree) {
    	return "error";
    }
    return "register";
}

리다이렉트 처리

 - POST 방식을 처리하는 메서드는 주소를 직접 입력할 때 사용되는 GET 방식의 요청은 처리하지 않음 -> 405 오류

@GetMapping("/register/step2")
public String handleStep2Get() {
	return "redirect:/register/step1";
}

 

Model

 - 요청 매핑 애노테이션이 적용된 메서드의 파라미터로 Model을 추가

 - Model 파라미터의 addAttribute() 메서드로 뷰에서 사용할 데이터 전달

 - 첫 번째 파라미터는 속성 이름

 - JSP에서 ${greeting}의 형식으로 속성값에 접근

@Controller
public class HelloController {

	@RequestMapping("/hello")
    public String hello(Model model,
    		@RequestParam(value="name", required=false) String name) {
        model.addAttribute("greeting", "안녕하세요, " + name);
        return "hello";
    }
}

 

 

ModelAndView

 - Model을 이용해서 뷰에 전달할 데이터 설정

 - 결과를 보여 줄 뷰 이름을 리턴

 - 요청 매핑 애노테이션을 적용한 메서드는 String 타입 대신 ModelAndView를 리턴할 수 있다

@GetMapping
publicModelAndView form() {
	List<Question> questions = createQuestions();
    ModelAndView mav = new ModelAndView();
    mav.addObject("questions", questions);
    mav.setViewName("survey/surveyForm");
    return mav;
}

 

728x90

'프로그래밍 > SPRING' 카테고리의 다른 글

10. MVC 3 - 세션, 인터셉터, 쿠키  (0) 2022.08.04
09. MVC 2 - 커맨트 객체 값 검증 및 에러 메시지 처리  (0) 2022.08.03
07. Spring Web MVC  (0) 2022.08.01
06. AOP  (0) 2022.04.26
05. DI 적용  (0) 2022.04.24