본문 바로가기
Web/Spring

Spring MVC(3)_Annotation & @RequestMapping

by 미티치 2016. 5. 17.

컨트롤러에서 요청에 대해 어떤 메소드가 수행될지 매핑하기 위해 어노테이션 @RequestMapping 을 사용한다.

오늘은 @RequestMapping에 대해 정리해보기 전에, Spring MVC에서 사용하는 주요 어노테이션에 대해 한번 훑어보고 넘어가자





 

■ @RequestMapping 파라미터


사용자에게 입력받은 값을 <form action="" method="">태그로 넘길때 데이터를 넘기는 방식에는 Get 방식과 Post방식이 있다. 다음예제에서는 get방식과 post방식으로 보내는 방법을 둘 다 보여줄건데, 여기서 주목할 점은 Controller에서 넘어온 데이터를 어떻게 받는지이다.  

 


[ studentIdForm ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
    <!-- Get방식으로 보내는 form -->
    <form action="studentIdGet" method="get">
        student id : <input type="text" name="id">
        <input type="submit" value="전송">
    </form>
    
    <!-- Post방식으로 보내는 form -->
    <form action="studentIdPost" method="post">
        student id : <input type="text" name="id">
        <input type="submit" value="전송">
    </form>
</body>
</html>
cs



[ HomeController ]

: 23번째 줄의 studentGet메소드는 get방식으로 보낸 데이터를 받는 메소드이다. 여기서 @RequestMapping 파라미터에 method=RequestMethod.GET으로 지정되어있는 것을 볼 수 있다. 그리고 39번째 줄부터는 post방식으로 보낸 데이터를 받는 메소드인데, 여기서 주목해야할 점은 32번째와 39번째 줄에 있는 두 메소드의 차이이다. get방식과 마찬가지로 post방식으로 보낸 데이터도 model객체를 이용해서 받을 수 있도록 32번째 줄 메소드가 구현되어있지만 사실은 39번째 줄에 있는 메소드가 정확하다. post방식은 ModelAndView객체를 이용해서 데이터를 전달해야 하며 32번째 줄 메소드가 예제에서는 에러가 안났지만( 이부분은 이클립스가 자동으로 잡아준 것 같다) 내부적으로는 정확한 방식은 아니다.

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
38
39
40
41
42
43
44
45
46
47
package com.java.ex;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.java.ex.student.StudentInformation;
 
@Controller
public class HomeController {
    private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
    
    //studentIdForm을 여는 메소드
    @RequestMapping(value="studentIdForm")
    public String studentIdForm(){
        return "/student/studentIdForm";
    }
    
    //Get 방식으로 받음
    @RequestMapping(method=RequestMethod.GET, value="studentIdGet")
    public String studentIdGet(HttpServletRequest request, Model model){
        String id = request.getParameter("id");
        model.addAttribute("studentId",id);
        
        return "/student/studentId";
    }

    // 아래와 같이 코딩하면 지금은 이클립스가 잡아줘서 에러가 안날 수 있는데 (에러가 나는 경우도 있었고 안나는 경우도 있었음)내부적으로 충돌이 날 가능성이 있음
//    @RequestMapping(method=RequestMethod.POST, value="studentIdPost")
//    public String studentIdPost(HttpServletRequest request, Model model){
//        String id = request.getParameter("id");
//        model.addAttribute("studentId",id);
//        return "/student/studentId";
//    }

    //post방식은 ModelAndView를 사용해야 한다.
    @RequestMapping(method=RequestMethod.POST, value="studentIdPost")
    public ModelAndView studentIdPost(HttpServletRequest request){
        String id = request.getParameter("id");
        ModelAndView mv = new ModelAndView();
        mv.addObject("studentId",id);
        mv.setViewName("/student/studentId");
        return mv;
 
    }
cs









< 플러스 참고자료 >


** Annotation based Controller

http://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte2:ptl:annotation-based_controller


**컨트롤러 메서드의 파라미터 타입

http://devbox.tistory.com/entry/Spring-%EC%BB%A8%ED%8A%B8%EB%A1%A4%EB%9F%AC-%EB%A9%94%EC%84%9C%EB%93%9C%EC%9D%98-%ED%8C%8C%EB%9D%BC%EB%AF%B8%ED%84%B0-%ED%83%80%EC%9E%85

'Web > Spring' 카테고리의 다른 글

Spring MVC Board(2)_Spring JDBC  (0) 2016.05.19
Spring MVC Board (1)_Spring Board  (0) 2016.05.19
Spring MVC(2)  (0) 2016.05.16
Spring MVC(1)  (0) 2016.05.16
Spring 한글처리  (0) 2016.05.16