[JSP] 디렉티브 태그(한글 출력 및 페이지 모듈화)와 액션 태그(상품 목록 표시)
디렉티브 태그
JSP 페이지를 어떻게 처리할 것인지 설정하는 태그
JSP 페이지가 서블릿 프로그램에서 서블릿 클래스로 변환할 때 JSP 페이지와 관련된 정보를 JSP컨테이너에 지시하는 메시지 -> 다시 컴파일하는 경우에만 역할을 수행하기 때문에 개별 HTML 응답에 특별한 영향을 미치지 않음
<%@ page ... %>
JSP 페이지에 대한 정보를 설정
<%@ include file="(경로)파일명"%>
JSP 페이지의 특정 영역에 다른 문서를 포함
<%@ taglib uri="경로" prefix="태그 식별자"%>
JSP 페이지에서 사용할 태그 라이브러리 설정
page 디렉티브 태그
현재 JSP 페이지에 대한 정보 설정
JSP 페이지 어디에서든 선언할 수 있지만 일반적으로 JSP 페이지의 최상단에 선언하는 것을 권장
하나의 page 디렉티브 태그에 여러 개의 속성 설정 가능, 여러개의 속성마다 개별적으로 page 디렉티브 태그 선언 가능
import 속성을 제외한 속성은 JSP 페이지에 한 번씩만 설정 가능
속성
language
현재 JSP 페이지에서 사용할 프로그래밍 언어를 설정하는 데 사용
기본 값: java
contentType
현재 JSP 페이지의 콘텐츠 유형(MIME-type)을 설정하는 데 사용
콘텐츠 유형: text/html, text/xml, text/plain, ...
기본 값: text/html
JSP 페이지의 문자열 세트 변경 가능
<%@ page contentType="text/html:charset=utf-8" %>
pageEncoding
현재 JSP 페이지의 문자 인코딩 유형을 설정하는 데 사용
기본 값: ISO-8859-1
같은 표현
<%@ page contentType="text/html:charset=UTF-8" %>
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page contentType="text/html" pageEncoding="UTF-8" %>
import
현재 JSP 페이지에서 사용할 자바 클래스를 설정하는 데 사용
둘 이상의 자바 클래스를 포함하는 경우 쉼표(,)로 구분하여 여러 개의 클래스 설정 가능 혹은 각각 별도로
<%@ page import="java.io.*, java.lang.*"%>
<%@ page import="java.io.*"%>
<%@ page import="java.lang.*"%>
session
현재 JSP 페이지의 HTTP 세션 사용 여부를 설정하는 데 사용 (session 변수: JSP 내장 객체)
기본값: true
buffer
현재 JSP 페이지의 출력 버퍼 크기를 설정하는 데 사용
none or 버퍼 크기
서버의 고유한 값이지만 일반적으로 8KB
autoFlush
자동으로 출력 버퍼를 비우는 것을 제어하는 데 사용
기본 값: true (버퍼가 채워질 때마다 자동으로 웹 브라우저에 보내고 버퍼를 비움)
false: 버퍼가 가득 채워질 때 버퍼 오버플로 예외를 발생시킴
isThreadSafe
현재 JSP 페이지에서 멀티스레드의 동작을 제어하는 데 사용
기본 값: true (JSP 페이지에 대해 수신된 여러 요청이 동시에 처리됨)
false: JSP 페이지에 대해 수신된 여러 요청이 순차적으로 처리됨
info
현재 JSP 페이지에 대한 설명을 설정하는 데 사용
JSP 개발자가 페이지의 기능을 이해하는 데 도울을 줌
주석문의 기능과 같기 때문에 JSP 컨테이너느 info 속성을 무시함
내부적으로: JSP 컨테이너가 서블릿 인터페이스 getServletInfo() 메소드를 사용함
errorPage
현재 JSP 페이지가 실행되는 동안 오류가 발생하면 특정 오류 페이지로 이동하는 데 사용
isErrorPage
현재 JSP 페이지가 오류 페이지인지 여부를 설정하는 데 사용
기본 값: false, 예외처리를 위한 내장 객체임 exception 변수를 사용할 수 없음
isELIgnored
현재 JSP 페이지의 표현 언어(Expreesion Language) 사용 여부를 설정하는 데 사용
기본 값: false (표현식 사용가능)
isScriptingEnabled
스크립트 태그(선언문, 스크립틀릿, 표현문) 사용 여부를 설정하는 데 사용
include 디렉티브 태그
현재 JSP 페이지의 특정 영역에 외부 파일의 내용을 포함하는 태그
HTML, JSP, 텍스트 파일, ... 포함가능
JSP 페이지 어디에서든 선언 가능
현재 JSP페이지와 같은 디렉터리에 있으면 파일명만, 아니면 전체URL(또는 상대 경로)을 설정
서블릿 프로그램으로 번역될 때 현재 JSP 페이지와 설정된 다른 외부 파일의 내용이 병합되어 번역됨
(공통된 부분을 별도의 JSP 파일로 만들어 페이지를 모듈화 할 수 있음(중복된 코드 감소))
taglib 디렉티브 태그
현재 JSP 페이지에 표현 언어, JSTL, 사용자 정의 태그 등 태그 라이브러리를 설정하는 태그
액션 태그
서버나 클라이언트에게 어떤 행동을 하도록 명령하는 태그
- 페이지와 페이지 사이를 제어
- 다른 페이지의 실행 결과 내용을 현재 페이지에 포함
- 자바빈즈(JavaBeans)
XML 형식 '<jsp: ... />' 를 사용 (반드시 '/>' 로 마무리)
사용 이유:
스크립트 태그와 마찬가지로 JSP 페이지에서 자바코드를 삽입할 수 있는 태그. 스크립트 태그를 이용하여 JSP 페이지에 직접 자바 코드를 작성하는 것을 피하기 위해 사용. 즉 JSP 페이지를 작성할 떄 자바 코드의 삽입을 최소화여 유지보수를 효율적으로 하는 것이 목적
종류
액션 태그 | 형식 | 설명 |
forward | <jsp:forward page="(경로)파일명"/> 또는 <jsp:forward page="(경로)파일명"></jsp:forward> |
다른 페이지로 이동 같은 페이지 흐름 제어 |
include | <jsp:include page="(경로)파일명" flush="false"/> | 외부 페이지 내용을 포함하거나 페이지 모듈화 (HTML, JSP, 서블릿 페이지, ...) |
useBean | <jsp:useBean id="자바빈즈 식별이름" class="자바빈즈 이름" scope="범위"/> | 자바빈즈 설정 |
setProperty | <jsp:setProperty name="자바빈즈 식별이름" property="프로퍼티 이름" value="값"/> <jsp:setProperty name="자바빈즈 식별이름" property="프로퍼티 이름"/> : 요청 파라미터 이름 = 자바빈즈의 프로퍼티 이름 <jsp:setProperty name="자바빈즈 식별이름" property="프로퍼티 이름" param="파라미터 이름"/> : 요청 파라미터 이름 ≠ 자바빈즈의 프로퍼티 이름 <jsp:setProperty name="자바빈즈 식별이름" property="*"/> : 요청 파라미터 이름 = 모든 자바빈즈의 프로퍼티 이름 |
자바빈즈의 프로퍼티 값 설정 |
getProperty | <jsp:getProperty name="자바빈즈 식별이름" property="프로퍼티 이름" /> | 자바빈즈의 프로퍼티 값 얻기 |
param | <jsp:forward...> <jsp:param name="매개변수명1" value="매개변수값1"/> <jsp:param name="매개변수명2" value="매개변수값2"/> </jsp:forward> |
<jsp:forward.../>, <jsp:include.../>, <jsp:plugin.../>태그에 인자추가, 단독사용 x |
plugin | <jsp:plugin.../> | 웹 브라우저에 자바 애플릿 실행. 자바 플러그인에 대한 OBJECT 또는 EMBED 태그를 만드는 브라우저별 코드를 생성 |
element | <jsp:element.../> | 동적 XML 요소 생성 |
attribute | <jsp:attribute.../> | 동적으로 정의돈 XML 요소의 속성 설정 |
body | <jsp:body.../> | 동적으로 정의돈 XML 요소의 몸체 설정 |
text | <jsp:text.../> | JSP 페이지 및 문서에서 템플릿 텍스트 작성 |
forward
- fowrad를 만나면 그 전까지 출력 버퍼에 저장되어 있던 내용을 모두 삭제.
- foward에 설정된 페이지로 프로그램의 제어 이동.
※ 현재 페이지가 이미 전달 버퍼로 채워진 경우 전달이 중단될 때까지 해당 내용을 웹 서버에서 응답으로 보냄
-> 잘못된 페이지가 클라이언트에게 전달 될 수 있음.
include
*flush 속성 값
일반적으로 false, true로 지정하면 출력 버퍼를 웹 브라우저에 전송하는데 이때 헤더 정보도 같이 전송됨. 헤더 정보가 웹브라우저에 전송되고 나면 헤더 정보를 추가해도 결과가 반영되지 않음.
include forward 비교:
- 둘 다 외부 파일을 포함함
- include는 외부 파일이 싱행된 후 현재 JSP 페이지로 제어를 반환함
- include를 만나면 외부 파일의 실행 내용이 현재 JSP 페이지의 출력 버퍼에 추가 저장되어 출력
include action include directive 비교
구분 | include action tag | include directive tag |
처리시간 | 요청 시 자원을 포함 | 번역 시 자원을 포함 |
기능 | 별도의 파일로 요청 처리 흐름을 이동 | 현재 페이지에 삽입 |
데이터 전달 방법 | request 기본 내장 객체나 param 액션 태그를 이용하여 파라미터를 전달함 | 페이지 내의 변수를 선언한 후 변수에 값을 저장 |
용도 | 화면 레이아웃의 일부분을 모듈화할 때 주로 사용 | 다수의 JSP 웹 페이지에서 공통으로 사용되는 코드나 저작권과 같은 문장을 포함하는 경우에 사용 |
기타 | 동적 페이지에 사용 | 정적 페이지에 사용 |
프로그램의 효율을 높이기 위해(코드의 재사용 등) 화면을 출력 부분과 데이터 처리 로직 부분으로 구분.
로직 부분의 코드에 자바빈즈라는 클래스 이용
자바빈즈
: 동적 콘텐츠 개발을 위해 자바 코드를 사용하여 자바 클래스로 로직을 작성하는 방법.
: JSP 페이지에서 화면을 표현하기 위한 계산식이나 자료의 처리를 담당하는 자바 코드를 따로 분리하여 작성하는 것
웹 브라우저 -요청-> JSP -> 자바빈즈 -> DB
작성 규칙
- java.io.Serializable 인터페이스를 구현해야 함 //생략 가능하나 파일 시스템에 저장, 네트워크 전송 등을 위해
- 인수가 없는 기본 생성자가 있어야 함
- 모든 멤버 변수인 프로퍼티(property)는 private 접근 지정자로 설정해야 함
- 모든 멤버 변수인 프로퍼티는 Getter/Setter() 메소드가 존재해야 함
useBean, setProperty, getProperty 등의 자바빈즈 액션 태그와 스크립트 태그에 자바코드와 같이 사용 가능.
폼 페이지 입력 데이터, HTML 페이지에서 넘어오는 데이터를 쉽게 자바빈즈 객체로 저장할 수 있음.
useBean
자바 빈즈를 사용하기 위해 실제 자바 클래스를 선언하고 초기화하는 태그
id: 자바빈즈를 식별하기 위한 이름
class: 패키지 이름을 포한한 자바빈즈 이름
scope: 자바빈즈가 저장되는 영역을 설정함. page(기본 값), request, session, application 중 하나의 값 이용
<jsp:useBean id="member" class="com.dto.MemberBean" scope="page" /> 는 다음 자바 코드와 동일하다.
MemberBean member = (Memberbean) request.getAttribute("member");
if(member == null)
{
member = new MemberBean();
request.setAttribute("member", member);
}
setProperty
name: useBean 태그에 id 속성 값으로 설정된 자바빈즈를 식별하기 위한 이름
property: 자바빈즈의 프로퍼티 이름. '*'를 사용하면 모든 파라미터 선택 가능
value: 변경할 자바빈즈의 프로퍼티 값. 프로퍼티 값이 null, 존재하지 않는 요청 파라미터인 경우 setProperty 무시
param: 자바빈즈의 프로퍼티 값을 전달하느 요청 파라미터의 이름. value와 동시에 사용 불가
getProperty
name: useBean 태그에 id 속성 값으로 설정된 자바빈즈를 식별하기 위한 이름
property: 자바빈즈의 프로퍼티 이름. '*'를 사용하면 모든 파라미터 선택 가능
ㅁ