개발이좋아

[JSP] JSP 내장 객체 본문

Web개발/JSP & Servlet

[JSP] JSP 내장 객체

noobdev 2019. 12. 25. 21:29

JSP는 컨테이너에 의해 서블릿으로 변환되는데 이때 컨테이너가 자동으로 생성시키는 서블릿 멤버 변수를 내장 객체 (내장 변수)라고 한다.

즉, 서블릿에서 자주 사용하는 객체를 개발자가 구현하는 것이 아닌 서블릿으로 변환하는 과정에서 컨테이너가 자동으로 생성하여 개발자가 편하게 사용할 수 있게끔 해준다.

 

 

JSP에서 제공되는 내장 객체    참고 : 자바 웹을 다루는 기술

내장 객체 서블릿 타입 설명
request HttpServletRequest 클라이언의 요청 정보를 저장
response HttpServletResponse 응답 정보를 저장
out javax.servlet.jsp.JspWriter JSP 페이지에서 결과를 출력
session javax.servlet.http.HttpSession 세션 정보를 저장
application javax.servlet.ServletContext 컨텍스트 정보를 저장
pageContext javax.servlet.jsp.PageContext JSP 페이지에 대한 정보 저장
page java.lang.Object JSP 페이지의 서블릿 인스턴스 저장
config javax.servlet.ServletConfig JSP 페이지에 대한 설정 정보를 저장
exception java.lang.Exception 예외 발생 시 예외 처리

session, application, request 은 서블릿에서 사용되는 객체와 사용법이 같다. 

예를들어 데이터를 바인딩할 때는 setAttribute( ) 메서드를, 바인딩된 데이터를 가져올 때는 getAttribute( ) 메서드를 사용한다.

 

위 객체들 중 session은 유효 범위가 같은 브라우저안에서 유효하며, application은 애플리케이션 전체에서 유효하다.

request객체 같은 경우에는 요청을 공유하는 JSP내에서 유효하다.

 

즉 session, application, request 객체는 서블릿에서의 스코프(유효 범위)와 같다.

 

스코프가 이해가 안된다면 아래 예제를 보도록 하자.

 


session 내장 객체의 데이터 바인딩 기능과 스코프(유효 범위)

session 내장 객체의 유효 범위를 알기 위해서 우선 서블릿을 하나 생성하고 데이터를 바인딩해준다.

 

서블릿에서 세션을 생성하고 속성을 setAttribute( ) 메서드로 바인딩해주었다. 그 후 유효 범위를 확인하기 위해 jsp파일을 만들고 html코드로 jsp파일로 가는 링크를 코딩해준다.

 

유효범위를 확인하기 위한 jsp파일이다. 

코드 상단에 스크립스릿(scriptlet) 안에 바인딩된 값을 가져오는 코드를 작성한다.  

형 변환해주는 이유는 session에 데이터를 바인딩하면 데이터가 object형으로 변환되기 때문에 String형으로 다시 변환해준다.

스크립트릿을 보면 따로 session객체를 만들어 준 적이 없지만 session객체를 사용할 수 있다. 

이는 session객체가 jsp의 내장 객체이기 때문이다.

그리고 body 태그 안에는 바인딩한 데이터를 표현식으로 출력해주는 코드가 구현되어 있다.

 

이제 애플리케이션을 실행시켜보면 결과는 아래와 같다.

 

서블릿에 매핑된 url을 요청하면 위 사진과 같이 '유효 범위 확인하기'라는 링크가 나오며 링크를 클릭하면 아래와 같다.

 

위와 같은 결과를 얻을 수 있는데 여기서 주의할 점은 session 내장 객체의 유효 범위는 같은 세션 id 값을 가지는 브라우저이다. 즉 브라우저가 다르다면 유효 범위가 아니기 때문에 null이 출력된다.

 

 

이번에는 이클립스의 내장 브라우저가 아닌 크롬으로 url을 복사하여 실행한 결과이다. 

위의 사진과 같이 브라우저가 다르기 때문에 유효 범위를 벗어나 null이 출력되는 것을 확인할 수 있다.

 


위와 같이 내장 객체는 서블릿으로 변환되는 과정에서 컨테이너가 생성하여 서블릿 객체가 되기 때문에 서블릿에서 사용하던 session과 request등과 같은 객체의 사용법과 동일하다. 

 

 

 

 


application 내장 객체의 데이터 바인딩 기능과 스코프(유효 범위)

위의 표를 보면 알 수 있듯 application 내장 객체의 스플릿 타입은 ServletContext이다.

ServletContext는 애플리케이션이 컨테이너에 로드되면 같이 생성되며 애플리케이션의 실행이 끝나면 같이 소멸된다.

ServletContext는 스코프가 애플리케이션 전체이기 때문에 애플리케이션 전체에서 사용하는 데이터를 미리 저장해놓고

사용하면 편리하다. 

application도 ServletContext객체와 같은 객체라고 생각하면 된다.

즉 application도 ServletContext처럼 데이터 바인딩이나 로그 파일 기능 등의 기능을 수행할 수 있다.

 

데이터 바인딩과 유혀범위(스코프)의 예제는 아래와 같다.

 

우선 데이터를 바인딩해줄 jsp파일을 하나, 바인딩된 데이터를 받아올 jsp를 하나 총 2개의 jsp 파일을 만든다.

 

 

코드 상단에 application 내장 객체를 이용해 데이터를 바인딩해준다.

session 내장 객체로도 데이터를 바인딩해주었는데 이는 유효 범위의 차이를 알기 위함이다.

 

바인딩된 데이터를 출력하는 jsp파일의 예제는 아래와 같다.

 

데이터 상단에 스크립트릿안에 자바 코드로 바인딩된 정보를 받아오고 body 태그 안에서 표현식으로 출력하게끔 구현한 예제이다.

 

이제 jsp파일을 실행해보면 아래의 결과와 같다.

처음 jsp파일을 실행한 결과

유효 범위 확인하기를 클릭하면 아래의 결과가 나온다.

바인딩한 데이터가 잘 출력되는 것을 확인할 수 있다.

 

이제 application 내장 객체와 session 내장 객체의 차이를 확인하기 위해 바인딩된 값을 출력하는 jsp파일에 url을 다른 브라우저로 복사해 실행해보자.

 

 

 

위 사진은 이클립스 내장 브라우저에서 url을 복사하여 크롬으로 옮겨 실행한 결과이다.

application으로 바인딩 된 값은 잘 출력되었지만 session으로 바인딩한 값은 null이 출력된 것을 확인할 수 있다.

이는 application은 스코프가 애플리케이션 전체이며 session은 스코프가 같은 브라우저이기 때문에 위와 같은 결과가 나온 것이다.

 

 

 

본 포스팅은 필자가 공부한 것을 정리해놓은 것으로 오류가 존재할 수 있습니다.
참고 : 자바 웹을 다루는 기술

 

 

Comments