본문 바로가기
백엔드실습/JSP 공부

1장: JSP 기본

by 데이터 분석가가 되자 2024. 9. 16.
반응형

JSP 공부를 복습할 겸 프로젝트 하나를 만들어 보겠습니다.

 

 

먼저 Figma로 게시판 제작 프로세스를 구상하겠습니다.

 

figma를 이용한 게시판 프로세스

 

 

정적 웹 페이지(static web page)란 웹 서버에 '저장되어 있는 파일을 그대로' 웹 브라우저에 전송해 출력하는 가장 기본적인 웹 페이지를 의미합니다.

 

클라이언트가 어떤 형태로 요청해도 같은 페이지는 항상 동일한 모습을 보여주기 때문에 '정적'이란 수식어가 붙고

 

동적 웹 페이지(dynamic web page)는 동일한 페이지라 해도 그때마다 내용이 달라질 수 있는 웹 페이지입니다.

 

서버가 클라이언트의 요청을 해석하여 적절한 웹 페이지를 그때마다 생성해 보내주는 기술입니다.

 

따라서 클라이언트는 요청한 계정, 시간, 지역, 언어, 기타 입력값에 따라 다른 결과를 받습니다.

 

동적 웹 페이지는 '전처리' 과정을 거쳐 응답 페이지를 동적으로 생성합니다.

 

이 전처리는 어떻게 처리하느냐에 구체적인 동적 웹 페이지 기술이 나뉘는데 JSP, 서블릿, ASP, PHP 등이 있습니다.


 

애플리케이션 전체가 클라이언트에 다운로드된 후 실행되는 자바 애플릿은 속도, 보안, 유연성 등에서 한계가 존재해서 서버 측에서 실행되는 서블릿(Servlet)이 등장했습니다.

 

서블릿은 클라이언트의 요청을 받으면 서버에서 처리한 후, 응답으로는 결괏값만 보내주는 구조입니다.

 

즉, 동적 웹 페이지 방식에서 '전처리' 부분이 서블릿이 담당하는 구조입니다.

 

 

서블릿은 자바 파일(.java)을 컴파일한 클래스 파일(.class) 형태이며, 이를 실행하고 관리해주는 런타임을 서블릿 컨테이너라고 합니다.

 

대표적인 서블릿 컨테이너로는 앞으로 사용할 아파치 톰캣(Apache Tomcat)이 있습니다.

 


 

서블릿에도 단점이 있는데 기본적으로 자바 코드이지만 결과로 보여줄 HTML 코드를 일일이 자바로 생성 및 조합을 하다보니 많은 코드가 필요하게 된 것입니다.

 

그래서 기본을 HTML로 하고 필요한 부분만 자바 코드를 삽입하는 형태인 JSP(Java Server Pages)가 탄생하게 됐습니다.

 

 

JSP 구동 방식은 JSP 파일을 서블릿으로 변환하여 서블릿을 실행하는 방식입니다.

 

한 번 서블릿으로 컴파일된 JSP 파일은 캐시되므로 실질적인 성능 저하 없이 개발 생산성과 유지보수 편의성을 모두 얻는 것입니다.

또한 JSP가 서블릿으로 변환되어 실행된다는 것은 서블릿 기술도 여전히 사용할 수 있다는 것으로 용도에 따라 유리한 기술을 골라 쓸 수 있습니다.

 

JSP는 주로 클라이언트에 보여지는 결과 페이지를 생성할 때 쓰이며, 서블릿은 UI 요소가 없는 제어나 기타 처리 용도로 쓰입니다.

 

 

서블릿 JSP
자바 코드 안에서 전체 HTML 페이지를 생성합니다. HTML 코드 안에서 필요한 부분만 자바 코드를
스크립트 형태로 추가합니다.
변수 선언 및 초기화가 반드시 선행되어야 합니다. 자주 쓰이는 기능을 내장 객체로 제공하여
즉시 사용할 수 있습니다.
컨트롤러(Controller)를 만들 때 사용합니다. 처리된 결과를 보여주는 뷰(View)를 만들 때 사용합니다.

 

 

간단한 예제로 HelloJSP 파일을 만들어 실습해보겠습니다.

 

첫 JSP!
위 코드 실행결과...성공!

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%!
String str1 = "JSP";
String str2 = "안녕하세요..";
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HelloJSP</title>
</head>
<body>
	<h2>처음 만들어보는 <%= str1 %></h2>
	<p>
		<%
		out.println(str2 + str1 + "입니다. 열심히 JSP 공부하겠습니다!");
		%>
	</p>
</body>
</html>

 

더보기

위 코드에서 1~2번째 줄은 지시어입니다.

3~4줄은 스크립트 요소(선언부)이고

14번째 <%= str %>는 스크립트 요소(표현식)입니다.

 

마지막으로 16~18번째 줄은 스크립트 요소(스크립틀릿)입니다.

일반적인 HTML 파일에 몇 가지 요소가 추가된 형태로

 

크게보면 지시어스크립트 요소가 있으며 스크립트 요소는 선언부, 표현식, 스크립틀릿으로 나뉩니다.

 

지시어는 해당 JSP 페이지의 처리 방법을 JSP 엔진에 '지시'해주는 역할을 하며,

스크립트 요소는 HTML 파일 중간에 자바 코드를 삽입할 때 사용합니다!

 

 

지시어(Directive)

지시어는 JSP 페이지를 자바(서블릿) 코드로 변환하는 데 필요한 정보를 JSP 엔진에 알려줍니다.

주로 스크립트 언어나 인코딩 방식 등을 설정하는데 지시자 또는 디렉티브라고 부릅니다.

 

기본 구문

<%@ 지시어 종류 속성="값1" 속성="값2" ... %>

 

지시어 종류 뒤에 다수의 속성을 지정할 수 있는 구조로, 사용할 수 있는 속성은 지시어마다 다르며 대표적으로 3가지가 있습니다.

 

● page 지시어: JSP 페이지에 대한 정보를 설정합니다.

● include 지시어: 외부 파일을 현재 JSP 페이지에 포함시킵니다.

● taglib 지시어: 표현 언어에서 사용할 자바 클래스나 JSTL을 선언합니다.

 


 

page 지시어

 

page 지시어는 JSP 페이지에 대한 정보를 설정합니다.

 

문서의 타입, 에러 페이지, MIME 타입과 같은 정보를 설정합니다.

 

속성 내용 기본값
info 페이지에 대한 설명을 입력합니다. 없습니다.
language 페이지에서 사용할 스크립팅 언어를 지정합니다. java
contentType 페이지에서 생성할 MIME 타입을 지정합니다. 없습니다.
pageEncoding charset과 같이 인코딩을 지정합니다. ISO-8859-1
import 페이지에서 사용할 자바 패키지와 클래스를 지정합니다. 없습니다.
session 세션 사용 여부를 지정합니다. true
buffer 출력 버퍼의 크기를 지정합니다.
버퍼를 사용하지 않으려면 "none"으로 지정하면 됩니다.
8KB
autoFlush 출력 버퍼가 모두 채워졌을 때 자동으로 비울 지를 결정합니다.
buffer 속성이 none일 때 false로 지정하면 에러가 발생합니다.
true
trimDirective
Whitespaces
지시어 선언으로 인한 공백을 제거할지 여부를 지정합니다. false
errorPage 해당 페이지에서 에러가 발생했을 때 에러 발생 여부를
보여줄 페이지를 지정합니다.
없습니다.
isErrorPage 해당 페이지가 에러를 어떻게 처리할지
여부를 지정합니다.
false

 


language, contentType, pageEncoding 속성

 

이클립스에서 JSP 파일을 생성하면 3가지 속성을 포함한 page 지시어가 기본적으로 삽입됩니다.

 

<%@ page language="java" contentType="text/html"; charset=UTF-8"
	pageEncoding="UTF-8"%>

 

language : 스크립팅 언어는 자바를 사용하고

contentType : 문서의 타입, 즉 MIME 타입은 text/html이며, 캐릭터셋은 UTF-8입니다.

pageEncoding : 소스 코드의 인코딩 방식은 UTF-8입니다.

 

참고로 캐릭터셋이나 인코딩의 기본값은 ISO-8859-1인데, 한글이 제대로 출력되지 않으므로 UTF-8을 사용해 다국어 지원을 받도록 합니다.

 

import 속성

 

JSP 파일은 자바 파일로 변환됩니다. 자바에서 외부 클래스를 사용하려면 import문으로 해당 패키지나 클래스를 가져와야 하듯이, JSP 파일에서도 필요한 클래스가 있으면 임포트해야 합니다.

 

즉, 이때 사용하는 것이 page 지시어의 import 속성입니다.

 

자바 프로그래밍처럼 java.lang 패키지에 속하지 않은 클래스를 JSP 문서에서 사용하기 위해서 사용하는 겁니다!

 

import 속성으로 외부 클래스 불러오기!
실행 결과!

 

1장의 남은 부분은 내일 마저 복습하겠습니다!

 

그럼 이만! ^^

반응형