ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JSP/Servlet] 서블릿 라이프 사이클 - JSP 페이지 사이클
    카테고리 없음 2020. 10. 31. 17:27

    출처 : unsplash

     

     

    ■ 들어가기

    - 뇌를 자극하는 JSP&Servlet (김윤명/한빛미디어). 을 공부하며 정리하는 블로그


    ■ 목차

    1. JSP 페이지의 jspInit 메서드와 jspDestroy 메서드

    2. 서블릿의 환경을 표현하는 ServletContext 객체

     

    1. JSP 페이지의 jspInit 메서드와 jspDestroy 메서드

    - 지금까지는 서블릿 클래스의 초기화(init)/마무리(destroy) 작업 과정을 살펴 보았고

    - JSP 페이지도 서블릿으로 변환 후 처리되기 때문에,

      자동으로 호출되는 jspInit 메서드와 jspDestroy 메서드에 대해 알아본다.

     

    1-1. jspInit 메서드와 jspDestroy 메서드의 작성 방법

    1) jspInit 메서드는 서블릿 클래스의 init 메서드 작성 방법과 비슷

    - 파라미터가 없는 메서드로 생성

    - 리턴 타입은 void 로 지정

    - public 으로 선언

    - 단, throws 절은 쓸 수 없음

    <!-- jspInit 메서드 골격 -->
    public void jspInit() {
         TODO
    }

    2) jspDestroy 메서드는 서블릿 클래스의 destroy 메서드 작성 방법과 비슷

    - 파라미터가 없는 메서드로 생성

    - 리턴 타입은 void 로 지정

    - public 으로 선언

     

    3) jspInit(), jspDestroy() 메서드는 jsp 페이지 내 "선언부" 안에 기술하여야 함!

     

    jsp 문법 형태
    - <% %> (ex. 지시자, 스크립팅 요소)
    - ${ } (익스프레션 언어, expression language, EL)
    - XML 태그 형태 (ex. <jsp:forward>, <c:if>, <c:forEach>, ... )

    ※ 지시자(directive) : <%@ ~~ %> 형태
        스크립팅 요소
      스크립틀릿(scriptlet): <% ~~~ %> 형태, java 명령문 사용 가능하며 웹 서버에서 실행됨
      └ 익스프레션(expression): <%= ~~~ %> 형태, java식(변수명, 연산자 포함된 식 등) 사용 가능 & 웹 서버에서 실행
      └ 선언부(declaration): <%! ~~~ %> 형태, 변수/메서드 선언 가능

    ※ 참고 : 주석
    <!-- HTML 주석 -->
    /* Java 주석 */
    // Java 주석
    <%-- JSP 주석 --%>

    - [잠깐] 익스프레션 언어와 익스프레션 차이는 뭔가요?

      익스프레션 언어(EL) 익스프레션
    표현 ${ cnt + 1 } <%= cnt + 1 %>
    의미 cnt는 애트리뷰트의 이름 cnt는 java 프로그래밍 언어 변수 이름

    - 애트리뷰트는 setAttribute, getAttribute, removeAttribute 메서드를 통해 저장되고 관리되는 데이터를 의미

    - 익스프레션 언어는 ${ 와 } 사이에, 익스프레션은 <%= 와 %> 사이에 기술함

     

    1-2. JSP 페이지의 초기화 파라미터

    - JSP 페이지는 서블릿 클래스와 달리 web.xml 파일에 등록하지 않아도 웹 브라우저에서 호출 가능

    - but, 초기화 파라미터를 기재하기 위해서는 web.xml 파일에 등록 필요!

    <!-- web.xml 파일 내 JSP 페이지 등록 방법 -->
    <web-app>
        <servlet>
            <servlet-name>winners-jsp</servlet-name>

            <jsp-file>/Winners.jsp</jsp-file>            <!-- jsp 페이지 본래 URL 경로명, 반드시 / 로 시작 -->
            <init-param>                                                <!-- jsp 페이지에 초기화 파라미터 지정하는 엘리먼트 -->
                <param-name>FILE_NAME</param-name>

                <param-value>winner-list.txt</param-value>
            </init-param>
        </servlet>
        <servlet-mapping>
            <servlet-name>winners-jsp</servlet-name>
            <url-pattern>/winners</url-pattern>      <!-- jsp 페이지 새로운 URL 경로명, 반드시 / 로 시작 -->

        </servlet-mapping>
    </web-app>

    - jsp 페이지에서 getInitParameter 메서드를 호출하여 web.xml에 기재한 초기화 파라미터 값 사용 가능

    - getInitParameter 메서드는 모든 서블릿 클래스의 슈퍼클래스인 javax.servlet.GenericServlet 클래스에 속함

    ( jsp 페이지도 웹 컨테이너에 의해 서블릿 클래스로 변환되기 때문에 getInitParameter 메서드 호출 가능! )

    String filename = getInitParameter("초기화 파라미터의 이름") ;

     

    2. 서블릿의 환경을 표현하는 ServletContext 객체

    - 서블릿이 속한 웹 애플리케이션 디렉터리와 웹 컨테이너에 관련된 환경 정보는

      javax.servlet 패키지에 있는 ServletContext 인터페이스에서 가져올 수 있음

     

    2-1. 서블릿의 환경 정보를 가져오는 방법

    - 서블릿 클래스 / jsp 페이지의 환경에 관련된 정보는

      javax.servlet.ServletContext 인터페이스 타입의 객체를 이용해서 얻을 수 있음

    /* ServletContext 타입의 객체 구하기 - getServletContext 메서드 호출 */
    ServletContext context = getServletContext() ;

    ※ 참고 : ServletContext 인터페이스 API 규격서 ( docs.oracle.com/javaee/7/api/toc.htm )

    getServerInfo() : 서블릿이 속하는 웹 서버의 종류 리턴

    getMajorVersion() / getMinorVersion() : 웹 컨테이너가 지원하는 서블릿 규격서의 메이저/마이너 버전 리턴

     

    2-2. 웹 애플리케이션의 초기화 파라미터 값을 가져오는 방법 : getInitParameter()

    - web.xml 파일에 서블릿의 초기화 파라미터를 기재 & 웹 컴포넌트에서 그 값을 가져오는 방법 외에

    - web.xml 파일에 모든 웹 컴포넌트에서 호출 가능한 설정 방법 이용

    <!-- web.xml 파일 내 웹 애플리케이션의 초기화 파라미터 기재 -->
    <web-app>
        ...
        <context-param>
            <param-name>파라미터 이름</param-name>
            <param-value>파라미터 값</param-value>
        </context-param>
        ...
    </web-app>

    - 위와 같이 설정하면 web.xml 파일이 속한 웹 애플리케이션 디렉터리의 모든 웹 컴포넌트에서 읽을 수 있음

    - 서블릿 클래스에서 사용하기 위해서는

        1) getServletContext 메서드를 통해 ServletContext 객체 구하고

        2) 그 객체에 대해 getInitParameter 메서드 호출

    - JSP 페이지에서 사용하기 위해서는

        1) appliation 내장 변수에 대해 getInitParameter 메서드를 호출

     

    2-3. 로그 메시지를 기록하는 log 메서드

    - 지금까지 로그 기록을 위해서는 PrintWriter 타입의 객체를 생성해서 열고 닫았는데

    - ServletContext 인터페이스의 log 메서드를 이용하면 바로 로그 메시지 기록 가능

    - log 메서드 호출 시 파라미터로 로그 메시지를 넘겨주어야 함

    - log 메서드는 파라미터로 전달된 메시지를 톰캣설치디렉터리 내 logs 디렉터리 안에 "localhost.yyyy-mm-dd.log" 라는 이름으로 기록

    application.log("인사하기 JSP 페이지가 호출되었습니다.") ;

     

    2-4. 같은 웹 애플리케이션에 속하는 웹 컴포넌트들끼리 데이터를 주고 받는 방법

    - ServletContext 인터페이스의 setAttribute, getAttribute, removeAttribute 메서드는

      같은 웹 애플리케이션 디렉터리에 있는 웹 컴포넌트들끼리 데이터를 공유할 수 있도록 만드는 메서드

    - setAttribute() : 웹 애플리케이션에 할당된 공유 데이터 영역에 데이터를 저장하는 기능

    - getAttribute() : 해당 영역에 있는 데이터를 읽어오는 기능

    - removeAttribute() : 해당 영역의 데이터를 삭제하는 기능

    - 호출 방법 :

    application.setAttribute("데이터 이름", "데이터 값") ;

    String str = (String) application.getAttribute("데이터 이름") ;

    application.removeAttribute("데이터 이름") ;

    - 위의 방법은 세션 데이터를 관리하는 방법과 차이가 없지만

    - 실제로는 세션 데이터 영역이 아니라 웹 애플리케이션에 할당된 데이터 영역에 데이터를 저장

     

    2-5. 웹 애플리케이션에 관련된 파일 경로명을 가져오는 메서드 : getContextPath()

    - getContextPath() : ServletContext 인터페이스 중 웹 애플리케이션의 URL 경로명을 리턴

    String appPath = application.getContextPath() ;

    - getRealPath() : 웹 애플리케이션 디렉터리 내 파일의 경로명을 절대 경로명으로 바꾸어 리턴

    String absolutePath = application.getRealPath("/sub1/Intro.html") ;

    댓글

Designed by Tistory.