본문 바로가기
Programming/Spring

Spring MVC (요청 매핑, 리다이렉트)

by TinKerBellBass 2017. 8. 24.
728x90
반응형

참고 도서

초보 웹 개발자를 위한 스프링4 프로그래밍 입문
국내도서
저자 : 최범균
출판 : 가메출판사 2015.03.02
상세보기


1. 요청 매핑

(1) @RequestMapping

특정 요청 URL을 처리하기 위해서 @Controller 어노테이션을 사용한 컨트롤러 클래스를 구현한다.
컨트롤러 클래스는 @RequestMapping 어노테이션을 사용해서 메소드에서 처리할 요청 경로를 지정한다.
컨트롤러 클래스에서 @RequestMapping 어노테이션을 사용하는 메소드를 여러 개 사용할 수 있기 때문에,
여러 단계를 거쳐서 하나의 기능이 완성되는 경우, 여로 요청 경로를 한 개의 컨트롤러 클래스에서 처리할 수 있다.

그리고, @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


728x90
반응형

'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

댓글