TIL 41 | [JSP] JSP 기본 : JSP 프로젝트 구조 및 JSP 파일 기본구조, 지시어(Directive)

Yoonsik·2022년 9월 17일
1

JSP

목록 보기
2/12

JSP 기본

이번 JSP 기본 포스팅에서는 생성한 JSP 프로젝트의 구조 및 JSP 파일의 기본 구조, 지시어(Directive), 스크립트 요소(Script Elements)에 대해 다뤄보고자 합니다.

JSP 프로젝트 구조

Dynamic Web Project를 생성하고 나면, 왼쪽 Project Explorer 창에서 다음과 같이 생성된 폴더들을 조회할 수 있습니다.

이 각 폴더들이 어떤 역할을 하는지, 무엇이 들어가는지에 대해 설명해 보겠습니다.

  • 1) Project_01

    방금 생성한 프로젝트를 나타냅니다.

  • 2) Java Resources

    자바 전용 폴더로, 자바파일(.java)이 저장됩니다.

  • 2-1) src/main/java

    이 폴더에 java 파일들을 배치합니다. 해당 폴더안에 있는 java 파일만 컴파일을 수행합니다.
    src는 소스 컴파일을 수행하며 실행은 webContent에서 실행됩니다.

  • 3) WebContent (Eclipse IDE 2022 버전부터는 webAbb)

    이 폴더에는 JSP파일이나 HTML파일과 같이 컴파일 되지 않아도 되는 파일들을 넣어줍니다.
    이 폴더 안에는 META-INF와 WEB-INF 폴더가 들어있습니다.

  • 4) WEB-INF

    이 폴더 안에는 확장 라이브러리인 lib 폴더와 배포 서술자 web.xml파일이 들어있습니다.

  • 5) Servers

    설정을 마친 톰캣 서버가 들어있습니다.


JSP 파일 기본 구조

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

즉, JSP의 주된 목적은 웹 브라우저에 띄울 HTML 파일을 생성하는 것 입니다.

<%@ 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>Hello, JSP</title>
</head>
<body>
	<h2>처음 만들어보는 <%= str1 %></h2>
	<p>
		<%
		out.println(str2 + str1 + "입니다. 열공합시다! ^^");
		%>
	</p>
</body>
</html>

다음 코드에서 보듯이, JSP 파일은 일반적인 HTML 파일에 몇 가지 요소들이 추가된 형태입니다.

이 추가된 요소들을 크게 분류해 보면 지시어, 스크립트 요소 가 있습니다.


지시어 (Directive)

지시어는 JSP 페이지를 Java(서블릿) 코드로 변환하는데 필요한 정보를 JSP 엔진에 알려주는 역할을 합니다.
주로 스크립트 언어나 인코딩 방식 등을 설정합니다.

📃 지시어의 기본 구문

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

지시어의 기본 구문은 다음과 같이 지시어 종류 뒤에 다수의 속성을 지정할 수 있는 구조입니다.
사용할 수 있는 속성은 지시어마다 다릅니다.

지시어의 종류

지시어의 종류는 다음 세 가지로 나뉩니다.

  • page 지시어
  • include 지시어
  • taglib 지시어

page 지시어

page 지시어는 JSP 페이지에 대한 정보를 설정합니다.
예를 들어 문서의 타입, 에러 페이지, MIME 타입과 같은 정보 등...

⛓ page 지시어의 속성들

🔗 language, contentType, pageEncoding 속성

이클립스에서 JSP 파일을 생성하면, 다음과 같이 해당 속성들(languate, contentType, pageEncoding)을 포함한 page 지시어가 기본적으로 삽입됩니다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
  • language
    페이지에서 사용할 스크립팅 언어를 지정한다.

  • contentType
    JSP 페이지가 생성할 문서의 타입을 지정한다. 이 타입으로는 생성할 응답 문서의 MIME 타입을 입력한다. ex) text/html

  • pageEncoding
    인코딩을 지정한다. 해당 소스코드의 인코딩 방식은 UTF-8 이다.

🔗 import 속성

JSP 파일에서 외부 클래스(파일)가 필요할 때 임포트하기 위해 사용하는 속성입니다.
(Java 에서 외부 클래스를 사용하려면 import문으로 해당 패키지/클래스를 가져오는 것과 비슷한 개념)
추가적으로 덧붙이면, java.lang 패키지에 속하지 않은 클래스를 JSP 문서에서 사용하기 위해 사용합니다.

💻 import 속성을 이용한 날짜 표시 페이지

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.text.SimpleDateFormat" %> 
<%@ page import="java.util.Date" %> 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Today is? | page 지시어 - import 속성 예제</title>
</head>
<body>
	<%
	Date today = new Date();
	SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");
	String dateStr = dateformat.format(today);
	out.println("오늘 날짜 : " + dateStr);
	%>
</body>
</html>

다음은 SimpleDateFormat 클래스와 Date 클래스를 이용하여 오늘 날짜를 원하는 포맷으로 출력하는 코드입니다.

SimpleDateFormat 클래스와 Date 클래스는 java.lang 패키지에 속해있는 클래스가 아니기 때문에, 현재 JSP 문서에서 사용하기 위해서는 page 지시어 - import 속성을 이용해, 임포트 해 주어야 합니다.

🔗 errorPage, isErrorPage 속성

JSP는 실행도중, 에러가 발생하면 HTTP Status 500 에러 화면을 웹 브라우저에서 표시해줍니다.

서비스 도중 이러한 에러화면을 그대로 노출시키는 것은 고객의 신뢰를 잃는 요인이 될 수도 있으며, 에러가 발생된 코드의 일부가 노출되게 되므로, 보안상으로도 좋지 않습니다.

에러가 발생하는 상황에서 에러화면 대신 개발자가 지정한 JSP 화면을 보여주는 방식으로 이러한 문제를 처리할 수 있는데 이때 page 지시어의 errorPage , isErrorPage 속성을 사용합니다.

💻 errorPage 속성을 이용하여 에러 페이지 지정

에러가 발생할 수 있는 jsp 페이지의 page 지시어 부분에 errorPage 속성을 입력하고 해당 속성에 에러발생 시 사용자에게 나타낼 jsp 페이지(에러 페이지)를 지정해 줄 수 있습니다. (HTTP Status 500 페이지 대신)

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

... 생략 ...

이 방법을 통해 해당 페이지에서 에러가 발생하였을 시 직접 처리하지 않고, errorPage 속성으로 지정한 에러 페이지를 웹 브라우저에 나타냅니다.

위 코드에서는 해당 페이지에서 에러가 발생하면 IsErrorPage.jsp가 웹 브라우저에 출력됩니다.

💻 isErrorPage 속성을 설정한 에러 페이지

errorPage 속성에서 지정한 에러 페이지에서는 isErrorPage 속성을 "true"로 설정해 주어야 합니다. 그래야만 발생된 에러 내용을 그대로 넘겨받을 수 있습니다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isErrorPage="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Page 지시어 - isErrorPage 속성을 설정한 에러페이지 작성</title>
</head>
<body>
	<h2>서비스 중 일시적인 오류가 발생하였습니다.</h2>
	<p>
		오류명 : <%= exception.getClass().getName() %> <br />
		오류 메세지 : <%= exception.getMessage() %>
	</p>
</body>
</html>

errorPage 속성을 통해 에러페이지로 위 IsErrorPage.jsp 파일을 지정한 jsp파일 ErrorPage.jsp를 실행해 보면 다음과 같은 결과를 확인할 수 있습니다.


주소 표시줄에는 ErrorPage.jsp 가 표시되지만, 화면에는 ErrorPage.jsp 파일에서 errorPage 속성을 통해 지정한( errorPage="IsErrorPage.jsp" ) 에러페이지 IsErrorPage.jsp 의 내용이 출력됩니다.


profile
꾸준함의 힘

0개의 댓글