참고 도서
|
1. 요청 매핑
그리고, @RequestMapping 어노테이션을 클래스에 사용해서 공통되는 경로를 묶을 수도 있다.
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 29 30 31 32 33 34 35 36 37 | @Controller public class RegisterController{ @RequestMapping("/register/step1") public String handleStep1(){ return "register/step1"; } @RequestMapping("/register/step2") public String handleStep1(){ return "register/step2"; } @RequestMapping("/register/step3") public String handleStep1(){ return "register/step1"; } } // '/register 경로를 하나로 묶는 경우 @Controller @RequestMapping("/register") public class RegisterController{ @RequestMapping("/step1") public String handleStep1(){ return "register/step1"; } @RequestMapping("/step2") public String handleStep1(){ return "register/step2"; } @RequestMapping("/step3") public String handleStep1(){ return "register/step1"; } } | cs |
(2) GET 과 POST 구분
스프링 MVC 는 별도의 설정이 없으면, http 메소드 방식에 상관없이,
@RequestMapping에 지정한 경로와 일치하는 요청을 처리한다.
만약 POST 방식으로 전송된 요청만 처리하고 싶다면,
@RequestMapping 어노테이션의 method 속성을 사용해서 전송 방식을 한정하면 된다.
1 2 3 4 5 6 7 8 9 10 11 12 | @Controller public class LoginController{ // GET 방식의 요청만 처리 @RequestMapping(value="/member/login", method=RequestMethod.GET) public Strig form(){ } // POST 방식의 요청만 @RequestMapping(value="/member/login", method=RequestMethod.POST) public String login(){ } | cs |
(3) 컨트롤러에서 요청 파라미터 접근
① HttpServletRequest 객체를 직접 이용
1 2 3 4 5 6 7 8 9 10 11 | // HttpServletRequest 객체를 파라미터로 받아서 사용 @RequestMapping(value="/register/step2", method=RequestMethod.POST) public Strig handleStep2(HttpServletRequest request){ String agreeParam = request.getParameter("agree"); if(agreeParam == null || !agreeParam.equals("true")){ return "register/step1"; } return "register/step2"; } | cs |
② @RequestParam 어노테이션 사용
1 2 3 4 5 6 7 8 9 10 11 12 13 | // HttpServletRequest 객체를 파라미터로 받아서 사용 @RequestMapping(value="/register/step2", method=RequestMethod.POST) public Strig handleStep2( @RequestParam(value="agree",defaultValue="false") Boolean agreeVal){ if(!agree){ return "register/step1"; } return "register/step2"; } // agree 요청 파라미터의 값을 읽어와 agreeVal 파라미터에 할당하고, // 요청 파리미터 값이 없으면 "false"문자열을 사용한다. | cs |
@RequestParam 어노테이션의 속성
속성 |
타입 |
설명 |
value |
String |
HTTP 요청 파라미터의 이름을 지정 |
required |
boolean |
필수 여부를 지정. 기본값은 true 이며, 이 경우 해당 요청 파라미터에 값이 없으면 스프링 MVC 는 예외를 발생시킨다. |
defaultValue |
String |
요청 파라미터에 값이 없을 경우에 사용할 문자열 값을 지정. 기본값은 없다. |
@RequestParam(value="agree",defaultValue="false") Boolean agreeVal)
요청 파라미터 값의 타입은 언제나 String 인데, 속성 타입이 Boolean 이다.
스프링 MVC 는 실제 파라미터의 타입에 맞게 String 값을 변환해 준다.
즉, agree 요청 파라미터 값의 타입인 String 을 스프링 MVC 가 Boolean 으로 변환해 준다.
Boolean 타입 외에 int, long, Integer, Long 등 기본 데이터 타입에 대한 변환을 지원한다.
(4) 컨트롤러 구현 없는 경로 매핑
처리할 비지니스 로직이 없이 요청 경로와 뷰 이름을 연결해 주기만 하면 되는 경우, 컨트롤러에 메소드를 작성하지 않고
요청 경로와 뷰 이름을 매핑해주는 기능을 스프링 MVC 는 제공하고 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <a href="<c:url value="'/main'/>"> <!-- jstl 의 <c:url> 태그로 context path 를 포함하는 경로를 지정 => href="contextPath + /main => 요청 경로 --> <!-- spring-controller.xml 컨트롤러를 위한 스프링 설정 파일--> <mvc:view-controller path="/main" view-name="main"/> <!-- path 속성값 - 요청 경로 view-name 속성값 - 리턴할 뷰 이름 => /main 요청 경로에 대해 뷰 이름으로 main 을 사용한다는 것을 의미 Context Path 가 sp4-chap11 이면, => localhost:8080/sp4-chap11/main 주소 입력 => ViewResolver 의 prefix + main + suffix 로 이동 --> | cs |
2. 리다이렉트 처리
주소창에 직접 주소를 입력하는 경우 http 메소드 get 방식으로 요청을 처리한다.
어떤 요청을 직접 입력해서 get 방식으로 들어오는 경우 원하는 페이지로 리다이렉트 시켜주는 것이 좋다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | @RequestMapping(value = "/register/step2", method = RequestMethod.GET) public String handleStep2Get() { return "redirect:/register/step1"; } /* 'redirect:경로' 뷰 이름 대신 리턴하면 리다이렉트로 처리 된다. @RequestMapping 적용 메소드가 'redirect:' 로 시작하는 경로를 리턴하면, 나머지 경로를 이용해서 리다이렉트할 경로를 구한다. 'redirect:' 뒤의 문자열이 '/' 로 시작하면, 웹 어플리케이션을 기준으로 이동 경로를 생성한다. 웹 어플리케이션 경로 => /sp4-chap11 redirect:/register/step1 => /sp4-chap11/register/step1 '/' 로 시작하지 않으면 현재 경로를 기준으로 상대 경로를 사용한다. 현재 요청 경로 => http://localhost:8080/sp4-chap11/register/step2 redirect:step1 => http://localhost:8080/sp4-chap11/register/step1 완전한 URL 사용 redirect:http://localhost:8080/sp4-chap11/register/step1 */ | cs |
'Programming > Spring' 카테고리의 다른 글
Spring MVC 에서 제공하는 폼 태그 (0) | 2017.08.26 |
---|---|
Spring MVC (커맨드 객체, 모델) (0) | 2017.08.25 |
Spring MVC 프레임워크 동작 방식 (0) | 2017.08.23 |
Spring MVC 기본 설정 (0) | 2017.08.23 |
Spring JdbcTemplate Transaction (0) | 2017.08.22 |
댓글