온풀투데이

[JSP] JSP(Java Server Pages) 개념 본문

TIL

[JSP] JSP(Java Server Pages) 개념

온풀 2022. 4. 11. 19:43

// 정적인 문서, 동적인 문서  / JSP, Servlet 설명 필기

웹 어플리케이션

정적인 문서
- A.html, B.html, C.html
- 문서를 이미 만들어 놔야 요청할 수 있음.

동적인 문서
- 내용물이 없고 일꾼이 있음 작업 지시를 내림. 
- 그 일꾼이 문서를 그림
- 웹 컨테이너의 영역 안에 굉장히 큰 부분을 → servlet 컨테이너
- servlet 안의 요소들 → servlet이라고 부름 / 일꾼, 일하는 방식, 공간, 문서, 결과물 등 ...
- 미리 만들어진 형태가 아님. 누가 들어왔느냐에 따라서 'ㅇㅇㅇ님 환영합니다.'처럼...
- 그러려면 일꾼에게 명령을 내릴 수 있어야겠죠? 어떻게 명령을 내리고 지시를 해야 우리가 원하는 형태로 문서를 그려줄지...

동적인 문서를 만들어 내는 걸... 자바한테 시키는 거.
자바 -> (컴파일하면)클래스 -> (어떤 규칙에 맞게 작성하면)서블릿

String title = "테스트";

System.out.println("<html>");
System.out.println("<head>");
System.out.println("<title>");

if (title.equals("테스트")
{
    System.out.println("<body>");
    System.out.println("</body>");
}

System.out.println("</title>");
System.out.println("</head>");
System.out.println("</html>");

중요한 건, 자바의 출력 스트림 안에 내용을 다 넣어줘야 한다는 거.
그래서 JSP 문법이 나옴.

Servlet을 대체하려고 JSP가 나온 게 아님.
온전하게 분리되어 만들어 진 아이가 아님.

html 문서만 그리는 게 더 편한데, 구태여 자바 코드 안에 그리려니까 너무 힘들어서
그리는 걸, 옆에 한 명을 더 두는 것.

Servlet -> 빈 문서에 한땀한땀 그리게 하는 것.
JSP -> 

사단장이... 군단장한테... 문서를 작성해서 보고하려고 함. 
그 문서를 누가 썼을까? -> 더 낮은 계급의 병사...
템플릿 제공... 초안 작성 원활
더 원활하게 하기 위해 약속도 할 수 있을 것. (점은 그림 파란 점은 도표!)
--> 이게 JSP

서블릿이라는 공간에서 서블릿이 일을 하는 건 JSP에서도 똑같음. 
서블릿과 JSP는 뗄레야 뗄 수가 없음.

사실 JSP 컨테이너라는 건 없음. 그것도 서블릿.

결론...
서블릿도 JSP도 둘다 모두 동적인 웹 페이지를 생성하는 기술이다.
동적인 웹 페이지를 생성한다는 건, 사용자마다 똑같은 페이지를 요청해도 다른 결과를 주는 것을 말한다.
어떤 요청이 들어왔냐에 따라 다른 결과를 주는 것.
그래서 둘다 웹 기반의 어플리케이션(요청에 대한 응답 수행) 
servlet -> 자바로 html 만드는 것
이를 기반으로 JSP 등장... 사단장이 좀 더 편하다.

MVC 디자인 패턴 / V = view
모델 뷰 컨트롤러
모델은 자바...
컨트롤은 서블릿이 편하네~...


■■■ JSP(Java Server Pages) ■■■

1. JSP(Java Server Pages) : 웹 프로그램 작성 언어의 한 종류

2. JSP(Java Server Pages)는 동적(Dynamic)인 웹 페이지를
   비교적 간단히 만들 수 있는 방법을 제공하는
   자바를 기반으로 하고 있는 스크립트 언어(Server Side Script)로
   자바 엔터프라이즈 어플리케이션에서 UI(User Interface) 영역을
   담당하고 있다.
// 엔터프라이즈 -> 기업용 

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

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

4. JSP 실행 구조
   
   1단계. 웹 클라이언트에서 웹 서버에 웹 프로그램(페이지) 요청 // JSP는 게임팩 같은 거

   2단계. 웹 서버에서 웹 클라이언트가 요청한 JSP 프로그램(페이지) 로드 // 기계에 게임팩 넣기
   
   3단계. JSP 페이지에 대한 변환 실행
          ※ 이 과정에서 일반 『.java』인 파일로 변환된다. 『→ Servlet』 // 지지직...하고 변환

   4단계. 『.java』인 파일로 변환된 Servlet 의 컴파일(.class) 및 실행
   
   5단계. 실행 결과로 동적 생성된 HTML Document 를 클라이언트 측에 응답 // 기계에서 html 문서가 지잉... 하고 나옴
   
   6단계. 웹 클라이언트는 응답받은 HTML Document 를
          브라우저에서 웹 페이지 형태로 출력

5. 이클립스 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="8090" />
                     -------------------     -----------
                      → 추가                 → 수정 (기본 8080)

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

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

   8) 톰캣 서버가 실행되고 있는 상태에서   
      웹 브라우저의 URL 주소 창에 다음과 같은 주소를 요청한다. (클라이언트 입장)
    
      http://서버주소:포트번호/프로젝트이름/파일이름.jsp
   
      http://localhost:8090/WebAppxxx/jsptest001.jsp
             ---------
             127.0.0.1
     
      ※ 원격 접속인 경우는 localhost(127.0.0.1) 대신
         목적지 서버의 IP Address 를 작성해야 한다.

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

      ·page
       페이지에 대한 기본 정보 입력
       (생성하는 문자의 타입, 출력 버퍼의 크기, 에러 페이지 등)
       현재 문서를 나타내는 객체
       page 디렉티브는 JSP 페이지와 관련된 속성을 정의하고
       이 속성들은 웹 컨테이너에 정보를 제공한다.
       또한, 웹 페이지에 page 디렉티브는 여러 번 등장할 수 있고
       위치도 관계가 없다. 하지만 보통 페이지 상단에 기술한다.
   
       주요 속성
       - language : 스크립트 코드에서 사용되는 프로그램이 언어 지정
       - contentType : 생성할 문자 타입
       - import : 사용할 자바 클래스 지정
       - session : 세션 사용 여부 지정
       - buffer : 출력 버퍼 크기 지정
       - autoFlush : 출력 버퍼가 다 채워졌을 경우 
                     자동으로 버퍼에 있는 데이터를 비우게 만들지의 여부 지정
       - info : 페이지에 대한 설명
       - errPage : 실행 도중 에러 발생 시 보여줄 페이지 지정
       - pageEncoding : 페이지 자체의 캐릭터 인코딩 지정

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

      ·include
        다른 문서를 포함하는 기능
        여러 JSP 페이지에서 공통적으로 포함하는 내용이 있을 때
        이러한 내용을 매번 반복해서 입력하지 않고
        별도의 파일에 저장해 두었다가 JSP 파일에 삽입하도록 하는 것 → 생산성 향상
        include 디렉티브 처리 과정은
        정적으로 include 지시자를 사용한 JSP 페이지가 컴파일 되는 과정에서 
        include 되는 JSP 페이지 소스 내용을 그대로 포함해서 컴파일한다.
        즉, 복사&붙여넣기 방식으로 두 개의 파일을 하나로 구성한 후
        같이 변환되고 컴파일된다.

   2. 스크립트 요소
      - 스크립트 릿(Scriptlet)... 스크립 릿... 스크립틀릿...
        JSP 에 자바 코드를 기술
        <% %>

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

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

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

        스크립트 릿이나 표현식에서 사용할 수 있는 변수나 메소드를 정의하는
        부분이기 때문에 선언부에서 선언된 변수는 서블릿으로 변환되는 과정에서
        멤버 변수의 입장을 취하게 되며 전역 변수의 성격을 가진다.
        또한, 『_jspInit()』, 『_jspDstroy()』와 같은 생명주기 운영을 위해
        메소드를 재정의할 수 있다.