방카@Dev
[Spring] Scope 객체를 이용한 데이터 전송 방법(Request,Model,Session) 본문
Spring을 공부하면서 컨트롤러-서비스객체-DAO 사이에서 데이터 전송 부분이 좀 헷갈려서 정리해봤다.
크게 헷갈렸던 부분은,
1. 클라이언트가 GET/POST 방식에 따라 서버에서 데이터를 받을 때 사용하는 방법(객체,메서드)의 차이(1.Request 객체)
2. Model의 scope와 사용방법 (1-2.Model 객체)
3. addAttribute()와 setAttribute()의 차이 / getParameter()와 getAttribute()의 차이
4. redirect 시 데이터 전송 가능 여부(4. RedirectAttributes)
**클라이언트에서 서버로 데이터 전달하는 방법
1. GET - 쿼리 파라미터
- /url ?username=hello&age=20
- 메시지 바디 없이 URL의 쿼리 파라미터에 데이터를 포함해서 전달
2. POST - HTML Form
- content-type : application/x-www-form-unlencoded
- 메세지 바디에 쿼리 파라미터 형식으로 전달 username=hello&age=20
3. HTTP message body에 데이터를 직접 담아서 요청
- HTTP API에 주로 사용(JSON, XML, TEXT)
- POST, PUT, PATCH
1. Request 객체
- 반환 타입 : javax.servlet.http.HttpServletRequest
- 용도 : 클라이언트의 요청이 처리되는 동안 유효함
- 메서드
메서드 | 설명 |
String getParameter(name) | 클라이언트가 보내는 쿼리 스트링, *Form 데이터, url 파라미터를 가져올때 사용 파라미터 변수에 저장된 변수를 얻어내는 메서드 * Form 데이터의 경우 메시지 바디에 쿼리 파라미터 형식으로 데이터를 전달하기 때문에 서버 입장에서는 둘의 형식이 동일함 |
void setAttribute(name, value); Object getAttribute(name); |
서버 측에서 요청(request) 객체에 설정한 속성을 가져올 때 사용 주로 필터나 서블릿, JSP간에 데이터를 공유할 때 사용 서버 내 데이터를 공유할 때 사용 |
String[] getParameterValues(name) | 파라미터 변수 name에 저장된 모든 변수값을 얻어내는 메서드 |
Enumeration getParameterNames() | 요청에 의해 넘어오는 모든 파라미터 변수를 java.util.Enumeration 타입으로 리턴 |
*getParameter()와 getAttribute()의 차이점
- getParameter()는 클라이언트의 요청을 서버에서 받을 때 사용
- getAttribute()는 서버 간(e.g. 서비스 - DAO) 데이터 공유 시 사용
1-2. Model 객체
- 반환 타입 : org.springframework.ui.Model
- 데이터 유지 범위 : request 범위에서만 데이터 유지
- 메서드 : model.addAttribute(String name, Object value) : Model에 저장되는 것이 아니라 request 객체에 저장됨
//데이터 넣는 곳
model.addAttribute("request", request);
//데이터 받는 곳
Map<String, Object> map = model.asMap();
HttpServletRequest request = (HttpServletRequest) map.get("request");
*addAttribute()와 setAttribute()의 차이점
- Model, RedirectAttributes 의 경우 addAttribute(a,b)를 사용하며 자신의 객체를 반환하므로 메서드 체이닝 가능
- request, session의 경우 setAttribute(a,b)를 사용하며, 반환 값이 없음(void)
2. Response 객체
- 반환 타입 : javax.servlet.http.HttpServletRequest
- 용도 : 웹 브라우저로 응답할 정보를 전달
- 메서드 :
메서드 | 설명 |
void setHeader(name, value) | 헤더 정보의 값을 설정 |
void setContentType(type) | 웹브라우저의 요청의 결과로 보일 페이지의 contentType 설정 |
void sendRedirect(url) | 페이지를 redirect하여 이동 |
3. Session 객체
- 반환 타입 : javax.servlet.http.HttpSession
- 용도 : 세션이 유지되는 동안 데이터 유효(웹 브라우저 당 1개 할당)
HttpSession session = reqeust.getSession();
- 메서드 :
메서드 | 설명 |
void setAttribute(String name, Object value) | name이라는 이름으로 value 값을 저장함 |
Object getAttribute(String name) | name으로 값을 불러옴. Object 객체로 반환되므로 형변환 필요 |
void removeAttribute(String name) | name 값에 해당하는 세션 정보 삭제 |
session.invalidate() | invalidate로 모든 세션 정보 삭제 |
4. RedirectAttributes 객체
반환 타입 : org.springframework.web.servlet.mvc.support.RedirectAttributes;
용도 : redirect 시 데이터 전송
메서드 : redirectAttributes.addAttribute(name, value); 쿼리 파라미터로 데이터를 넘김(destination?id=gun)
@GetMapping("/list")
public String list(RedirectAttributes redirectAttributes){
redirectAttributes.addAttribute("id", gun);
return "redirect:/destination";
}
'BackEnd > Spring' 카테고리의 다른 글
[Spring]MyBatis (0) | 2024.06.25 |
---|---|
[Spring]빈 생명주기 콜백 (0) | 2024.06.21 |
[Spring]JDBC Template 정리 (0) | 2024.06.20 |
[Spring]게시판 파일 업로드 라이브러리(COS) (1) | 2024.06.20 |
[Spring]Validator를 이용한 유효성 검사 (0) | 2024.06.17 |