Contorller에서 Request를 받는방식에는 @RequesetMapping, @PostMapping, @GetMapping이 있다.

 

 

 

@RequestMapping의 사용형태

ex)

value는 Request해주는 요청값이고(form태그의 action="test1"이렇게 받았다면 위의 RequestMapping이 받는다.) method는 요청시 Request방식이 GET인지 POST인지에 따라서 설정할 수있다.

 

 

 

@PostMapping의 사용형태

ex)

전송방식이 애초에 post형식으로 받겠다고 PostMapping을 쓴거니까 method는 따로 필요가 없다. value도 생략.

 

 

 

@GetMapping의 사용형태

ex)

전송방식이 애초에 get형식으로 받겠다고 GetMapping을 쓴거니까 method는 따로 필요가 없다. value도 생략.

 

 

위와같은 어노테이션을 사용하여 Request를 받긴하는데.. 어떻게, 어떤 Parameter를 사용하여 Request를 처리할 수 있는지를 알아보자. 

 

 

 

HttpServletRequest

 

Spring MVC는 필요한 객체나 데이터를 주입받아서 사용하게 된다. Servlet / JSP에서 파라메터를 추출할 때 HttpServletRequest객체를 통하여 Spring MVC에서 이 객체를 주입받아 사용할 수 있다. 파라메터 추출 뿐만 아니라 HttpServletRequest객체가 필요할 경우 사용하면 된다. (지금 생각나는건 session을 사용할 때.. 정도..) 

 

 

이런식으로 파라메터로 받아서 JSP Servlet에서 사용했던것처럼 request.getParameter()하여 추출하면 된다.

 

 

WebRequest

 

Servlet에서 사용했던 HttpServletRequest클래스를 확장한 클래스이다. HttpServletRequest와 거의 비슷하지만 기능이 몇개 더 있는 형태이다. 비슷하기 때문에 예제는 생략한다.

 

 

 

@PathVariable

 

요청주소 /값1/값2/값3 형태로 사용된다. 예를 들어, http://test.com/sub1/sub2/sub3 이러한 요청주소가 있으면 /이하는 하위 폴더를 의미하는 것으로 sub1아래의 sub2아래의 sub3폴더를 의미하는것이지만, @PathVariable 을 사용하면 /이하를 값으로서 인식하게 된다. 

 

<a href="test/100/200/300" /> 이렇게 요청했다고 하면, 

 

이렇게 사용할 수 있다. /test/{data1}/{data2}/{data3} 이렇게 받아오면 @PathVariable로써 같은 변수의 이름으로 바인딩할 수 있겠다. 만약 추출하는 데이터값을 정수형으로 받고 싶다면 @PathVariable int data1 과 같은 형태로 받아주면 된다 자동으로 형변환을 해준다!

 

 

 

@RequestParam

 

RequestParam은 value속성에 가져올 데이터의 이름을 적어주고 뒤에 그 데이터를 담을 변수를 선언해주는 형태로 사용한다. 주의할점은 넘어오는 데이터는 @RequestParam으로 받지 않아도 아무 문제 없다. (예를들어 Request 데이터가 data3까지 있을 때)

그런데.. 있지 않는 요청값을 @RequestParam으로 받으면 오류가 난다. (예를들어 Request 데이터가 data1밖에 없을 때)
오류 안나게 하려면.. @RequestParam (required=false) String data2 해주면 아무것도 넘어오지 않으면 null값이 들어가게 된다. (defaultValue="default")하면 아무것도 넘어오지 않으면 default라는 문자열이 주입된다!!!

 

 

 


RESTful API 같은경우에는 보통 @PathVariable 을 주로 사용하고, 파라메터 양식으로 넘어올때는 @RequestParam을 사용하면 된다.

'JAVA > Spring MVC' 카테고리의 다른 글

Redirect와 Forward  (0) 2020.04.24
Form 커스텀 태그  (0) 2020.04.24
ViewResolver 에게 전달하기  (0) 2020.04.24
객체로 파라미터 주입받기, Command Object 이용하기  (0) 2020.04.24
Spring MVC xml설정하기  (0) 2020.04.23

Spring MVC를 사용하기 위해서는 몇가지 설정을 진행해야 한다.

그 전에, 이해를 돕기 위해서 Spring MVC의 동작과정을 간단하게 살펴보도록 하자.

 

 

 

먼저 클라이언트로부터 Request가 들어오면 Dispatcher Servlet이라는 놈이 맨처음 받는다. Dispatcher Servlet은 Handler Mapping이 그 Request를 받아들여 적절한 Contorller를 찾아준다. Contorller에서는 개발자가 만들어놓은 어떤 작업을 실행할 것이다. 그 후 Contorller에서는 어떠한 View를 사용하겠다는 내용을(ModelAndView객체) Dispatcher Servlet에게 반환(return)해준다. 그러면 Dispatcher Servlet은 클라이언트에게 반환할 정보를 View Resolver에게 전달한다. View Resolver는 View객체를 만들어서 다시 Dispatcher Servlet에게 전달한다. 그러면 Dispatcher Servlet은 Model 데이터들을  JSP페이지에 셋팅하여 View를 사용자에게 Response해준다.

 

위의 그림을 기반으로 MVC의 동작과정을 글로 설명한 것이다.

 

 

우리는 xml파일을 이용하여 Dispatcher Servlet을 지정하고 Dispatcher Servlet이 동작할 때, 적용될 init-param으로서 servlet-context.xml을 정의할 수 있다. 여기에서 View Resolver를 설정해줄 수 있다.

 

 

먼저, web.xml파일을 설정해보자.

web.xml 파일은 웹 어플리케이션의 환경설정을 위한 xml형식의 파일이다.

web.xml에는 ServletContext의 초기 파라미터, Session의 유효시간 설정, Servlet/JSP에 대한 정의, Servlet/JSP 매핑, Mime Type 매핑, Welcome File list, Error Pages 처리, 리스너/필터 설정보안들의 설정을 할 수 있다.


출처: https://zipoo80.tistory.com/entry/WEBXML의-역할 [아자아자 화이팅~!]

 

 

web.xml

 

appServlet이라는 이름으로 servlet을 정의해주고 그 서블릿의 클래스를 DispatcherServlet으로 등록해줌으로써 appServlet은 DispatcherServlet이 된다. 

servlet-mapping을 url-pattern / 로 지정해줌으로서 웹 어플리케이션이 실행될 때, url에 아무요청이 없다면 appServlet이 실행된다는것을 의미한다. init-param을 지정해줌으로써 SpringMVC로 만든 웹 어플리케이션에 대한 설정을 할 수 있는 servlet-context.xml파일을 설정해준다.

 

 

servlet-context.xml

 

servelt-context.xml은 위와 같이 설정하였다.

<annotation-driven/>을 설정해줌으로써 Spring MVC에서 정상적으로 어노테이션을 사용할 수 있도록 해준다. 

ViewResolver를 설정한 모습을 볼 수 있는데, /WEB-INF/views/ 경로 아래에 있는 .jsp (모든 jsp파일)을 찾아서 뷰객체를 반환하겠다고 설정을 해준것이다.

인터셉터도 설정해주었는데 이것은 나중에 자세하게 설명하도록 하겠다.

 

 

 

+ Recent posts