본문 바로가기

JSP

개요

■ 웹 어플리케이션
   웹 브라우저의 요청에 대하여 처리해서 결과를 보여주는 프로그램을 의미

 ο 웹 어플리케이션의 구성요소
   1. 웹 브라우저
       사용자에게 화면(즉, User Interface)을 제공

    2. 웹 서버(WAS : Web Application Server)
       웹 브라우저를 이용하여 World Wide Web을 사용하는 클라이언트에게 미리 저장된 하이퍼 텍스트(Hyper Text)를 제공하는 서버로 유닉스 기반의 아파치 서버와 마이크로소프트 윈도우 기반의 IIS 서버와 등이 있다.

      [종류]
       Apache server, Apache-SSL server, IIS(Internet Information Server), jeus(tmax) 등

     3. 어플리케이션 서버
         처리 결과 값을 웹 서버에 전달

     4. 데이터베이스
        데이터 저장

      - DBMS 종류
        오라클, IBM(DB2+인포믹스(Informix)), Microsoft SQL Server, 사이베이스(Sybase), 티베로 RDBMS(티멕스), MySql 등


■ 서블릿 개요
 ο 개요
    서블릿은 Java 언어를 기반으로 하여 동적인 컨텐츠를 생성하며 Java 코드 안에 HTML 태그가 혼재되어 있어서 그 효율성이 떨어진다.

    - 서블릿은 멀티쓰레딩에 의해 사용자 요구를 처리하고 가공해서 이에 대한 결과를 전달한다.
    - JSP 는 주로 UI(사용자용 뷰) 의 구현에 사용되고 서블릿은 UI와 프로그램 로직사이를 제어해주는 역할에 주로 사용 되어 진다.


 ο Servlet의 장점
   - 요청 시 마다 새로운 Process를 생성하지 않는다.
   - 서버의 Overhead를 줄일 수 있다.
   - 각 요청을 thread로 동작시키기 때문에 좀 더 효과적인 다중작업(multi-tasking)이 가능하다.
   - Servlet은 모든 요청에 대해 최초 한번의 Memory Loading을 한다.
   - Platform에 독립적이다.
   - 보안모델을 사용할 수 있다.


 ο 작성 방법
  1. 첫번째 방법
     서블릿은 Servlet 인터페이스를 구현한 GenericServlet 추상클래스를 상속 받아 service() 메소드를 재정의한다.

  2. 두번째 방법
     - GenericServlet 클래스를 상속 받은 http 프로토콜에 맞게 확장한 HttpServlet 클래스를 상속 받아 doGet(), doPost()등의 메소드를 재정의 한다.
     - HttpServlet 클래스의 주요 메소드는 service(), doGet(), doPost(), doHead() 등이 있다.


 ο Servlet Container
  1. 개요
     - 웹 서버는 JSP와 서블릿 자체를 실행하지 못하므로 JVM을 내장한 컨테이너라는 서블릿 실행환경이 필요하다.
     - 대표적인 웹 컨테이너
       자카르타 톰켓, Resin, 웹 로직 등

  2. 역활
     - Servlet 을 탑재, 인스턴스 화 및 초기화 등 Servlet의 생명주기를 관리한다.
     - 웹 응용 프로그램을 위해 보안, 병행 성 관리, 라이프 사이클 관리 등의 서비스를 제공한다.
     - 보안(security)은 사용자 인증과 제한된 사용자만 접근할 수 있도록 지원
     - 병행 성 관리(Concurrency Management)는 여러 개의 작업이 동시에 이루어지는 경우에 스레드를 통하여 작업이 보다 효과적으로 이루어지도록 지원
     - 라이프 사이클 관리(Life Cycle Management)는 웹 응용 프로그램이 생성되고, 실행되고, 삭제되는 라이프 사이클 전 과정을 지원


 ο Servlet Life Cycle
    - init(), service(), destory()의 세 개의 메소드에 의한 생명주기를 갖는다.

    - 처음으로 서블릿의 요청이 들어 왔을 때 해당 서블릿은 서블릿 컨테이너에 의해 자동으로 메모리에 로딩 되어 진다.
      메모리로 서블릿 클래스가 로딩 된 후 바로 객체를 생성하게 되며 객체 생성과 동시에 init() 메소드를 호출하게 된다.
    - 서블릿이 로딩 될 때 단 한번 init() 메소드를 호출한다.
    - init() 메소드까지 호출 하였다면 service() 메소드를 수행하여 클라이언트의 요청에 반응한다.
    - 서블릿 객체가 더 이상 서비스를 하지 않고 있는 경우 메모리에서 제거되며 이때 호출되어지는 메소드는 destroy() 메소드이다.
       destroy() 메소드가 호출되면 가비지콜렉터는 객체의 메모리를 제거하게 된다.
    - init() 과 destroy() 는 단 한번 호출하게 되며 클라이언트의 요청에 따라 service() 메소드는 요청이 있을 때 마다 호출하게 된다.


 ο 서블릿의 동작 순서
   - 클라이언트의 요청
   - 서블릿 Handler 에서 요청 받음
   - 서블릿 컨테이너에서 해당 서블릿 검색
   - 해당 서블릿이 비지니스 로직 처리
  -  모든 작업이 완료 되었다면 응답으로 결과를 전송 한다.


 ο 디플로이먼트 디스크립터(deployment descriptor, 배포 설명자)
   1. 개요
      - 톰켓 에서의 Deployment Descriptor(배치 기술서)는 web.xml로 각 어플리케이션의 환경을 설정하는 부분을 담당
      - WAR 파일이 패키지 될 때 같이 포함되고, root directory 밑에 /WEB-INF 디렉토리에 위치한다.

   2. servlet과 servlet-mapping 태그
      - web.xml 문서의 servlet과 servlet-mapping 태그는 서블릿을 매핑 하는 것으로 보안과 주소를 간략화 하기 위해 사용한다.

      <servlet>
           <servlet-name>서블릿_이름</servlet-name>
           <servlet-class>패키지를 포함한 클래스_명</servlet-class>
       </servlet>
       <servlet-mapping>
         <servlet-name>서블릿_이름</servlet-name>
         <url-pattern>경로패턴</url-pattern>
       </servlet-mapping>

     - url-pattern은 어떠한 URL 경로로 접근할 수 있는지를 명시한다.

    3. deployment descriptor 이점
      - 이미 테스트된 소스 코드에 대한 수정을 최소화 한다.
      - 소스 코드 없이 애플리케이션을 목적에 맞게 수정할 수 있다.
      - 코드 변경이나 컴파일을 하지 않고도 서버 자원(DB 등등)을 바꿀 수 있다.
      - 접근 제어 목록, 보안 역할과 같은 보안에 관련된 업무도 관리할 수 있다.
      - xml 파일로 되어 있으므로 프로그래머가 아닌 사람도 설정할 수 있다.


 ο Servlet 인터페이스
  서블릿 프로그램은 init(), service(), destroy()의 세 가지 메소드에 의해서 초기화, 서비스, 파괴의 과정을 거치는데 이 세 메소드는 javax.servlet.Servlet 인터페이스에 선언되어 있다.


 ο GenericServlet abstract 클래스
    ServletConfig Interface, Servlet Interface, Serializable Inteface를 구현한 클래스로 네트워크 통신에 적합한 새로운 클래스로 Servlet과 ServletConfig는 서블릿 통신을 할 때 필요한 기본적인 메소드를 가지고 있으며, GenericServlet 에서 모두 구현하고 있다. 하지만 GenericServlet은 abstract 클래스이기 때문에 그 자체로는 사용할 수 없으며 반드시 상속해야만 사용할 수 있다.


 ο HttpServlet 클래스
    GenericServlet 클래스를 상속 받은 클래스로 일반적으로 웹 클라이언트로부터 온 요청을 받아서 처리하고, 그 결과를 다시 웹 클라이언트에게 되돌려 주는 작업을 수행한다.


 ο ServletRequest와 HttpServletRequest 인터페이스
   서블릿 엔진이 클라이언트로부터 온 요청에 대한 정보를 서블릿에게 전달하기 위해 사용하는 기능을 정의하고 있다.(client -> server)


 ο ServletResponse와 HttpServletResponse 인터페이스
   클라이언트 요청에 대한 응답을 MIME 자료 형태로 반환하는 데 사용하며, Binary Data의 전송을 위해서는 ServletOutputStream 형태의 getOutputStream() 을 사용하고, 일반 text data를 전송하시 위해서는 PrintWriter object 형태의 getWriter() 를 사용한다. Text data나 Binary data의 혼합형태(Multipart Response) 처리를 위해서는 ServletOutputStream을 이용해야 한다.(server->client)

   - MIME(Multipurpose Internet Message Extensions)
     Internet Message를 통해서 여러 가지 내용을 보낼 수 있도록 확장한 규격이다. 예를 들어 SMTP는 ASCII 문자로된 RFC 822 형식의 메시지만 전송 가능하다. 한국어와 같이 2바이트로 구성되는 다중 언어, 실행 파일, 그림 파일과 같은 이진 파일도 SMTP로 전송될 수 있도록 ASCII코드로 변환하는 코드변환 방식을 MIME라 한다.


■ JSP(Java Server Pages) 개요
 ο 개요
    자바를 서버환경에서 사용하는 스크립트 방식의 언어로 단일 스레드로 클라이언트의 요청에 서비스한다. 요청이 있을 때마다 프로세스를 생성하는 기존의 CGI와는 달리 하나의 메모리를 공유하면서 서비스되는 원리는 서버 측에 부하를 줄여주며, JSP 내부에는 보여주는 코드만 작성하고, 직접 작업하는 부분은 자바 빈으로 구성하여 분리 할 수 있다. 이것은 서로 영향을 주지 않고 수정할 수 있는 장점을 가지고 있으며, JAVA의 장점인 재사용성을 높일 수 있다.

    - 동적(dynamic)인 웹 페이지를 쉽게 만들 수 있는 방법을 제공하는 자바를 기반으로 하고 있는 스크립트 언어(Server Side Script)
    - JSP 2.0은 J2EE(Java2 Enterprise Edition) 1.4 규약에 포함되어 있다.
    - 자바 엔터프라이즈 어플리케이션에서 UI(User Interface)영역을 담당
    - JSP를 최초로 요청할 때 서블릿으로 변환되고, 컴파일 되어야 하는 약점을 개선하기 위해 서블릿 컨테이너에서는 JSPC(JSP Precompiler)기능을 지원한다
      이는 서버에서 서비스하기 전에 일괄적으로 모든 JSP를 서블릿으로 변환시키기 때문에 최초로 페이지 요청이 들어와도 빠르게 응답할 수 있다.


 ο JSP 동작원리
    URL → DNS서버 → 웹 서버(JSP 페이지요청) → 웹 서버는 *.jsp 로 들어온 요청에 대해서 JSP 컨테이너로 전송 → JSP 파일 파싱 → 서블릿 생성 → 생성된 서블릿 컴파일 → 컴파일 된 클래스 파일을 메모리에 적재 → HTML 형태인 응답을 사용자에게 전송 →사용자의 브라우저에서 HTML 실행

 


 

'JSP' 카테고리의 다른 글

이클립스 환경설정 (Server / JSP Servlet)  (0) 2011.12.07
내부 객체와 폼 처리  (0) 2011.12.07
서블릿 참고 페이지 외  (0) 2011.12.07