[TIL] ServletRequest의 attribute

phdljr·2023년 11월 7일
0

TIL

목록 보기
26/70

스프링의 필터를 공부하던 도중, servletRequest.setAttribute("key", "value") 형식의 코드를 볼 수 있었다. 해당 데이터가 HTTP 요청의 Header에 저장되는 코드라고 생각했지만, 뭔가 이상했다. 그 이유는 해당 객체에 setHeader라는 메소드가 따로 존재하기 때문이다.

그렇다면, ServletRequest에서의 Attribute란 무엇일까?


ServletRequest

  • 클라이언트로부터의 요청이 왔을 때, 요청 정보를 객체화 한 것
  • HTTP 환경일 경우, WAS의 서블릿 컨테이너에선 ServletRequest의 하위 객체인 HttpServletRequest가 생성
  • 컨테이너에서 요청을 처리한 후 응답을 보낼 때 소멸됨
  • ServletRequest에는 객체를 저장하고 꺼내어 쓸 수 있는 기능이 setAttributegetAttribute 메소드 형태로 제공됨
public void setAttribute(String name, Object o) //데이터 저장시 사용
public Object getAttribute(String name) //데이터 꺼낼 때 사용

ServletRequest에서의 attribute

  • 웹 애플리케이션에서 정보를 공유하기 위해 쓰이는 객체
  • ServletRequest들 사이에서 공유되는 목적으로 사용됨
    • 사용자의 로그인 정보를 스프링의 컨트롤러 단으로 끌고오기 위해서도 사용됨

후기

생각해 보면, 사용자 데이터를 스프링에서 사용하기 위해선 컨트롤러단으로 데이터를 가져와야 한다. 요청에 대한 모든 데이터는 ServletRequest에 담겨 있으며, 이를 컨트롤러단으로 전파할 필요가 있다. 그렇기에 서블릿에 데이터 및 객체를 담을 수 있는 공간인 attribute가 있는 게 아닐까 싶다.

반면에, ServletResponse에는 attribute가 없다. 단순히 사용자에게 데이터를 보내줄 용도로만 사용되기 때문이라고 생각이 돼서 그런 것 같다.

참조

https://dololak.tistory.com/714

profile
난 Java도 좋고, 다른 것들도 좋아

0개의 댓글