jsp 저장소와 el에 대해서

정호윤·2023년 6월 24일

스프링

목록 보기
10/15

jsp에서 이용할수 있는 저장소와 scope 그리고 el에서 어떻게 접근하는지 등등 개념들이 너무 헷갈려서 한번에 정리하고자 한다.

HttpServletRequest이라는 객체가 있다.이는 jsp로 http 요청이 왔을 때 요청에 대한 정보를 담고 있는 객체이다.

이 객체에 대한 접근 방법이 크게 두가지가 있다.스크립트를 이용한 자바 코드로 request 기본 객체를 통해서 접근하거나 el을 통해서 requestScope에 저장되어 있는 속성값들에 접근할수 있다.

기본 객체를 통해서 접근하는 방법은 간단하다.
<%=request.getAttribute()%>
<%=request.getParameter()%>
url 또는 post 형태로 http 요청에 담겨져 온 데이터에 접근하고 싶다면 getParameter()로 접근하면 된다.
서블릿 또는 jsp에서 setAttribute(key,value) 형태로 저장한 데이터에 접근하고 싶다면 getAttribute()로 접근하면 된다.

el에서는 좀 다르다.el에서는 request 기본 객체에 접근할수 없다.그래서 별개의 저장소들에 접근하는 방법을 사용한다.
parameter에 접근하고 싶다면 pageContext.request.getParameter(id)이런식으로값에접근해야한다.pageContext저장소에는request기본객체의주소가있다.{pageContext.request.getParameter(id)} 이런식으로 값에 접근해야 한다.pageContext 저장소에는 request 기본 객체의 주소가 있다.{param.id} 이런식으로 짧게 쓸수도 있다.

속성값들에 접근하고 싶다면 requestScope.id로접근해야한다.{requestScope.id}로 접근해야 한다.{id} 이렇게 짧게 쓸수 있다.

사실 ${pageContext.request.getAttribute(id)} 이런식으로 pageContext에서 속성값들에서 바로 접근할수도 있다.짧게 쓰는게 requestScope쪽이 더 짧아서 쓸뿐.

속성값들은 바로 ${id} parameter 값들은 ${param.id} 이렇게 쓴다는것만 기억하면 된다.

el에서는 속성값과 파라미터 값의 접근 방법이 다르다.

여기서 확실히 짚고 넘어가야 한다.
request 기본객체와 저장소는 같은 개념이며 requestScope는 request 기본 객체의 맵 이름이다.

request 기본객체는 script 형태로 java 코드를 작성 할 때 HttpServletRequest 객체에 접근하기 위해서 존재한다.정확히는 _jspServlet을 통해서 변환 될 때 service() 메서드의 iv 멤버이다.하여튼 HttpServletRequest에 접근 할 때 사용된다.

el에서 ${requestScope.id} 이렇게 적는것은 ${request.getAttribute(id)} 이렇게 호출하는것과 동일하다.requestScope가 request 기본 객체의 map 이름이기 때문이다.

또한 저장소에는 4가지 종류가 있다.이 저장소들은 scope(범위)와 수명주기에 따라 구분된다.

pageContext
scope = page / 하나의 jsp 파일에서 접근할수 있다.
수명주기 = 요청에 의해서 jsp 파일이 불려갈 때 생기고 요청이 종료되면 바로 사라진다.여러 기본 객체들에 대한 주소가 저장되어 있으며 el에서 이 저장소를 통해서 기본 객체들의 값을 가지고 온다.

request
scope = request / 요청을 받은 jsp 파일에서 접근할수 있으며 forward를 통해서 reuqest 저장소를 다른 jsp 파일에 넘겨줄수 있다.
수명주기 = 요청이 들어왔을 때 생기며 최종적으로 응답을 통해서 요청이 종료되면 사라진다.pageContext보다 조금 길다.

session
scope = session / 다수의 jsp 파일들에서 접근할수 있다.
수명주기 = 클라이언트가 login 했을 때 생겨나며 logout 했을 때 사라진다.수명을 따로 지정할수도 있다.

application
scope = application / web app 전체에서 접근할수 있다.
수명주기 = web app이 시작되고 종료 될 때 까지

추가적으로,컨트롤러에서 model에 저장한 값은 request 저장소에 저장된다.

또 또 추가적으로 session 저장소의 맵 이름은 sessionScope이다.el에서는 저장소 이름,맵 이름 둘 다 저장소의 map에 저장된 값들에 접근할수 있다.

내가 적어놓고도 뭔소린지 모르겠다 너무 헷갈린다.

profile
개발자로 취직을 희망합니다.

0개의 댓글