앱)JSP(JavaServer Pages)에 대해서

Posted by HULIA(휴리아)
2018. 7. 3. 17:47 백엔드개발/자바스프링
개요
-HTML내에 자바 코드가 삽입되는 언어
-서블릿의 사용을 통해 웹페이지의 내용을 제어하는 기술
-웹 서버에서 동적으로 웹 페이지를 생성할 수 있음
-기본구조가 HTML이므로, 웹 디자인을 변경하기가 용이함


구성요소
-HTML/XML
-지시자(directive)
<%@ directive %>
directive종류(page, include, taglib)

지시자(directive)란
웹 컨테이너가 JSP페이지를 서블릿 클래스로 변환할때 필요한 정보기술하기 위해 사용(JSP 컨테이너에 해당 페이지의 특수한 처리 정보를 넣고자 할때 사용핝다. 사용할 스크립팅 언어를 지정한거나 다른 페이지의 컨트를 삽입하고, 태그 라이브러리를 지정할때 사용)

1)page지시자
<%@ page 속성1="값" 속성2="값" ... %>
또는
<jsp:directive.page 속성1="값" 속성2="값" ... />

속성(attribute)리스트
info : JSP페이지의 역할을 설명(보통 작성자나 버전이나 저작권 정보등을 기술)
language : JSP페이지에서 사용할 스크립팅 언어를 지정할 때 사용(기본적으로 java를 사용) 만약 Include된 문서가 있다면 language속성에서 지정한 동일한 언어를 사용해야 한다
contentType : JSP페이지에서 생성하는 응답의 MIME타입(주로 사용되는 MIME 타입은 text/html, text/xml, text/plain 등) 을 지정한다
또한 문자열 셋을 지정할 수 있음
예시: contentType="text/html; charset=UTF-8"
pageEncoding : JSP 1.2에서 새로 도입된 방법으로 contentType의 charset과 같은 기능을 한다
import : 여러개를 사용할 수 있는 속성이며 JSP페이지에서 참조할 자바 클래스를 확장한다
session : JSP페이지가 세션관리에 가담할지를 결정한다. 기본값이 ture이기 때문에 세션관리에 자동으로 가담하게 된다
buffer : 출력 버퍼링을 조정한다. 기본 버퍼의 크기가 8kb이지만 JSP컨테이너는 상황에 따라 더 큰 버퍼로 잡을 수 있다.  여기서 지정한 버퍼의 크기는 최소의 크기라고 생각하면 된다
autoFlush : buffer속성과 밀접한 관계가 있는 속성으로 버퍼를 자동으로 비울 것인가를 판단하는 속성 기본값은 ture이지만 출력 결과를 최대한 늦추길 원한다면 flase를 줄수 있다. 그러나 주의할점은 buffer의 속성이 none일때는 autoFlush속성을 false로 설정할수 없다
isThreadSafe : JSP페이지가 서블릿으로 컴파일될때 여러개의 동시 요청에 응답할 수 있는 기능을 넣느냐를 결정하는 속성. false로 주면 동시에 전달된 요청에 순차적으로 반응하기 때문에 사용자들은 엄청난 인내심을 가져야 한다
그러나 속성값을 true로 주었을때도 관심을 기울여야 할 부분이 많다. JSP페이지에 의해 데이터 베이스를 연동한다면, 데이터 베이스 사용에 특별한 조치가 없는한 여러개의 쓰레드에 의해 안전하게 데이터베이스를 처리할수는 없다. 이런 경우 페이지 엑세스중 런타임 에러가 발생할 확률이 높아진다.
해결하려면 데이터베이스의 pool을 엑세스하여 미사용 데이터베이스가 생길때까지 기다리게 하거나, synchronized 키워드를 사용하여 해당 처리 부분을 동기화 시킨다.
보편적으로 true를 주는 것이 좋다
errorPage : JSP에서 처리하지 못하는 오류가 발생할 때 기본 에러 페이지를 사용하지 않고 특정 페이지를 사용하고자 할때 사용
errorPage="URL"
URL은 절대경로와 상대경로 모두 사용할 수 있음
주의할 점은 errorPage 속성을 사용하고자 할때는 현재의 페이지 정보가 한번이라도 브라우저로 전송되어서는 안된다는 것이다 따라서 autoFlush 속성을 false로 설정해야 한다.
isErrorPage
해당 페이지가 에러 페이지로 작동하도록 할때 사용한다
대부분의 페이지가 에러 페이지로 작동하지 않기 때문에 기본값은 false이다

2) include 지시자
주어진 파일을 현재 페이지에 삽입하고자 할때 사용된다
<%@ include file="fileorurl" %>
또는
<jsp:directive.include file="fileorurl" />
반복해서 여러번 사용 가능
주의할 점은 JSP컨테이너는 어떤 페이지의 내용이 수정되면 자동으로 서블릿으로 컴파일되어지지만 include로 삽입된 파일이 수정되었다고 자동으로 컴파일되지 않는다는 점이다
만약 include된 파일이 수정되었다면 include한 파일의 저장 날짜를 수정해주거나, 내용을 다시 한번 저장해 주어야 한다
즉 include로 지정된 파일은 directive를 선언한 파일과 한몸으로 되어서 컴파일된다 이를 정적인 방식으로 포함되었다고 표현한다


3) taglib 지시자
JSP 페이지가 사용할 태그 라이브러리를 지정할 때 사용된다.
태그 라이브러리는 JSP 기능을 확장하기 위해 사용될수 있는 커스텀 태그를 모아놓은 것을 말한다
<%@ taglib url="tag_library_url" prefix="tag_prefix" %>
또는
<jsp:directive.taglib url="tag_library_url" prefix="tag_prefix" />
url속성값은 해당 태그 라이브러리의 태그 라이브러리 설명자(TLD:tag library descriptor)의 위치를 나타내며, prefix속성은 라이브러리를 사용하는 페이지에서 해당 라이브러리의 태그 앞에 붙여지는 XML 네임스페이스 식별자를 지정하는 것

예시
<%@ taglib url="" prefix="c" %>
<c:if 속성="값" ... >

-스크립트 요소 : 자바 구문, 선언문(<%! ... %>), 표현식(<%= ... %>), 스크립틀릿(<% ... %>)
-내장객체(implicit object) : request, response, out, session, application, pageContext 등
-액션 : 서버 동작 <jsp:XXX ... />
XXX는 include, forward, useBean, setProperty, getProperty
액션중에 include는 해당 url로 호출한 결과를 액션을 호출한 페이지에 포함한다 이를 동적인 방식으로 포함되었다고 한다
동적인 방식으로 포함시키는 또다른 방식은 JSTL의 import를 사용하면 된다
정적포함방식
<%@ include file="fileorurl" %>
동적포함방식
<jsp:include page="" />
<c:import var="data" url="" />

액션중에 forward는 URL이동없이 페이지 이동이 발생하며 현재 같은 서블릿 컨텍스트내의 다른 페이지로만 이동할 수 있음