📚 Study/JSP & Servlet

JSP & Servlet :: JSP(Java Server Pages)

bono-hye 2023. 12. 6. 21:37

🔎 JSP  : 웹 프로그램 작성 언어의 한 종류

- 동적(Dynamic)인 웹 페이지를 비교적 간단히 만들 수 있는 방법을 제공하는 자바를기반으로 하고 있는 스크립트로 

자바 엔터프라이즈 어플리케이션에서 UI 영역을 담당한다.

 

- 자바를 서버 환경에서 사용하는 스크립트 방식의 언어로 단일 스레드로 클라이언트의 요청에 서비스한다.

요청이 있을 때 마다.. 즉, 객체가 생성될 때 마다 프로세스를 생성하는 기존의 CGI 와는 달리 하나의 메모리를 공유하면서 서비스되는 원리를 가진다.

이러한 원리는 서버측 부하를 줄여주며, JSP 내부에는 보여주는 코드만 작성하고

직접 작업하는 부분은 자바 빈으로 구성하여 둘을 분리할 수 있다.

이는 서로 영향을 주지 않으면서 수정할 수 있는 장점을 취하며, JAVA 가 갖고 있는 장점인 재사용성을 높일 수 있게 한다.

 

클라이언트 <---------------------------> 서버
HTML, CSS, Javascript <-----------> JSP(JAVA)
브라우저(IE, CR, FF 등) <----------> 웹서버(톰캣), 오라클
요청 <------------------------------------> 응답(HTML 웹 페이지)


JSP 실행 구조

1단계. 웹 클라이언트에서 웹 서버에 웹 프로그램(페이지) 요청

 

2단계. 웹 서버에서 웹 클라이언트가 요청한 JSP 프로그램(페이지) 로드

 

3단계. JSP 페이지에 대한 변환 실행

(※ 이 과정에서 일반 『.java』 인 파일로 변환된다. 『→Servlet』)

 

4단계.  『.java』 인 파일로 변환된 Servlet의 컴파일(.class) 및 실행

 

5단계. 실행 결과로 동적 생성된 HTML Document 를 클라이언트 측에 응답

 

6단계. 웹 클라이언트는 응답받은 HTML Document를 브라우저에서 웹 페이지 형태로 출력


✔ 이클립스 JSP 개발 환경 구축

1. 프로젝트(new) 생성 시 『Dynamic Web Project』 선택

 

2. 프로젝트 명 입력 시 식별자 작성 규칙을 준수

    원래 규칙에 따르면 『JspTest001.jsp』와 같이 명명해야 하지만,
    클라이언트 측에서 (대소문자 구분없이) 좀 더 편하게 사용할 수 있도록
    일단 지금은(당분간은) 『jsptest001.jsp』와 같이 명명한다.

 

3. Target Runtime 지정 → 톰캣 설치 디렉터리 연결

 

4. 프로젝트 생성 후에는 Server 탭에서 톰캣 서버 등록
    (단, 서버 를 새로 등록했을 경우 서버 관련 설정을 재구성)

 

5. 톰캣 서버에 프로젝트 등록 → add and remove

 

6. 톰캣 서버 시작(재시작)
      ※ 이 시점에서...
         포트번호 설정 및 확인 필요
         (오라클이 웹 상에서 port 8080 을 사용하기 때문에 충돌 방지)
         『Project Explorer』의 『Server』 디렉터리 노드를 확장하면
         『server.xml』 파일이 존재하며, 이 파일을 열어 63 ~ 65 정도 라인의 내용을 수정한다.

         <Connector URIEncoding="UTF-8" ... port="3303" />
                              -----------------------------     -----------------
                                      ↑ 추가 삽입               ↑ 수정 (기본 8080)

       ※ xml 파일을 수정한 후에는 반드시 서버를 재시작 해야 한다. 

 

7. JSP 페이지 작성(확장자 『.jsp』)
      → WebContent 디렉터리 하위에 작성
      ※ 페이지 작성 전에 Encoding 방식을 체크 및 설정한다. (UTF-8)
      ※ JSP 기본 페이지의 템플릿을 HTML5 기반으로 수정하여 설정한다. (기본 HTML 4.01)

 

8. 톰캣 서버가 실행되고 있는 상태에서 웹 브라우저의 URL 주소 창에 다음과 같은 주소를 요청한다. (클라이언트 입장)

    http://서버주소:포트번호/프로젝트이름/파일이름.jsp
    http://localhost:3306/WebApp004/jsptest001.jsp
             ---------
             127.0.0.1

    ※ 원격 접속인 경우는 localhost(127.0.0.1) 대신 목적지의 서버 IP Address 를 작성해야 한다.


✔ JSP 구성 요소

 

1. 디렉티브(지시어) : 페이지에 대한 설정 정보지정. 클래스 속성을 변경. 
     <%@  %>


  1) page
    - 페이지에 대한 기본 정보 입력 (생성하는 문서의 타입, 출력 버퍼의 크기, 에러 페이지 등)
    - 현재 문서를 나타내는 객체
    - page 디렉티브는 JSP 페이지와 관련된 속성을 정의하고, 이 속성들은 웹 컨테이너에 정보를 제공한다.

    - 또한, 한 페이지에 page 디렉티브는 여러 번 등장할 수 있고 위치도 관계가 없다.

    - 하지만 보통 페이지 상단에 기술한다.

       · 주요 속성
        - language : 스크립트 코드에서 사용되는 프로그래밍 언어 지정
        - contentType : 생성할 문서 타입
        - import : 사용할 자바 클래스 지정
        - session : 세션 사용 여부 지정
        - buffer : 출력 버퍼 크기 지정
        - autoFlush : 출력 버퍼가 다 채워졌을 경우, 자동으로 버퍼에 있는 데이터를 비우게 만들지의 여부 지정
        - info : 페이지에 대한 설명
        - errPage : 실행 도중 에러 발생 시 보여줄 페이지 지정
        - pageEncoding : 페이지 자체의 캐릭터 인코딩 지정


   2) taglib

     - 태그 라이브러리(tag library)
     - 사용자가 만든 태그 모음(사용자가 직접 기능 설정)

    3) include

     - 다른 문서를 포함하는 기능

     - 여러 JSP 페이지에서 공통적으로 포함하는 내용이 있을 때, 이러한 내용을 매번 반복해서 입력하지 않고
        별도의 파일에 저장해 두었다가 JSP 파일에 삽입하도록 하는 것 

        → 생산성 향상
      - include 디렉티브 처리 과정은

        정적으로 include 지시자를 사용한 JSDP 페이지가 컴파일 되는 과정에서
        include 되는 JSP 페이지 소스 내용을 그대로 포함해서 컴파일한다.
        즉, 복사&붙여넣기 방식으로 두 개의 파일을 하나로 구성한 후
        같이 변환되고 컴파일된다.


   2. 스크립트 요소 : 스크립트 릿(Scriptlet).

                                JSP 에 자바 코드를 기술

        <%  %>


     - JSP 문서 내에 JAVA 코드를 기술하는 부분이기 때문에 오로지 자바 코드만 올 수 있다.
      스트립트 릿에 선언된 변수는 지역 변수의 성격을 가지게 되며
      (서블릿 안에 있는 service() 메소드 안에 선언된 변수이므로...)
      자바에서 메소드 내에 선언된 변수라고 할 수 있다.

    1) 표현식(Expression)
        HTML 문서 결과값에 포함시키고자 할 때 사용
        <%=  %>
        (즉, 브라우저에 등장시킬 수 있는 영역)

     2) 선언부(Declaration)
         스크립트릿이나 표현식에서 사용할 수 있는 함수 작성 시 사용.
         <%!  %>

        스크립 트 릿이나 표현식에서 사용할 수 있는 변수나 메소드를 정의하는 부분이기 때문에

        선언부에서 선언된 변수는 서블릿으로 변환되는 과정에서
        멤버 변수의 입장을 취하게 되며 전역 변수의 성격을 가진다.
        또한, 『_jspInit()』, 『_jspDestory()』와 같은 생명주기 운영을 위해
        메소드를 재정의할 수 있다.