개발/Spring

JSP란

728x90

JavaServer Pages, 동적 페이지를 작성하는데 사용하는 자바의 표준 기술로서 HTML응답을 생성하는데 필요한 기능을 제공하고 있다.더 정확히는 XML, JSON, 바이너리 등 파일등도 응답으로 생성할 수 있지만 주로 HTML생성 목적으로 사용한다.

 

JSP를 이용해서 만든 프로그램을 실행하려면 톰캣이나 제티 또는 JBoss EAP와 같으 ㄴ서버 프로그램이 필요하다.

 

왜 사용하는가 ?

 

CGI 처럼 사용되지만 

 

 

 

 

 

자바 서블릿(Java Servlet)

서블릿이란 웹페이지를 동적으로 생성하기 위해 서버측 프로그램을 말한다. 

이는 자바 언어를 기반으로 만들지며 웹 어플리케이션 서버 ( Web Application Sever ) 위에서 컴파일 되고 동작한다.


JSP 와 서블릿

JSP 와 서블릿의 차이점은 결과적으로 하는일은 동일하지만 

JSP 는 HTML 내부에 JAVA 소스코드가 들어감으로 인해 HTML 코드를 작성하기 간편하다는 장점이있으며

서블릿은 자바코드내에 HTML 코드가 있어서 읽고 쓰기가 굉장히 불편하기 때문에 작업의 효율성이 떨어진다.

 

하지만 웹을 공부할때 JSP 와 서블릿은 함께 배운다 그건 왜 때문일까..

JSP 로 작성된 프로그램은 서버로 요청시 서블릿(Servlet) 파일로 변환되어 JSP 태그를  분해하고 추출하여 다시 순수한 HTML 를 변환한다.

JSP 문서는 백그라운드에서 서블릿으로 자동으로 변환된다.

 

1. 클라이언트가 어떤 동작을 함으로써 hello.jsp 를 요청하였다.

2. JSP 컨테이너가 JSP 파일을 읽는다.

3. JSP 컨테이너가 Generete (변환) 작업을 통해 Servlet ( .java )  파일을 생성한다.

4. .java 파일은 다시 .class 파일로 컴파일된다.

5. Execute (실행) 을통해 HTML 파일을 생성하여 JSP 컨테이너 에게 전달한다.

6. JSP 는 HTTP 프로토콜을 통해 HTML 페이지를 클라이언트 에게 전달한다.

 

 

JSP의 특징

 

스크립트 언어이기 때문에 자바 기능을 그대로 사용할 수 있다

Tomcat(WAS)이 이미 만들어 놓은 객체를 사용한다.

 

사용자 정의 태그를 사용하여 보다 효율적으로 웹사이트를 구성할 수 있다.

 

 

일반적으로 JSP 코드는 페이지에 대한 정보를 입력하는 설정 부분과 HTML 문서를 생성하는 생성 부분으로 나눌 수 있다.

 

JSP페이지가 생성하는 문서의 타입

JSP페이지에서 사용할 커스텀 태그

JSP페이지에서 사용할 자바 클래스 지정

 

<%@ page... %>를 디렉티브라고 하는데 JSP 페이지에 대한 정보를 설정할 때 사용한다.

 

생성할 문서의 타입 뿐만 아니라 다양한 정보를 지정할 수 있다.

 

생성할 문서와 데이터 문서를 생성하는 데 필요한 스크립트 코드와 같은 것들이 위치한다.

 

 

 

구성요소 :

 

JSP 페이지에 대한 정보를 ㅣ쩡해야하고, 웹브라우저가 전송한 데이터를 읽어오는 기능이 필요하고 페이지에서 사용할 데이터를 생성하는 실행코드가 필요하고 웹브라우저에 문서 데이터를 전송해 주는 기능이 필요하다.

 

이처럼 HTML 문서를 생성하기 위해서 다양한 것들이 필요한 데 이를 위해 JSP에서는 다음과 같은 것들을 제공한다.

 

 

디렉티브

스크립트 : 스크립트릿, 표현식, 선언부

표현 언어

기본 객체

정적인 데이터

표준 액션 태그

커스텀 태그, 표준 태그 라이브러리

 

 

디렉티브 : 

 

JSP 페이지에 대한 설정 정보를 지정

 

JSP가 제공하고 있는 디렉티브는

 

page 페이지에 대한 정보를 지정한다. JSP가 생성하는 문서와 타입, 출력버퍼의 크기, 에러 페이지 등 JSP페이지에서 필요로 하는 정보를 설정한다.

taglib : JSP페이지에서 사용할 태그 라이브러리를 지정한다.

include : JSP페이지에서 특정 영역에 대한 문서를 포함시킨다.

 

 

스크립트 요소 : 

문서의 내용을 동적으로 생성하기 위해 사용되는 것이다.

 

스크립트 요소를 사용하면 사용자가 폼에 입력한 정보를 데이터베이스에 저장할 수 있으며, 데이터베이스로부터 게시글 목록을 읽어와 출력할 수 있다. 또한 스크립트를 사용하면 자바가 제공하는 다양한 기능 사용 가능하다.

 

JSP 스크립트는 다음과 같다

 

표현식 : 값을 출력

스크립트릿 : 자바 코드를 실행한다

선언부 : 자바 메서드를 만든다.

 

 

기본 객체

 

request, response, session, application, page 등 다수의 기본 객체 존재

 

이들은 요청 파라미터 읽어오기, 응답 결과 전송하기, 세션 처리하기, 웹 앱 정보 읽어오기 등의 기능을 제공.

 

 

표현언어

 

JSP의 스크립트 요소는 자바 문법을 그대로 사용할 수 있기 때문에 자바 언어의 특징을 그대로 사용할 수 있다는 장점

 

하지만 스크립트 언어를 사용하면 JSP 코드가 다소 복잡해짐.

표현언어를 사용하면 같결하게 작성할 수 있다.

 

 

표준 액션 태그와 태그 라이브러리

 

액션 태그는 JSP 페이지에서 특별한 기능을 제공한다.

액션 태그는 <jsp : 액션 태그 이름> 형태를 띄며, 액션 태그 종류에 따라서 서로 다른 속성과 값을 갖는다.

 

커스텀 태그는 JSP를 확장시켜 주는 기능으로서 액션 태그와 마찬가지로 태그 형태로 제공한다.

 

차이점은 커스텀 태그는 개발자가 직접 개발해줘야 한다는 것이다.

 

일반적으로 JSP코드에서 중복되거나 모듈화하거나 스크립트 코드를 사용할 때 발생하는 소스 코드의 복잡함을 없애기 위해 커스텀 태그를 사용한다.

 

커스텀 태그 중에서 자주 사용하는 것들을 별도로 표준화한 태그 라이브러리가 있는데

 

이것은 JSTL이라고 하낟 조건문 그리고 반복 처리를 커스텀 태그를 이용해서 구현할 수 있도록 해준다.

(JSP 개발을 단순화하기 위한 태그 라이브러리.

빠른 개발, 코드 재사용성, 스크립틀릿 태그를 사용할 필요 없음)

 

 

page 디렉티브

 

page 디렉티브는 JSP페이지에 대한 정보를 입력하기 위해 사용됨.

page 디렉티브를 사용하면 JSP 페이지가 어떤 문서를 생성하는지, 어떤 자바 클래스를사용하는지, 세션에 참여하는지 출력 버퍼의 존재 여부와 같ㅌ이 JSP 페이지를 실행하는데 필요한 정보를 입력할 수 있다.

 

contentType : MIME 타입과 캐릭터 인코딩을 지정

import : JSP 페이지에서 사용할 자바 클래스 지정

session : JSP 페이지가 세션을 사용할지의 여부를 지정한다.

buffer : 출력 버퍼의 크기를 지정한다.

autoFlush :  : 출력 버퍼가 다 찼을 경우 자동으로 버퍼에 있는 데이터를 출력 스트림에 보내고 비울지 여부를 나타낸다. 
info : JSP페이지에 대한 설명

errorPage : 도중에 에러가 ㅂ라생할 때 보여줄 페이지를 지정

isErrorPage : 현재 페이지가 에러 발생했을 때 보여줄 페이지인지설정

pageEncoding 캐릭터 인코딩 지정

isELIgnored : 표현언어를 해석하지 않고 문자열로 처리할지의 여부 

deferredSysntaxAllowedAsLiteral : 문자가 문자열 값으로 사용 된는것을 허용할지의 여부를 지정

trimDirectiveWhitespaces : 출력 결과에서 템플릿 텍스트의 공백 문자를 제공할지의 여부 지정

 

 

contentType

 

JSP페이지가 생성할 문서의 타입을 지정함.

JSP가 생성할 문서의 MIME 타입을 입력함.

MIME : Multipurpose Intenet MAil Extensions 이메일의 내용ㅇ르 설명하기 위해 정의됨. 메일 뿐만 아니라 HTTP등의 프로토콜에서도 응답데이터의 내용ㅇ르 설명하기 위해서 사용함.

 

 

 

 

 

 

 

 

 

'개발 > Spring' 카테고리의 다른 글

RAM, 랜덤엑세스  (1) 2021.04.10
ServletContextListner 구현  (0) 2021.04.09
자바 Object 클래스  (0) 2021.04.06
자바 상속  (0) 2021.04.06
패키지와 접근 제어  (0) 2021.04.06