본문 바로가기

Programing/JAVA

JSP동작원리

JSP의 처리 과정

  • 웹 컨테이너의 요청 처리 과정

    • 해당 서블릿 존재하지 않으면, JSP 페이지를 서블릿 소스 프로그램(.java)으로 변환
    • 서블릿 프로그램을 컴파일하여 서블릿(.class)을 생성
    • 서블릿을 실행하여 클라이언트 요청을 처리
    • 해당 서블릿이 존재하면 변환과 컴파일 작업을 하지 않고 바로 실행
    • 11(2).jpg

 

JSP 페이지를 서블릿 프로그램으로 변환

  • JSP의 처리 과정

    • 변환 : JSP 페이지로부터 서블릿 프로그램(.java)을 생성
    • 컴파일 : 서블릿 프로그램을 컴파일하여 클래스 파일(.class)생성
    • 실행 : 클래스 파일을 실행
  • 생성된 서블릿 소스 프로그램

    • 출력문을 사용하여 HTML 코드를 출력함
    • [톰캣설치폴더]\work\Catalina\localhost\[프로젝트이름]\org\apache\jsp 에 소스 프로그램과 클래스 파일이 저장

 

출력 버퍼와 응답

  • 응답 과정에서 출력 버퍼의 사용

    • 응답을 출력 버퍼에 기록
    • 기록이 끝나면 버퍼의 내용을 클라이언트에게 전달
    • 종료 전에 버퍼가 차면 버퍼를 비워 전달

      • page 지시어의 autoFlush 속성이 false이면 예외 발생
  • 버퍼를 사용하는 이유

    • 데이터 전송 효율의 향상
    • 실행 도중에 버퍼를 비우고 새로운 내용을 넣을 수 있음

      • 실행 도중에 에러가 발생할 경우 다른 내용으로 바꿈
    • 버퍼가 다 차기 전에 헤더를 변경할 수 있음

      • 헤더 정보는 실행 결과를 전송하기 전에 전송됨

 

page 지시어에서 버퍼 설정하기

  • buffer 속성

    • 버퍼의 크기를 지정
    • 기본 값은 8kb
    • <%@ page buffer="4kb" %>
  • 버퍼링을 사용하지 않는 경우

    • <jsp:forward> 기능을 사용할 수 없음
    • 전송 내용을 취소할 수 없음

      • 중간에 오류가 생기면 실제 내용과 오류 정보가 섞임
      • 오류 페이지를 사용하는 경우 버퍼링이 필요
      • <%@ page buffer="none" %>
  • autoFlush 속성

    • true인 경우 버퍼가 차면 버퍼를 비우고 작업을 수행
    • false인 경우 버퍼가 차면 예외가 발생
    • <%@ page buffer="4kb" autoFlush="false" %>

 

서블릿 프로그래밍

  • JSP와 서블릿

    • JSP 규약은 서블릿 규약에 기초함
    • 웹 컨테이너는 JSP 페이지를 서블릿 프로그램으로 변환하여 컴파일하고 실행
  • 서블릿 프로그램 만들기

    • 서블릿 클래스는 생성자, doGet(), doPost()를 가지고 있음
    • doGet() 메소드

      • 서버가 서블릿을 통해 GET 요청을 처리하기 위해 호출하는 메소드

        • 실제로는 서블릿 클래스에서 service() 메소드에 의해 호출됨
      • 기능

        • 요청 데이터 읽기
        • 응답 헤더 작성
        • respone.getWriter()를 이용하여 출력 스트림 만들기
        • 출력 스트림을 이용하여 응답 데이터 작성
    • doPost() 메소드

      • 서버가 서블릿을 통해 POST 요청을 처리하기 위해 호출하는 메소드

        • HTTP POST 방식은 클라이언트가 웹 서버에 많은 양의 데이터를 한번에 보낼 때 사용함 
        • 예 : 폼에 입력된 내용을 보내거나 파일을 업로드하는 경우
        • 기능

          • 요청 데이터 읽기
          • 응답 헤더 작성
          • response.getWriter()를 이용하여 출력 스트림 만들기
          • 출력 스트림을 이용하여 응답 데이터 작성

'Programing > JAVA' 카테고리의 다른 글

자바 용어  (0) 2012.11.09
요청과응답  (0) 2012.11.09
JSP개요  (0) 2012.11.09
JSP용어정리  (0) 2012.11.09