<%@ page language = "java" contentType = "text/html; charset=UTF-8" pageEncoding="UTF-8"%>
💡 지시어
<%!
String str1 = "JSP";
String str2 = "안녕하세요";
%>
💡 위는 스크립트요소(선언부)
---------------------------------------------------------------------------------------------------
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>HelloJSP</title>
</head>
<body>
<h2>처음 만들어보는 <%= str1 %></h2> 💡 스크립트요소(표현식)
<p>
<%
out.println(str2 + str1 + "입니다."); 💡 스크립트 요소(스크립틀릿)
%>
</p>
</body>
</html>
💡 지시어란?
해당 JSP페이지의 처리 방법을 JSP엔진에 "지시" 해주는 역할을 한다.
💡 스크립트 요소란?
HTML 파일 중간에 자바 코드를 삽일할 때 사용한다.
JSP페이지를 서블릿코드로 변환하는데 필요한 정보를 JSP엔진에게 알려줍니다.
- 주로 스크립트 언어나 인코딩 방식등을 설정합니다.
- 여러가지의 속성을 지정할 수 있으며, 속성은 지시어마다 다르다
<%@ 지시어종류 속성1="값1" 속성2="값2".......%>
지시어 이름 | 설명 |
---|---|
page 지시어 | JSP 페이지에 대한 정보를 설정합니다. |
include 지시어 | 외부 파일을 현재 JSP페이지에 포함시킵니다. |
taglib 지시어 | 표현 언어에서 사용할 자바 클래스나 JSTL을 선언합니다. |
💡 JSP페이지에 대한 정보를 설정한다.
- 예를들어 : 문서의 타입, 에러 페이지, MIME타입 등
속성 | 내용 |
---|---|
info | 페이지에 대한 설명을 입력합니다. |
language | 페이지에서 사용할 스크립팅 언어를 지정합니다. |
contentType | 페에지에서 생성할 MIME 타입을 지정합니다. |
pageEncoding | charset과 같이 인코딩을 지정합니다. |
import | 페이지에서 사용할 자바 패키지와 클래스를 지정합니다. |
session | 세션 사용 여부를 지정합니다. |
buffer | 출력 버퍼의 크기를 지정합니다. 버퍼를 사용하지 않으려면 "none" 으로 지정합니다. |
autoFlush | 출력 버퍼가 모두 채워졌을 때 자동으로 비울 지를 결정합니다. buffer 속성이 none일 때 false로 지정하면 에러가 발생합니다. |
trimDirectiveWhitespaces | 지시어 선언으로 인한 공백을 제거할지 여부를 지정합니다. |
errorPage | 해당 페이지에서 에러가 발생했을 때 에러 발생 여부를 보여줄 페이지를 지정합니다. |
isErrorPage | 해당 페이지가 에러를 처리할지 여부를 지정합니다. |
💡 이클립스에서 JSP파일을 생성하면 "language, contentType, pageEncoding" 속성이 기본적으로 삽입됩니다.
<%@ page languge="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
📌 위 지시어를 해석하면
- languge : 스크립팅 언어는 자바를 사용합니다.
- contentType : 문서의 타입, 즉 MIME타입은 text/html이고, 캐릭터셋은 UTF-8입니다.
- pageEncoding : 소스코드의 인코딩 방식은 UTF-8 방식입니다
💡 자바와 마찬가지로 JSP파일에서도 필요한 ㅋ늘래스가 있으면 임포트해서 사용을 한다.
<%@ page language="java" contetnType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.text.SimpleDateformat"%>
<%@ page import="java.util.Date"%>
-------------------------------------------📌 import로 외부 클래스 불러옴
<!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>
-------------------------------------------------------------------------------------------------
📌 코드 해석
위 코드는 Date와 SimpleDateFormat 클래스를 이용하여 오늘날짜를 출력하고 있다.
두 클래스는 java.lang패키지에 속하지 않기 때문에 현재 문서에 사용하기 위하여 import를 진행한다.
💡 JSP 실행 도중 에러가 발생하면 에러화면을 웹브라우저에 표시해주게 되는데 그 때 일부 코드가 노출되게 된다. 이를 방지하기 위해 try/catch문을 사용하거나 위 속성을 사용하여 디자인이 적용된 페이지로 대체할 수 있다.
💡 1. errorPage="IsErrorPage.jsp
💡 2. isErrorPage = "true"
- errorPage가 발생할 경우 IsErrorPage.jsp가 보여지도록 한다.
- isErrorPage = "true"로 지정을 해야된다.
<%@ page language="java" contetnType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>page 지시어-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값을 가져오는 것
💡 위 코드에서 에러가 난 부분을 이제 errorPage 속성을 이용해보자
위 코드에서 에러나는 부분을 사전으로 조취를 취할 수 있다.
📌 errorPage 속성을 이용하여 개발자가 지정한jsp페이지 보여주기
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" errorPage="IsErrorPage.jsp" isErrorPage = "true"%>
---------📌코드 해석: errorPage는 IsErrorPage.jsp페이지를 보여주도록 한다.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>errorPage, isErrorPage</title>
</head>
<body>
</body>
</html>
================> 💡 결론 :
위처럼 errorPage를 지정해주면 직접에러를 처리하지않고 또다른 페이지를 보여줄 수 있다.
💡 지시어 때문에 생성된 불필요한 공백을 제거하고자 할 때 이 속성을 사용한다.
📢 page지시어는 웹서버에서 처리된 후 공백으로 남게되는데 , 일반적으로는 크게 문제는 없으나 안드로이드와 같은 외부 기기와 연동시 가끔 문제를 일으키키도 하기에 공백을 제거하는 속성을 쓴다.
컴퓨터 입장에서는 공백도 하나의 문자로 인식을 한다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" trimDirectiveWhitespaces="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>page지시어-trimDirectiveWhitespaces속성</title>
</head>
<body>
<h2>page지시어로 생긴 불필요한 공백 제거 </h2>
</body>
</html>
💡 버퍼라는 개념은 매우 다양하게 사용되며, 그 중 예시로 들자면 네트워크로 영상 데이터를 전송할 때, 작은 단위로 여러번 전송하는 것 보다 큰단위로 한 번에 보내는편이 효율적이다. 이처럼 "버퍼"라는 임시 저장소를 두어 데이터들이 충분히 쌓일 때까지 기다렸다가 보내는것이다.
<버퍼가 없을 때>
입력 즉시 전송
키보드 ------------------------------------------>프로그램
<버퍼 사용시>
키보드---------------------->버퍼---------------------->프로그램
입력시 버퍼에 먼저 저장 버퍼가 가득차면 전송
💡 "포워드"와 "에러 페이지 처리"를 할 수 있다.
📢 jsp가 생성한 결과는 일단 버퍼에 저장되는데 만약 실행 도중 에러가 발생하면 버퍼에 저장된 내용을 삭제하고 에러 화면을 표시할 수있다.
💡 1. buffer의 사용유무
<%@ page buffer="1kb"%>
→ 버퍼의 크기를 설정할 수 있고, 기본값을 8kb로 되어있다.
- <%@ page buffer="none"%>
→ 버퍼를 사용하지 않을 때 none을 한다.
단 , 버퍼를 사용하지 않으면 포워드나 에러페이지 기능을 사용할 수 없기 때문에 none으로 지정하는 경우는 거의 없다.
💡 buffer가 모두 채워졌을 때의 처리 방법을 정하는 데 쓰인다.
값은 "true" 와 "false" 중 선택할 수 있으며
📍 true(기본값) : 버퍼가 채워지면 자동으로 플러시한다.
📍 false : 버퍼가 채워지면 예외를 발생시킨다.플러시(flush)란?
→ 버퍼 안의 데이터를 목적지로 전송하고 버퍼를 비우는 작업을 말한다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" buffer="1kb" autoFlush="false"%>
-------- 📌버퍼설정 : buffer의 크기는 1kb로 지정, 버퍼가 채워지면 예외를 발생시킴
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>page지시어-buffer, autoFlush 속성</title>
</head>
<body>
<%
for(int i=1; i<=100; i++)
{ --------📌 버퍼 채우기
out.println("abcde12345");
}
%>
</body>
</html>