시뻘건 개발 도전기

#9 : Client의 데이터 가져오기! 본문

Framework/spring

#9 : Client의 데이터 가져오기!

시뻘건볼때기 2020. 5. 6. 22:21
반응형

  HTTP method 중에 가장 기본이 되는 것은 GET과 POST이다. HTTP method에 대해서는 HTTP RFC를 참고하자.

그 중에 GET과 POST일 때, Client가 전달한 데이터를 가지고 오는 방법을 알아보자.

 

- GET method

GET method 파라미터 받아오기
 home.jsp

HttpServletRequest는 java EE API를 참고하자. 간단하게 이야기 하면 client가 요청한 데이터 뿐만 아니라 header 정보도 함께 알 수 있다. GET method 이므로 http://localhost:8080/dotori/?id=abc123&userName=dotori 로 요청하면 query의 id값와 userName이 출력되는 것을 볼 수 있다.

  다른 방법으로, 어노테이션을 사용하는 방법이 있다.

어노테이션을 이용한 방법

동일한 동작을 하지만 어노테이션으로 각각 파라미터를 가져온 방법이다. 그다지 좋은 방법 같지는 않다. 필요한 파라미터만큼 인자가 늘어나기 때문이고 이는 곧, 인자가 수십 개가 될수도 있다는 이야기다. 이 것을 해결하기 위한 방법으로 다음과 같은 방식도 지원한다.

커맨드 객체 사용한 방법

아싸리 객체로 받는 방법이다. 이를 커맨드 객체라고 하는데, spring이 자동으로 객체 바인딩을해서 model과 함께 view로 넘겨준다. 이런 방식으로 할 때에는 객체가 넘어가기 때문에 jsp에서도 가지고오는 방법이 다음과 같이 달라지게 된다.

member라는 객체에서 id 혹은 userName를 가지고오는 것. 주의할 점은 Member 클래스는 다음과 같이 GET parameter와 이름이 동일해야한다는 점이고 각각 getter와 setter를 만들어 주어야한다는 것이다.

오타가 있으면 작동이 안되니 주의하자..ㅎㅎ

 

추가로 URI의 값을 가지고오는 방법도 있다. 많이는 사용되지 않는다고는 하나, 이런 것도 지원된다는 정보만 알아도 좋을 것 같다.

@RequestMapping의 인자로 중괄호를 사용하고 @PathVariable 어노테이션으로 인자를 받으면 해당 값을 나타낼 수 있다. 만약 http://localhost:8080/dotori/object/pathVar/18 과 같이 요청하면 웹에서 "18" 값을 볼 수 있을 것이다. 게시판이나 리스트 만들 때 사용될 것 같기도 하다.

 

 

 

 

- POST method

 

  GET과 커맨드 객체까지 모두 동일하다. 다만, 테스트할 때 GET처럼 query로 데이터를 전달할 수 없기때문에 html의 form 태그를 사용하여 테스트해야한다.

Conteoller는 다음과 같이 form제공해주는 페이지와 데이터 노출시키는 페이지를 리턴한다.

POST method 파라미터 가져오기

 

 

 

 

커맨드객체에 대해 더 알아보자.

더보기

커맨드객체는 소개할 때 언급했듯이 이름이 같아야하는 제한이 붙는다. 만약 그 이름이 상당히 길게 되어있으면 우린 코드에서도 긴 객체가 돌아다닐 수도 있다. 이를 좋아하지 않는 개발자라면 @ModelAttribute 어노테이션을 사용할 수 있다.

@ModelAttribute 어노테이션

jsp에서는 ${mem.id}  와 같이 접근이 가능하다.

반응형
Comments