해당 JSP페이지의 처리 방법을 JSP엔진에 '지시' 해주는 역할
주로 스크립트 언어나 인코딩 방식등을 설정
해당 기호 내에서 스크립트 요소(JSP 페이지에서 여러 동적 처리를 제공)를 Java 코드로 구현
(스크립트 요소 : HTML 파일 중간에 자바 코드를 삽일할 때 사용)
스크립트(script)요소
1.<% %>
스크립트릿<% int total = 0; for(int i = 1; i <= 10; i++){ total = total + i; } %>
기존 자바 언어를 동일하게 사용할 수 있는 태그
<%@ %>
지시자<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
JSP 페이지가 컨테이너에게 필요한 메시지를 보내기 위한 태그.
JSP 페이지의 전체적인 환경 설정 시에 사용 (문서 종류, 인코딩 방식 등... 지정).
<%! %>
선언<@! int a; int b; %>
페이지 내 어디서나 접근할 수 있는 전역 변수 및 메소드 선언
<%= %>
표현식1부터 10까지의 합 : <%=total %>
변수 또는 메소드의 결과값을 출력
여러가지의 속성을 지정할 수 있으며, 속성은 지시어마다 다르다
해당 JSP 페이지의 속성을 지정하는 역할
속성 | 역할 |
---|---|
language | 페이지에서 사용할 언어셋 설정 |
contentType | 페이지의 문서 타입 지정 |
pageEncoding | 현재 페이지의 인코딩 타입을 지정 |
import | 다른 페이지의 클래스나 메소드를 추가(불러옴) |
errorPage | 에러 발생시 사용될 페이지를 설정 |
isErrorPage | true일 경우 현재 페이지를 에러 페이지로 지정 |
buffer | JSP 페이지내 출력 버퍼값을 지정 |
autoFlush | 출력 버퍼가 초과되면 수행할 기능을 지정(true, fasle) |
isThreadSafe | 다중 Thread를 사용여부 설정(true, fasle) |
session | SESSION 사용 여부를 지정 |
info | 해당 페이지의 설명 |
extends | 페이지내에서 상속받을 클래스를 지정 |
<%@ page languge="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date"%>
<%@ page import="java.text.SimpleDateformat"%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>page 지시어-import 속성</title>
</head>
<body>
<%
Date today = new Date(); <!-- 외부 클래스 생성 -->
SimpleDateformat dateFormat = new SimpleDateformat("yyyy-mm-dd"); <!-- 외부 클래스 생성 -->
Stirng todayStr = dateFormat.format(today);
out.println("오늘날짜 : " + todayStr); <!-- 오늘 날짜를 웹브라우저에 출력 -->
%>
</body>
</html>
이클립스에서 JSP파일을 생성하면 "language, contentType, pageEncoding" 속성이 기본적으로 삽입됨
- languge : 스크립팅 언어는 자바를 사용
- contentType : 문서의 타입, 즉 MIME타입은 text/html이고, 캐릭터셋은 UTF-8
- pageEncoding : 소스코드의 인코딩 방식은 UTF-8 방식
어떤 웹페이지에서 에러가 발생한 경우에 미리 만들어둔 페이지를 불러올 수 있다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" errorPage="IsErrorPage.jsp" isErrorPage = "true"%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>errorPage, isErrorPage 속성</title>
</head>
<body>
<%
int myAge = Integer.parseInt(request.getParameter("age")) + 10; <!-- 에러가 발생 -->
out.println("10년 후 당신의 나이는 : " + myAge + "입니다."); <!-- 실행되지 않음 -->
%>
</body>
</html>
예시 코드에서 발생한 문제?
"age"라는 이름의 매개변수 값을 받아와 정수로 변환해야되는데, 최초 실행 시 매개변수가 없으므로 null값이 전달되어 에러가 발생한다.
(interger.parseInt() : String타입의 숫자를 int타입으로 변환)
(request.getParameter() : 웹브라우저에서 전달한 parameter값을 가져옴)
해당 속성 사용 목적?
JSP 실행 도중 에러가 발생하면 에러화면을 웹브라우저에 표시해주게 되는데 이때 일부 코드가 노출되게 된다.
이를 방지하기 위해 try/catch문을 사용하거나 or 디자인이 적용된 페이지로 대체 가능(errorPage, isErrorPage속성)
errorPage="IsErrorPage.jsp
: errorPage가 발생할 경우 IsErrorPage.jsp가 보여지도록 함
isErrorPage = "true"
: isErrorPage = "true"로 지정 함
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" trimDirectiveWhitespaces="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>trimDirectiveWhitespaces 속성</title>
</head>
<body>
<h2>page지시어로 생긴 불필요한 공백 제거 </h2>
</body>
</html>
지시어 때문에 생성된 불필요한 공백을 제거
해당 속성 사용 목적?
<!-- 버퍼 설정 : buffer의 크기는 1kb로 지정, 버퍼가 채워지면 예외를 발생시킴 -->
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" buffer="1kb" autoFlush="false"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>pagebuffer, autoFlush 속성</title>
</head>
<body>
<%
for(int i=1; i<=100; i++)
{ <!-- 버퍼 채우기 -->
out.println("abcde12345");
}
%>
</body>
</html>
buffer
'버퍼'라는 임시 저장소를 두어서, 데이터들이 충분히 쌓일 때까지 기다렸다가 보내는 것
버퍼 속성 이동경로
버퍼가 없을 때, 입력 즉시 전송
버퍼 사용 시, 입력 후 버퍼에 저장되고, 버퍼가 가득차면 프로그램으로 전송
buffer의 사용유무
<%@ page buffer="1kb"%>
: 버퍼의 크기를 설정할 수 있고, 기본값을 8kb로 되어있다.
<%@ page buffer="none"%>
: 버퍼를 사용하지 않을 때 none을 한다. (none으로 지정하는 경우 거의 없음)
autoFlush
버퍼가 모두 채워졌을 때의 처리 방법을 정하는 데 사용
플러시(flush) : 버퍼 안의 데이터를 목적지로 전송하고 버퍼를 비우는 작업
true(기본값) : 버퍼가 채워지면 자동으로 플러시
false : 버퍼가 채워지면 예외를 발생시킴
외부 파일을 현재 JSP페이지에 포함시킬 수 있다. (현재 JSP 내에서 다른 JSP를 추가)
IncludeFile.jsp(포함될 페이지)
<%@ page import="java.time.LocalDateTime" %>
<%@ page import="java.time.LocalDate"%>
<%
LocalDate today = LocalDate.now(); <!-- 오늘 날짜 -->
LocalDateTime tomorrow = LocalDateTime.now().plusDay(1); <!-- 내일 날짜 -->
%>
위 파일을 포함할 메인 페이지
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ include file="IncludeFile.jsp"%> <!-- 현재 페이지에 IncludeFile.jsp파일을 포함시킨다는 의미 -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>include지시어</title>
</head>
<body>
<!-- IncludeFile.jsp를 포함하면서 IncludeFile.jsp에서 선언한 변수를 사용할 수 있게 된다 -->
<%
out.println("오늘 날씨 : " + today); <!-- 오늘 날짜 : 2021-12-20 -->
out.println("<br/>");
out.println("내일 날짜 : " + tomorrow); <!-- 내일 날짜 : 2021-12-21 -->
%>
</body>
</html>
<%@ include file="포함할 파일의 경로"%>
반복적인 부분(웹사이트에서 상단이나 하단메뉴 등...)을 별도의 파일에 작성해 두어서, 필요한 페이지에서 그 파일을 include하여 가져다 쓸 수 있다.
커스텀 태그 라이브러리를 JSP 파일에서 사용하기 위한 지시어
직접적으로 Java 코드를 넣지 않고, Java 파일을 taglib를 통해서 연결/캡슐화하여 사용
<%@ taglib uri="태그 라이브러리 경로" 혹은 tagdir="태그 파일 경로" prefix="태그 접두어" %>
TLD (Tag Library Descriptor)
<?xml version="1.0" encoding="UTF-8"?> <taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd "> <tlib-version>0.0</tlib-version> <short-name>customTag</short-name> <uri>http://customTag.com</uri> </taglib>
- JSP에서 사용되는 커스텀 태그나 JSTL의 태그들에 대한 설정 파일
- 개발한 태그 핸들러에 대해 속성이나 속성의 타입, 태그명, uri 등에 대해 정의해두는 설정 파일
*.tld
라는 확장자를 가짐- 웹 어플리케이션 경로의 WEB-INF 디렉터리 하위에 작성해야함
- XML 기반
JSTL (JSP Standard Tag Library)
... <dependencies> ... <!-- taglibs --> <dependency> <groupId>taglibs</groupId> <artifactId>datetime</artifactId> <version>1.0.1</version> </dependency> <dependency> <groupId>taglibs</groupId> <artifactId>string</artifactId> <version>1.1.0</version> </dependency> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.1.2</version> </dependency> </dependencies>
- 자주 사용될 수 있는 커스텀 태그들을 모아서 표준으로 모아놓은 태그 라이브러리
참고: JSP 지시어 종류와 사용 예제
참고: [서블릿/JSP] TLD(Tag Library Descriptor)란? tld 파일 작성 방법
참고: [JSP] JSP (Java Server Pages) 정의와 태그, 사용 예제