ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Camel][JSP] JSP의 기본객체
    JSP 2020. 3. 9. 22:54

    JSP의 기본객체

     JSP페이지에서는 9가지의 기본객체를 사용할 수 있습니다. 사용할 수 있는 객체는 아래의 표와 같습니다. 

    기본 객체 Type (실제 타입) Description (설명)
    request jaxax.servlet.http.HttpServletRequest 클라이언트의 request 정보를 저장한다.
    response jaxax.servlet.http.HttpServletResponse response 정보를 저장한다.
    pageContext jaxax.servlet.jsp.PageContext JSP 페이지에 대한 정보를 저장한다.
    session jaxax.servlet.http.HttpSession HTTP 세션 정보를 저장한다.
    application jaxax.servlet.ServletContext 웹 Application에 대한 정보를 저장한다.
    out jaxax.servlet.jsp.JspWriter JSP 페이지가 생성하는 결과를 출력할 때 사용하는 출력 스트림이다. 
    config jaxax.servlet.ServletConfig JSP 페이지에 대한 설정 정보를 저장한다.
    page jaxa.lang.Object JSP 페이지를 구현한 Java 클래스 인스턴스이다.
    exception jaxa.lang.Throwable 에러 페이지에서 사용된다.

     

    1. Out 기본객체

     JSP 페이지가 생성하는 모든 내용은 out 기본객체를 통해서 전송됩니다. out 기본객체는 데이터를 전송하는 출력 스트림으로서 JSP 페이지가 생성한 데이터를 출력합니다. 사용 예시는 아래와 같습니다. 

    <%@ page contentType="text/html; charset=utf-8" %>
    <%@ page buffer="8kb" autoFlush="false" %>
    <html>
    <head><title> out 기본객체 </title></head>
    <body>
    
    <%
    out.println("asdfadsfgadsfg");
    %>
    
    <br>
    out 기본객체를 사용한
    <%
    out.println("출력결과입니다. ");
    %>
    
    <br>
    버퍼크기 : <%=out.getBufferSize() %> <br>
    남은 버퍼크기 : <%=out.getRemaining() %> <br>
    AutuFlush 여부 : <%=out.isAutoFlush() %> <br>
    
    </body>
    </html>

    out 기본객체의 출력 메소드로는 데이터를 출력하는 print, 데이터를 출력하고 개행을 출력하는 println, 개행을 출력하는 nextLine 총 3가지가 있습니다. 

    Method(함수) Description (설명)
    print() 데이터를 출력한다.
    println() 데이터를 출력하고 개행(\n 또는 \r\n)을 출력한다.
    nextLine() 개행(\n 또는 \r\n)을 출력한다.

    또한 out 기본객체의 버퍼와 관련된 메소드는 아래와 같습니다. 

    Method(함수) Description (설명)
    getBufferSize() 버퍼의 크기를 반환합니다. 
    getRemaining() 현재 버퍼의 남은 공간의 크기를 반환합니다.
    clear() 버퍼의 내용을 비웁니다. 만약 버퍼가 Flush된 상태라면 IOException을 발생시킵니다.
    clearBuffer() 버퍼의 내용을 비웁니다. 이미 버퍼가 Flush된 상태여도 IOException을 발생시키지 않습니다.
    flush() 버퍼를 Flush 합니다.
    isAutoFlush() 버퍼가 가득차서 자동으로 Flush를 할 경우 true를 반환합니다. 

     

    2. PageContext 기본객체

     PageContext 기본 객체는 하나의 JSP 페이지와 1대1 관계를 가지는 객체입니다. PageContext 기본객체의 기능은 다음과 같습니다. 

     

    다른 기본객체를 구할때 사용한다.

    속성을 처리할때 사용한다.

    페이지의 흐름을 제어할 때 사용한다.

    에러 데이터를 구할때 사용한다.

     

     기본 객체를 구할 때 사용하는 기능으로 인해, pageContext 기본객체는 맨처음에 설명한 9가지 중 자신을 제외한 8가지의 기본객체에 접근할 수 있는 메소드를 제공합니다. 메소드의 설명과 사용방법은 아래의 표와 예제 코드를 참고하시길 바랍니다. 한 가지 주의할 점으로는 getRequest와 getResponse 메소드를 사용할 때에는 알맞게 형변환을 해주어야 한다는 점입니다. 

    Method Return Type Description
    getRequest() ServletRequest request 기본객체를 반환한다.
    getResponse() ServletResponse response 기본객체를 반환한다.
    getSession() HttpSession session 기본객체를 반환한다.
    getServletContext() ServletContext application 기본객체를 반환한다.
    getServletConfig() ServletConfig config 기본객체를 반환한다.
    getOut() JspWriter out 기본객체를 반환한다.
    getException() Exception exception 기본객체를 반환한다.
    getPage() Object page 기본객체를 반환한다.
    <%@ page contentType="text/html; charset=utf-8" %>
    <html>
    <head><title> pageContext 기본객체 </title></head>
    <body>
    
    <%
    HttpServletRequest httpRequest = (HttpServletRequest)pageContext.getRequest();
    %>
    
    
    request 객체와 pageContext.getRequest()를 통해 구한 객체는 같은 객체이다. 정답 : 
    <%= request == httpRequest %>
    <br>
    
    pageContext 객체를 사용한 출력 : 
    <% pageContext.getOut().println("이렇게도 출력 가능합니다. "); %> <br>
    
    </body>
    </html>

     

    3. Application 기본객체

     Application 기본객체는 웹 어플리케이션 전반에 걸쳐서 사용되는 정보를 가지고 있습니다. 특정 웹 어플리케이션에 포함된 모든 JSP 페이지는 하나의 Application 기본 객체를 공유합니다. 

     

    3-1. 초기화 파라미터 읽어오기

     우리는 Application 기본객체를 사용해 웹 어플리케이션의 초기화 파라미터를 읽어올 수 있습니다. 초기화 파라미터를 추가하는 방법은 WEB-INF/web.xml 파일에 context-param 태그를 사용하면 됩니다. 초기화 파라미터는 웹 어플리케이션 전체에서 사용할 수 있으며, Application 기본객체에서 제공하는 메소드를 사용해 초기화 파라미터를 JSP 페이지에서 사용할 수 있습니다. 

     

     초기화 파라미터는 주로 웹 어플리케이션의 초기화 작업에 필요한 설정 정보를 지정하기 위해 사용됩니다. 데이터베이스 연결과 관련된 설정 파일의 경로, 로깅 설정 파일, 또는 웹 어플리케이션의 주요 속정 정보를 담고 있는 파일 경로 등을 지정할 때가 대표적인 사용의 예입니다. 

    <context-param>
    	<description>Info</description>
        <param-name>Version</param-name>
        <param-value>3</param-value>
    </context-param>
    
    <context-param>
    	<description>LogEnable</description>
        <param-name>LogEnable</param-name>
        <param-value>true</param-value>
    </context-param>
    <%@ page contentType="text/html; charset=utf-8" %>
    <%@ page import = "java.util.Enumeration" %>
    <html>
    <head><title> Application 기본객체 </title></head>
    <body>
    초기화 파라미터
    <ul>
    <%
    	Enumeration initParamEnum = application.getInitParameterNames();
    	while(initParamEnum.hasMoreElements()) {
        	String initParamName = (String)initParamEnum.nextElement();
    %>
    <li><%= initParamName %> = 
    	<%= application.getInitParameter(initParamName) %>
    <%
    	}
    %>
    </ul>
    </body>
    </html>

     

    3-2. 서버 정보 읽어오기

     application 기본객체는 현재 사용 중인 웹 컨테이너에 대한 정보를 읽어오는 메소드를 가지고 있습니다. 

    Type and Method Description (설명)
    String getServerInfo( ) 서버의 정보를 반환한다.
    String getMajorVersion( ) 서버가 지원하는 서블릿 규약의 메이저 버전을 반환한다. 정수 부분을 반환.
    String getMinorVersion( ) 서버가 지원하는 서블릿 규약의 마이너 버전을 반환한다. 소수 부분을 반환.
    <%@ page contentType="text/html; charset=utf-8" %>
    <html>
    <head><title> Application 기본객체 서버정보 읽어오기 </title></head>
    <body>
    Server Information : <%= application.getServerInfo() %> <br>
    Servlet 규약 Major Version : <%= application.getMajorVersion() %> <br>
    Servlet 규약 Minor Version : <%= application.getMinorVersion() %> <br>
    
    </body>
    </html>

     

    3-3. 로그 메시지 기록하기

     application 기본객체는 웹 컨테이너가 사용하는 로그 파일에 로그를 기록할 수 있도록 하는 메소드를 제공합니다. 

    Type and Method Description (설명)
    void log( String msg ) 로그 메시지 msg를 기록합니다. 
    void log( String msg, Throwable thr ) 로그 메시지 msg를 기록하고, Throwable 정보도 로그에 함께 기록합니다. 
    <%@ page contentType="text/html; charset=utf-8" %>
    <html>
    <head><title> Application 기본객체 로그 기록하기 </title></head>
    <body>
    
    <%
    	application.log("log massage 1");    
    	log("log massage 2");
    %>
    
    </body>
    </html>

     application 기본객체의 log 메소드를 사용해 로그 메시지를 기록할 수 있습니다. 또한 JSP 페이지에서 제공하는 log 메소드를 사용해도 로그 메시지를 기록할 수 있습니다. JSP 페이지에서 제공하는 메소드를 사용하는 경우, application 기본객체의 메소드를 사용할 때와의 차이점은 로그가 기록된 것을 확인했을 때 jsp: 라는 문장이 추가된다는 점입니다. 

     

    3-4. 웹 어플리케이션의 자원 구하기

     JSP 페이지에서 웹 어플리케이션 디렉터리에 위치한 파일을 사용하고 싶은 경우 application 기본객체의 메소드를 사용할 수 있습니다. 

    Method Description (설명)
    getRealPath( String path ) 웹 어플리케이션 내에서 지정한 경로에 해당하는 자원의 시스템상 경로를 반환한다.
    getResource( String path ) 웹 어플리케이션 내에서 지정한 경로에 해당하는 자원에 접근할 수 있는 URL 객체를 반환한다.
    getResourceAsStream( String path ) 웹 어플리케이션 내에서 지정한 경로에 해당하는 자원으로부터 데이터를 읽어올 수 있는 InputStream을 반환한다.
    <%@ page contentType="text/html; charset=utf-8" %>
    <html>
    <head><title> Application 기본객체 로그 기록하기 </title></head>
    <body>
    <%
    	String resourcePath = "/camel.txt";
    %>
    RealPath : 
    <%= application.getRealPath(resourcePath) %>
    
    </body>
    </html>

     

    JSP 기본객체와 영역

     웹 어플리케이션은 다음의 네 가지 영역으로 구분됩니다.

    영역 소유 객체 설명
    Page 영역 pageContext 기본객체 하나의 JSP 페이지를 처리할 때 사용되는 영역
    Request 영역 request 기본객체  하나의 HTTP 요청을 처리할 때 사용되는 영역
    Session 영역 session 기본객체 하나의 웹 브라우저와 관련된 영역
    Application 영역 application 기본객체 하나의 웹 어플리케이션과 관련된 영역

     

    Page 영역

     Page 영역은 한번의 클라이언트 요청에 대해 하나의 JSP 페이지를 범위로 갖습니다. 웹 브라우저의 요청에 따라 JSP 페이지를 실행할 때, JSP 페이지를 실행하는 범위가 Page 영역입니다. 

     

    Requset 영역

     Request 영역은 웹 브라우저의 요청 하나와 관련이 있습니다. 웹 브라우저상에서 링크를 클릭하거나 URL을 입력해서 페이지를 이동할 때, 웹 브라우저에서 웹 서버에 전송하는 요청이 하나의 Request 영역입니다. 웹 브라우저의 요청이 발생할 때마다 새로운 Request 영역이 생성되는 것입니다. Request 영역은 하나의 요청을 처리하는데 사용되는 모든 JSP 페이지를 포함합니다. 

     

    Session 영역

     Session 영역은 하나의 웹 브라우저와 관련된 영역입니다. session이 생성되면 하나의 웹브라우저와 관련된 모든 요청은 하나의 session 영역에 포함됩니다.

     

    Application 영역

     Application 영역은 하나의 웹 어플리케이션과 관련된 전체 영역을 포함합니다. 모든 JSP 페이지, 모든 요청, 브라우저의 세션은 모두 하나의 Application 영역에 속하는 것입니다. 

     

    1. JSP 기본객체의 속성 사용

     위의 네 가지 영역이 소유하고 있는 기본객체 pageContext, request, application, session는 속성을 가지고 있습니다. 이 속성은 기본객체가 존재하는 동안에 사용될 수 있습니다. 이러한 속성은 JSP 페이지 간의 정보를 공유하기 위해서 사용됩니다.  

     

     각 기본객체는 서로 다른 이름을 가진 속성을 여러 개 가질 수 있습니다. 아래의 메소드를 사용해서 속성의 추가, 삭제, 변경을 할 수 있습니다. 

    Method Description (설명)
    void setAttribute( String name, Object value ) 이름이 name인 속성의 값을 value로 지정한다.
    Object getAttribute( String name ) 이름이 name인 속성의 값을 반환한다. 이름이 name인 속성이 존재하지 않는다면 null을 반환한다.
    void removeAttribute( String name ) 이름이 name인 속성을 삭제한다.
    Enumeration getAttributeNames( ) 속성의 이름 목록을 구한다. 

    단, pageContext 기본객체의 경우는 getAttributeNames 메소드를 제공하지 않습니다. 

     

    application 기본객체의 속성 추가 예제 코드

    <%@ page contentType="text/html; charset=utf-8" %>
    <%
    	String name = request.getParameter("name");
        	String value = request.getParameter("value");
        
        	if (name != null && value != null) application.setAttribute(name, value);
    %>
    <html>
    <head><title> Application 기본객체 속성 추가 </title></head>
    <body>
    <%
    	if (name != null && value != null) application.setAttribute(name, value);
    %>
    application 기본객체의 속성 설정 
    <%= name %> = <%= value%>
    <% 
    	else {
    %>
    application 기본객체의 속성 설정 하지 않았음.
    <%
    	}
    %>
    
    </body>
    </html>
    URL 입력방법 : http://localhost:8080/ch2/setAttributeExample.jsp?name=속성이름&value=속성값

     

    application 기본객체의 속성 값 확인 예제 코드

    <%@ page contentType="text/html; charset=utf-8" %>
    <%@ page import="java.util.Enumeration" %>
    
    <html>
    <head><title> Application 기본객체 속성 값 확인 </title></head>
    <body>
    <%
    	Enumeration attrEnum = application.getAttributeNames();
        
        	while (attrEnum.hasMoreElements()) {
        	String name = (String)attrEnum.nextElement();
            Object value = application.getAttribute(name);
        
    %>
    application 기본객체의 속성 : 
    <b><%= name %></b> = <%= value%><br>
    <%
    	}
    %>
    </body>
    </html>

    웹 어플리케이션 내의 모든 JSP 페이지가 하나의 application 기본객체를 공유하기 때문에 속성을 추가하는 코드와 속성 값을 확인하는 코드는 동일한 application 기본객체를 공유할 수 있습니다. 

     

    속성 값의 타입

     속성 이름의 타입은 String형입니다. 하지만 속성 값의 타입은 Object형입니다. 그렇기 때문에 기본 자료형 데이터를 제외한 모든 클래스 타입을 가질 수 있습니다. 앞서 설명한 속성을 사용하기 위한 메소드를 확인해보면, setAttribute 메소드의 value 인자의 타입과 getAttribute 메소드의 반환형이 Object형 인것을 확인 할 수 있습니다. 그렇기 때문에 아래와 같이 사용할 수 있습니다. 

    session.setAttribute("time", new java.util.Date());
    session.setAttribute("jspFile", new File("C:\\JSP"));
    
    Date date = (Date)session.getAttribute("time");
    File file = (File)session.getAttribute("jspFile");

     getAttribute 메소드로 값을 읽어올 때에는 속성 값을 지정할 때 사용한 타입으로 형변환을 해주어야 합니다.

     

     그렇다면 기본 자료형 데이터는 절대 사용할 수 없는 것일까? 기본 자료형 데이터를 사용하고 싶은 경우에는 직접 사용하는 대신 Wrapper 클래스를 활용하면 사용 가능합니다. Wrapper 클래스에 대한 자세한 설명은 이전 포스팅을 참고하시면 되겠습니다. 

    2020/02/28 - [Java] - [Camel][Java] Wrapper 클래스에 대해서

    request.setAttribute("age", new Integer(20));
    Integer ageAttr = (Integer)request.getAttribute("age");
    int ageInt = ageAttr.intValue();

     

    댓글

Camel`s Tistory.