Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
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
Tags
more
Archives
Today
Total
관리 메뉴

방카@Dev

[Spring] Scope 객체를 이용한 데이터 전송 방법(Request,Model,Session) 본문

BackEnd/Spring

[Spring] Scope 객체를 이용한 데이터 전송 방법(Request,Model,Session)

방카킴 2024. 6. 24. 12:21

 

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