내장 객체 (javax.servlet 패키지 / java.lang 패키지)
▶▶ 내장 객체 (Implicit Object)
– JSP페이지는 웹 컨테이너에 의해 서블릿 클래스로 변환되어 사용자의 요청을 수행함.
– 서블릿 클래스는 인스턴스로 생성되고, 서블릿이 실행되는 데 필요한 설정 정보를 다루는 객체와
사용자의 요청과 응답에 관련된 객체와 JSP페이지의 입출력을 다루는 객체 등 웹 컨테이너에 의해 자동적으로 구현됨.
– 웹 컨테이너가 제공하는 고정된 이름의 객체를 JSP 내장객체(Implicit Object)라고 부르며,
JSP를 지원하는 웹 컨테이너에서는 서블릿을 구현하는데 공통적으로 요구되는 javax.servlet 패키지(8개의 객체)와
예외처리를 위한 java.lang 패키지(1개의 객체) 제공함.
– JSP 스펙으로 규정된 내장 객체들로 JSP페이지내에서 특별한 선언 없이 사용할 수 있음.
▶ javax.servlet 패키지 — 8개
내장 객체 변수명 | 클래스 / 인터페이스 타입 | 설명 |
request | javax.servlet. SevletRequest(java.servlet. http.HttpServletRequest) |
클라이언트의 HTTP 요청 정보를 저장한 객체 (HTTP 헤더 정보, 파라미터 등) |
response | javax.servlet. ServletResponse(javax.servlet. http.HttpServletResponse) |
HTTP 요청에 대한 응답 정보를 저장한 객체 |
session | javax.servlet.http.HttpSession | 클라이언트의 세션 정보를 저장한 객체 |
pageContext | javax.servlet.jsp.PageContext | 페이지 실행에 필요한 컨텍스트 정보를 저장한 객체 |
out | javax.servlet.jsp.JspWriter | 응답 페이지 전송을 위한 출력 스트림 객체 |
application | javax.servlet.ServletContext | 동일한 애플리케이션의 컨텍스트 정보를 저장한 객체 |
config | javax.servlet.ServletConfig | 해당 페이지의 서블릿 설정 정보(초기화 정보)를 저장한 객체 |
page | java.lang.Object(javax.servlet.jsp. HttpJspPage) |
해당 페이지의 서블릿 객체(인스턴스) |
▸ request 객체
– 사용자가 서버에 웹브라우저를 통해 페이지를 요청할 경우,
브라우저는 사용자 요청과 관련된 일련의 데이터들을 HTTP메시지로 구성해 서버에 전송함.
– 이러한 HTTP메시지는 HTTP헤더와 HTTP본문으로 구성되며,
웹 서버는 HTTP메시지를 수신하여 정보를 분석하고 서블릿/JSP요청으로 판명될 경우, 웹 컨테이너에 처리를 넘김.
– 컨테이너는 전송받은 HTTP메시지를 통해 HttpServletRequest객체를 생성,
이를 서블릿 인스턴스에 넘겨줌으로써 서블릿이 사용자의 요청에 관련된 데이터들을 얻게 됨.
즉, 클라이언트의 HTTP 요청 정보를 저장하는 객체.
– JSP페이지에서는 이 HttpServletRequest객체를 request란 이름의 객체로 사용함.
EX )
<body>
서버 도메인명 : <%=request.getServerName() %> <br> <!--시작하는 주소 이름-->
URL : <%=request.getRequestURL() %> <br> <!--사이트 주소-->
URI : <%=request.getRequestURI() %> <br> <!--위치만 불러옴-->
전송방식 : <%=request.getMethod() %> <br> <!--get 방식인지 poost방식인지-->
물리적경로 : <%=request.getRealPath("/") %> <br> <!--java파일이 있는 곳의 경로-->
http헤더정보(user-agent) : <%=request.getHeader("user-agent") %> <br> <!--사용자 정보 확인 가능-->
</body>
→ 원래는 객체를 사용할 때, Request request = new Request(); 이렇게 선언해줘야 하지만 내장 객체이므로 선언 불필요
→ 'request객체의 getServerName() 메서드' == request.getServerName() 으로 해석할 수 있음.
✓ 실행 결과
서버 도메인명 : localhost
URL : http://localhost:8088/JSP7/jsp1/test2.jsp
URI : /JSP7/jsp1/test2.jsp
전송방식 : GET
물리적경로 : C:\workspace_jsp7\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\JSP7\
http해더정보(user-agent) : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
▸ response 객체
– 클라이언트의 요청에 대한 결과를 HTTP응답 정보로 저장한 객체.
– 웹 컨테이너에서는 javax.servlet.http.HttpServletResponse 인터페이스를 사용해 response객체를 생성함.
– JSP페이지에서는 response 객체를 통해 클라이언트로 전송될 HTTP응답 헤더 정보를 설정하거나,
쿠키를 추가하고 페이지를 리다이렉트하는 등의 기능을 사용할 수 있음.
EX1 ) MINE 타입
<%
response.setContentType("video/mp4");
%>
→ MINE타입으로 실행하면 그냥 형태만 보임. 이 페이지는 텍스트 타입이므로 그림이나 비디오로 볼 수 없음.
✓ 실행 결과
EX2 ) 페이지 이동과 새로고침
<%
response.sendRedirect("https://www.naver.com");
response.addHeader("Refresh", "3");
response.addHeader("Refresh", "5;url=http://www.itwillbs.co.kr");
%>
→ 리다이렉트는 웹 서버가 웹 브라우저에게 다른 페이지로 이동하라고 응답하는 기능,
특정 페이지를 실행한 후 지정한 페이지로 이동하길 원할 때 리다이렉트 기능을 사용함.
→ Refresh는 새로고침 기능이며 뒤에 숫자를 입력할 경우, 3초에 한번씩 새로고침함.
→ 숫자 뒤에 세미콜론을 넣고 url을 적어주면, 5초 뒤에 해당 사이트로 이동함.
▸ pageContext 객체
– javax.servlet.jsp.PageContext 클래스를 상속하여 웹 컨테이너가 구현한 객체.
– JSP페이지와 관련된 프로그램에서 다른 내장 객체를 얻어내거나,
현재 페이지의 요청과 응답의 제어권을 다른 페이지로 넘겨주는데 사용함.
즉, 페이지 실행에 필요한 프로젝트 정보를 저장하는 객체.
– request, session, application처럼 내장 객체의 속성을 제어하는 기능이 있으며,
이 4가지의 영역 내장 객체는 각각의 영역(scope)과 관련된 자신의 속성(attribute)을 가질 수 있고,
이를 통해 각각의 영역별로 속성 데이터를 공유할 수 있음.
→ 예를 들어 session객체의 속성으로 지정된 객체는,
세션이 유지되는 한 서로 다른 JSP페이지라 할지라도 공유해서 사용하는 것이 가능.
▸ session 객체
– HTTP 프로토콜은 요청 / 응답의 구조로 되어 있어 응답을 전송하고 나면 연결이 끊어지게 됨.
따라서 클라이언트의 정보가 유지되어야 할 필요가 있는 경우를 위해 가상 연결이라는 개념의 세션이 등장하였고
JSP에서는 이러한 세션을 session 내장 객체를 이용하여 구현함.
– 즉, 클라이언트의 세션 정보를 저장한 객체.
EX )
세션 생성시간 : <%=session.getCreationTime() %> <br>
세션 최종접속시간 : <%=session.getLastAccessedTime() %> <br>
→ 새로고침하면 세션 최종접속시간은 계속 바뀜. 말 그대로 사용자가 마지막으로 들어온 시간을 의미하기 때문.
→ 세션 최종접속시간 - 세션 생성시간 = 해당 사이트에 머무르는 시간
이를 이용해서 10초정도 후에는 페이지 이동을 하는 기능을 넣을 수도 있음.
✓ 실행 결과
세션 생성시간 : 1677158362237
세션 최종접속시간 : 1677159288048
▸ application 객체
– application객체는 javax.servlet.ServletContext 클래스를 상속받아 웹 컨테이너가 구현하여 제공하는 객체.
– 해당 웹 애플리케이션의 실행 환경을 제공하는 서버의 정보와 서버측 자원에 대한 정보를 얻어내거나
해당 애플리케이션의 이벤트 로그를 다루는 메소드를 제공함.
– 각 웹 애플리케이션당 오직 하나의 객체만이 생성되므로,
해당 웹 애플리케이션 전체 영역에서 자원을 공유해야 할 때 (방문자 수 등의 통계를 다룰 때) 주로 사용됨.
– 즉, 프로젝트의 정보를 저장한 객체
▸ out 객체
– 서블릿/JSP 컨테이너가 응답 페이지를 만들기 위해 사용하는 출력 스트림 객체.
– java.io.Writer 클래스를 상속한 java.servlet.jsp.JspWriter 클래스 타입으로 생성됨.
– JSP 기능의 핵심은 사용자의 요구에 맞는 응답 페이지를 만들어 내는 것이므로,
이 응답 페이지를 만드는데 직접적으로 사용되는 out객체는 가장 중요하고 빈번하게 사용되는 객체.
– 하지만 우리는 out객체를 사용하지 않고,
표현식을 이용하여 자바 코드의 변수와 메소드의 리턴값들을 충분히 출력할 수 있으므로 잘 사용하지 않음.
▸ config 객체
– JSP페이지가 서블릿 클래스로 변환되어 서블릿 인스턴스가 생성될 때,
참조해야 할 초기 설정 정보들을 저장해 놓은 객체.
– 초기 설정 정보들은 웹 컨테이너가 구동될 때 내부에서 자체적으로 생성/관리되며,
서블릿당 1개만의 객체가 생성되어 같은 서블릿 인스턴스는 동일한 config객체를 참조함.
▸ page 객체
– JSP페이지에 의해 생성되는 서블릿 인스턴스 자체를 나타내는 객체.
– 사용빈도가 낮음
▶ java.lang 패키지 — 1개
▸ exception
– JSP페이지에서 예외가 발생하였을 경우,
그 예외를 처리할 에러 페이지를 사용자가 지정했다면, 해당 에러 페이지에 전달되는 예외 객체.
– exception객체를 사용하기 위해서는 해당 페이지가 에러 페이지로 지정되어 있어야만 함.
즉, page지시어에 의해 isErrorPage속성이 true로 지정되어 있어야만 사용 가능.
– java.lang.Throwable 클래스로 선언됨.
🐾 참조 도서 및 사이트 🐾
— JSP 2.3 & Servlet 3.1