동적 페이지를 구현하기 위해서는 JSP 태그를 사용해야 한다.
※ 서버가 인식하는 JSP 태그
종류 | 사용용도 | 형식 |
스크립트릿(scriptlet) | 자바 코드를 기술함 | <% %> |
선언(declaration) | 변수와 메소드를 선언함 | <%! %> |
표현식(expression) | 계산식이나 함수를 호출한 결과를 문자열 형태로 출력함 | <%= %> |
주석(Comment) | JSP 페이지에 설명을 넣음 | <%-- --%> |
지시자(Directive) | JSP 페이지의 속성을 지정함 | <%@ %> |
※ 스크립트릿
JSP 문서는 HTML 태그로 정적 페이지를 디자인하고 웹 서버에서 처리할 문장들을 자바 언어로 부분적으로 기술하는데 이때 사용하는 자바 언어를 서버 스크립트 언어라고 한다. 이 서버 스크립트 언어인 자바를 JSP 문서 내부에 기술하려면 스크립트릿 태그를 사용해야 한다.
• 스크립트릿 태그 기본 형식
<%
웹 서버에서 실행되는 자바 코드를 기술
%>
• 두 수를 더하는 스크립트릿 예제
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
int num1 = 20;
int num2 = 10;
int add = num1 + num2;
out.print(num1 + " + " + num2 + " =" + add);
%>
</body>
</html>
• out 내장객체
여기서 out은 자바의 System.out이 아니다. 서블릿에서 요청이 있을 때마다 호출되는 doGet 혹은 doPost 메소드에서 클라이언트에 응답을 하기 위해서 response.getWriter() 메소드로 얻어낸 PrintWriter로 선언한 out 객체와 동일하다.
서블릿에는 객체를 생성한 후 사용하지만 JSP 페이지에서는 out이 내장객체 형태로 제공되기에 바로 사용할 수 있다.
※ 선언문
JSP 페이지에서 사용되는 변수나 메소드를 정의하기 위해 사용한다.
선언문에서 선언한 변수나 메소드들은 JSP 페이지가 초기화될때 초기화되어서 페이지 내의 어떠한 스크립트릿이나 표현식에서도 접근해서 사용할 수 있다.
선언문의 위치는 아무곳이나 상관없지만 관례적으로 HTML 문서 맨 위에 위치시킨다.
• 선언문 태그 기본 형식
<%!
변수를 선언
메소드를 정의
%>
• 절대값을 구하는 선언문 예제
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%!
String str = "안녕하세요!";
int a = 5, b = -5;
public int abs(int n)
{
if (n < 0)
{
n = -n;
}
return n;
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
out.print(str + "<br>");
out.print(a + "의 절대값 : " + abs(a) + "<br>");
out.print(b + "의 절대값 : " + abs(b) + "<br>");
%>
</body>
</html>
※ 스크립트릿과 선언문과의 차이
- <% %> 내에 기술한 코드 : JSP가 서블릿 코드로 변환되었을 때 _jspService()메소드 내부에 들어간다. 즉, <% %>내에 자바 코드를 기술하면 이것은 곧 서블릿의 _jspService()메소드 내부에 기술하는 것이기 때문에 변수를 선언하면 지역변수처럼 쓰인다. 또한 메소드 내에 메소드를 정의하는것과 static 변수를 정의하는것은 불가능하다.
- <%! %> 내에 기술한 코드 : 클래스 영역에 정의된다.
• 선언문과 스크립트릿 변수의 성격 파악하기
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%!
int global_cnt = 0;
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
int local_cnt = 0;
out.print("<br> local_cnt : ");
out.print(++local_cnt);
out.print("<br> global_cnt : ");
out.print(++global_cnt);
%>
</body>
</html>
실행 후 새로고침을 여러 번 누르면 스크립트릿 변수(local_cnt)는 1만 출력하는 반면 선언문에 선언한 변수(global_cnt)는 새로고침을 할 때마다 1씩 증가한다.
서블릿은 첫 번째 요청인 경우에만 서블릿 클래스를 찾아 메모리에 로딩하여 인스턴스(객체)를 생성하고 이 후에 요청에 대해서는 서블릿 인스턴스를 다시 생성하지 않고 이미 메모리에 로딩된 서블릿으로부터 서비스만 받는다. 때문에 필드에 선언된 global_cnt는 새로고침을 여러 번 해도 이미 생성된 필드가 계속 사용되기 때문에 이전의 값을 유지하고 있다가 1 증가시키기 때문에 값이 계속 증가되는 것이고, _jspService() 메소드 내의 지역변수로 선언된 local_cnt는 새로고침을 할 때마다 _jspService() 메소드가 호출되면서 새롭게 메모리 할당을 하면서 0으로 초기화한 후에 1 증가하기 떄문에 항상 1만 출력된다.
※ 표현식
변수의 값이나 계산식 혹은 함수를 호출한 결과를 문자열 형태로 웹 문서에 출력할 때 사용되는 태그
서블릿 컨테이너는 <%= %>를 만나면 out.print()로 변환한다.
표현식에 기술한 내용은 out.print()의 매개 변수가 된다. 그렇기 때문에 표현식을 사용할 때 세미콜론(;)을 기술하면 안된다.
• 표현식 태그 기본 형식
<%= 변수 %>
<%= 수식 %>
<%= 메소드 호출 %>
• 절대값을 구하는 표현식 예제
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%!String str = "안녕하세요!";
int a = 5, b = -5;
public int abs(int n) {
if (n < 0) {
n = -n;
}
return n;
}%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%=str%><br>
<%=a%> 의 절대값 : <%=abs(a)%><br>
<%=b%> 의 절대값 : <%=abs(b)%><br>
</body>
</html>
변환된 서블릿 클래스를 확인하면 표현식이 out 객체의 print()메소드로 변화된 것을 확인할 수 있다.
※ 주석문
설명을 위한 문장으로, HTML 주석문과 JSP 주석문은 실행에 아무런 영향을 주지 않는다는 공통점은 있지만 JSP컨테이너는 두 주석문을 서로 다르게 인식한다.
• HTML 주석문 : 웹 컨테이너가 그대로 클라이언트에 보낸다. 브라우저는 이 부분을 주석으로 처리한다. out객체에 의해 문자열 형태로 클라이언트에 출력된다.
<!-- 주석문 -->
• JSP 주석문 : 브라우저에 보내지지 않아 공개되지 않는다. Servlet 코드로도 변환되지 않는다.
<%-- 주석문 --%>
• 스크립트릿 내 주석처리
<%
//여러 줄을
//주석으로 처리하려면
//여러 번 기술해야 한다.
%>
<%
/* 여러 줄을
주석으로 처리하려면
시작 주석 기호와 끝 주석 기호를 기술해야 한다.
*/
%>
※ 지시자
클라이언트의 요청에 의해 JSP 페이지가 실행되면서 지시자에 언급된 설정을 JSP페이지에 대한 전체 속성을 지정하며 태그 안에서 @로 시작하고 JSP 문서의 제일 위 부분에 위치한다.
• 표현식 태그 기본 형식
<%@ 지시자 속성="값" . . . %>
• JSP 지시자의 종류
종류 | 사용 용도 |
page | 해당 JSP 페이지 전반적으로 환경을 설정할 내용을 지정한다. |
include | 현재 페이지에 다른 파일의 내용을 삽입할 때 사용한다. |
taglib | 태그 라이브러리에서 태그를 꺼내와 사용할 수 있는 기능을 제공한다. |
※ page 지시자
JSP 페이지에 여러 가지 정보를 나타내기 위해서 사용
<%@ page 속성="값" . . . %>
• language 속성
JSP에서 사용할 언어를 결정한다. 굳이 있는이유는 명확하게 JSP 페이지에서는 자바를 서버 스크립트 언어로 사용한다고 정의하기 위해 존재한다.
<%@ page language="java" %>
• extends속성
서블릿 클래스로 변환되는 과정에서 상속받음 부모 클래스를 지정하는 속성
<%@ page extends="java.servlet.jsp.HttpJspBase" %>
• import 속성
자바 프로그램에서 사용하던 import구문과 동일한 목적으로 사용
<%@ page import="java.utill.Calendar" %>
• session 속성
"true" 또는 "false"값으로 세션을 사용할지 말지를 결정하는 속성. 기본값은 true
세션(session)이란 여러 사이트를 돌아다녀도 사용자가 웹 서버의 세션에 의해 가상적으로 연결되어 있으므로 그에 대한 정보 역시 잃지 않게 되는 것이다.
<%@ page session="true/false" %>
• buffer 속성
웹 서버로부터 동영상 서비스를 받기 위해서는 서버로부터 데이터들이 출력 스트림을 통해서 제공될 떄까지 기다려야 한다. 동영상 파일이 지정된 사이즈만큼 출력 버퍼에 보내질 때까지 기다렸다가 꽉 차면 출력 스트림을 통해 클라이언트에 전송된다. 전송할 데이터의 블록의 크기를 설정하는 것이 버퍼 사이즈를 설정하는 것으로 출력 스트림으로 출력되기 전에 버퍼에 데이터가 찰 때까지 기다렸다가 보내진다.
기본값은 8KB로, 데이터 전송을 위한 단위로 보낼 데이터가 8KB만 전송되는게 아니라 8KB씩 여러 번 나눠서 전송한다.
<%@ page buffer="8KB/none" %>
• autoFlush 속성
flush는 버퍼를 비운다는 의미로 버퍼를 비우면 저장되어 있던 데이터가 송신된다. 버퍼는 일반적으로 꽉 차야 비워지는데 강제로 버퍼를 비우려면 flush를 사용한다.
기본값은 true로, 버퍼가 꽉 차면 자동으로 버퍼를 비우도록 한다.
<%@ page autoFlush="true/false" %>
• isThreadSafe 속성
멀리스레드란 하나의 프로그램을 여러 개의 스레드로 처리하는 것을 말한다. 프로세스를 스레드로 처리하였을 때 자원을 공유할 수 있으므로 오버헤드를 줄일 수 있는 장점이 있다.
하지만 여러 사용자가 동시에 접속하여 동시에 요청을 하였을 때 동시에 스레드가 생성되어 동시에 처리가 일어나면 문제가 발생할 수 있기에 동기화를 시켜야 한다. 동기화는 하나의 스레드 작업이 완료되어야 다음 스레드가 작업을 시작할 수 있게 해주는 것이다.
true로 설정하면 각각 페이지의 스레드들이 안전하게 동작할 수 있다.
<%@ page isThreadSafe="true" %>
• info 속성
JSP 페이지에 대한 간략한 설명을 기록하는 용도로 현재 페이지에 대한 정보를 알려주는 역할을 한다.
<%@ page info="JSP 페이지에 대한 정보" %>
• errorPage 속성
JSP 페이지에서 에러가 발생하였을 때 보여줄 에러 페이지를 설정한다.
<%@ page errorPage="error.jsp" %>
• isErrorPage 속성
현재의 페이지가 에러 페이지인지 아닌지를 설정하기 위한 속성. 기본값은 false
<%@ page isErrorPage="false/true" %>
• contentType 속성
JSP 페이지의 MIME 타입을 결정한다.
MIME(Multipurpose Internet Mail Extensions)은 서버가 브라우저(클라이언트)에게 이런 데이터를 보낼것이다 라고 미리 알려주는 역할
<%@ page contentType="text/html; charset=UTF-8" %>
※ include 지시자
현재 페이지에 다른 HTML 문서나 JSP 페이지의 내용을 삽입할 때 사용
유일한 속성 file에는 삽입할 파일의 URL을 기술한다. 모든 페이지에 공통적으로 보여주어야 할 부분이 있는 곳에 주로 사용
<%@ page file="URL" %>
'JSP' 카테고리의 다른 글
[JSP&Servlet] JSP에서 다른 페이지로 이동하기(리다이렉트 방식, 포워드 방식) (0) | 2020.10.08 |
---|---|
[JSP&Servlet] JSP 내장 객체 (0) | 2020.10.08 |
[JSP&Servlet] 서블릿과 JSP의 관계 (1) | 2020.10.07 |
[JSP&Servlet] JSP와 HTML의 동작 차이 (0) | 2020.10.07 |
[JSP&Servlet] 서블릿의 다양한 입력 양식 데이터 통신 (0) | 2020.10.01 |