본문 바로가기
Language/JAVA

[JSP] Servlet & JSP / 지시어, 스크립트 요소

by 아이엠제니 2022. 3. 10.

 

 

 

Servlet = java 기반

JSP = html 기반

 

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

 

 

  • 지시어: 해당 JSP 페이지의 처리 방법을 JSP 엔진에 '지시'해주는 역할을 함
    • <%@ 지시어 종류 속성1="값1" 속성2="값2" ... %>
    • page 지시어: JSP 페이지에 대한 정보 설정 (p.64)
        •  <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
        • language: 스크립팅 언어로 자바 사용
        • contentType: 문서의 타입, 즉 MIME 타입은 text/html이고, 캐릭터셋은 UTF-8
        • pageEncoding: 소스 코드의 인코딩 방식은 UTF-8
      • include 지시어: 외부 파일을 현재 JSP 페이지에 포함. 반복되는 부분을 별도 파일에 작성
        • <%@ include file="포함할 파일의 경로" %>
      • taglib 지시어: 표현 언어에서 사용할 자바 클래스나 JSTL을 선언
        • EL(표현 언어)에서 자바 클래스의 메서드를 호출
        • JSTL(JSP 표준 태그 라이브러리)을 사용하기 위한 지시어
  • 스크립트 요소: HTML 파일 중간에 자바 코드를 삽입할 때 사용 (선언부, 스크립틀릿, 표현식)
    • 선언부 (Declaration)
      • 스크립틀릿이나 표현식에서 사용할 멤버 변수나 메서드를 선언
      • 서블릿으로 변환 시 _jspService() 메서드 '외부'에 선언됨
      • <%! 메서드 선언 %>
    • 스크립틀릿 (Scriptlet)
      • JSP 페이지가 요청을 받을 때 실행되야 할 자바 코드를 작성하는 영역
      • 서블릿으로 변환 시 _jspService() 메서드 '내부'에 그대로 기술
      • <% 자바 코드 %>
      • 선언부에서 정의한 메서드를 호출만 할 수 있을 뿐, 다른 메서드를 선언할 수는 없음
    • 표현식(Expression)
      • 실행 결과로 하나의 값이 남는 문장
      • 상수, 변수, 연산자를 사용한 (수)식, '반환값이 있는 '메서드 호출 등이 모두 표현식에 속함
      • <%= 자바 표현식 %>

 

 

Page 지시어

page 지시어 - import 예제

예제1-1

webapp/01DirectiveScript/Import.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.text.SimpleDateFormat"%> <!-- 필요한 외부 클래스 import -->
<%@ page import="java.util.Date"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>page 지시어 - import 속성</title>
</head>
<body>
	<%
	Date today = new Date(); // 외부 클래스 생성
	SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); // 외부 클래스 생성
	String todayStr = dateFormat.format(today);
	out.println("오늘 날짜 : :" + todayStr); // 오늘 날짜를 웹 브라우저에 출력
	%>
</body>
</html>

 

page 지시어 - errorPage, isErrorPage 속성

예제 1-2

webapp/01DirectiveScript/Error500.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<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>

내장 객체인 request로부터 "age"라는 이름의 매개변수 값을 받아와 정수로 변환함.

최초 실행 시 매개변수가 없으므로 null 값이 전달되어 예외(에러)가 발생함.

고객에게는 해당 오류가 보이지 않도록 처리해야 함.

  1. try/catch를 사용하여 직접 에러 처리
  2. errorPage, isErrorPage 속성을 사용하여 디자인이 적용된 페이지로 대체함

 

try~catch 구문으로 직접 처리

예제1-3

webapp/01DirectiveScript/ErrorTryCatch.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>지시어 - errorPage, isErrorPage 속성</title>
</head>
<body>
<%
try { // 예외 발생 부분을 try/catch로 감싸기
	int myAge = Integer.parseInt(request.getParameter("age")) + 10;
		out.println("10년 후 당신의 나이는" + myAge + "입니다.");
} catch(Exception e) {
	out.println("예외 발생 : 매개변수 age가 null입니다.");
}
%>
</body>
</html>

 

errorPage 속성으로 에러 페이지 지정

예제 1-4

webapp/01DirectiveScript/ErrorPage.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" errorPage="IsErrorPage.jsp" %> <!-- 에러 페이지 지정 -->
<!DOCTYPE html>
<html>
<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>

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

예제 1-5

webapp/01DirectiveScript/IsErrorPage.jsp

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

주소 표시줄에는 [ErrorPage.jsp]가 표시되지만, 화면에는 [IsErrorPage.jsp]의 내용이 출력됨

 

page 지시어 - trimDirectiveWhitespaces 속성

page 지시어로 생긴 공백 제거

예제 1-6

webapp/01DirectiveScript/TrimWhitespace.jsp

<%@ 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>

적용 전/후

 

page 지시어 - buffer, autoFlush 속성

버퍼와 플러시

예제 1-7

webapp/01DirectiveScript/AutoFlushTest.jsp

<%@ 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>page 지시어 - buffer, autoFlush</title>
</head>
<body>
	<%
	for (int i = 1; i <= 100; i++) { // 버퍼 채우기
		out.println("abcde12345");
	}
	%>
</body>
</html>

1kb를 넘기게 되어서, 에러 발생

 

 

 

include 지시어

공통 UI 요소를 담은 JSP 파일(포함될 파일)

예제 1-8

wepapp/01DirectiveScript/IncludeFile.jsp

<%@ page import="java.time.LocalDateTime"%>
<%@ page import="java.time.LocalDate"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
LocalDate today = LocalDate.now(); //오늘 날씨
LocalDateTime tomorrow = LocalDateTime.now().plusDays(1); //내일 날씨
%>

 

다른 JSP 파일을 포함하는 JSP 파일

예제 1-9

wepapp/01DirectiveScript/IncludeMain.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ include file="IncludeFile.jsp"%>
<!-- 다른 JSP 파일 포함 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>include 지시어</title>
</head>
<body>
	<%
	//IncludeFile.jsp에서 선언한 변수 사용
	out.println("오늘 날짜 : " + today);
	out.println("<br/>");
	out.println("내일 날짜 : " + tomorrow);
	%>
</body>
</html>

 

 

 

스크립트 요소

스크립트 요소 활용

예제 1-10

wepapp/01DirectiveScript/ScriptElements.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%! // 선언부(메서드 선언)
    public int add(int num1, int num2) {
    	return num1 + num2;
    }
    %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>스크립트 요소</title>
</head>
<body>
	<% // 스크립틀릿(자바 코드)
	int result = add(10,20);
	%>
	덧셈 결과 1 : <%= result %> <br/> <!-- 표현식(변수) -->
	덧셈 결과 2 : <%= add(30,40) %> <!-- 표현식(메서드 호출) -->
</body>
</html>

 

 

 

[성낙현의 JSP 자바 웹 프로그래밍] 책 공부 기록

 

 

 

300x250